Mercurial > hg > orthanc-stone
diff Framework/Layers/OrthancFrameLayerSource.cpp @ 299:3897f9f28cfa am-callable-and-promise
backup work in progress: updated messaging framework with ICallable
author | am@osimis.io |
---|---|
date | Fri, 14 Sep 2018 16:44:01 +0200 |
parents | 5bd4161bf11b |
children | b4abaeb783b1 |
line wrap: on
line diff
--- a/Framework/Layers/OrthancFrameLayerSource.cpp Mon Sep 10 12:22:26 2018 +0200 +++ b/Framework/Layers/OrthancFrameLayerSource.cpp Fri Sep 14 16:44:01 2018 +0200 @@ -31,46 +31,35 @@ namespace OrthancStone { - void OrthancFrameLayerSource::HandleMessage(IObservable& from, const IMessage& message) + + void OrthancFrameLayerSource::OnSliceGeometryReady(const OrthancSlicesLoader::SliceGeometryReadyMessage& message) { - switch (message.GetType()) - { - case MessageType_SliceLoader_GeometryReady: - { - const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from); - if (loader.GetSliceCount() > 0) - { - LayerSourceBase::NotifyGeometryReady(); - } - else - { - LayerSourceBase::NotifyGeometryError(); - } - - }; break; - case MessageType_SliceLoader_GeometryError: + if (message.origin_.GetSliceCount() > 0) { - const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from); - LayerSourceBase::NotifyGeometryError(); - }; break; - case MessageType_SliceLoader_ImageReady: + LayerSourceBase::NotifyGeometryReady(); + } + else { - const OrthancSlicesLoader::SliceImageReadyMessage& msg = dynamic_cast<const OrthancSlicesLoader::SliceImageReadyMessage&>(message); - bool isFull = (msg.effectiveQuality_ == SliceImageQuality_FullPng || msg.effectiveQuality_ == SliceImageQuality_FullPam); - LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(msg.image_.release(), msg.slice_, isFull), - msg.slice_.GetGeometry(), false); - - }; break; - case MessageType_SliceLoader_ImageError: - { - const OrthancSlicesLoader::SliceImageErrorMessage& msg = dynamic_cast<const OrthancSlicesLoader::SliceImageErrorMessage&>(message); - LayerSourceBase::NotifyLayerReady(NULL, msg.slice_.GetGeometry(), true); - }; break; - default: - VLOG("unhandled message type" << message.GetType()); + LayerSourceBase::NotifyGeometryError(); } } + void OrthancFrameLayerSource::OnSliceGeometryError(const OrthancSlicesLoader::SliceGeometryErrorMessage& message) + { + LayerSourceBase::NotifyGeometryError(); + } + + void OrthancFrameLayerSource::OnSliceImageReady(const OrthancSlicesLoader::SliceImageReadyMessage& message) + { + bool isFull = (message.effectiveQuality_ == SliceImageQuality_FullPng || message.effectiveQuality_ == SliceImageQuality_FullPam); + LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(message.image_.release(), message.slice_, isFull), + message.slice_.GetGeometry(), false); + } + + void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader::SliceImageErrorMessage& message) + { + LayerSourceBase::NotifyLayerReady(NULL, message.slice_.GetGeometry(), true); + } OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, IWebService& orthanc) : LayerSourceBase(broker), @@ -79,11 +68,14 @@ loader_(broker, orthanc), quality_(SliceImageQuality_FullPng) { - DeclareHandledMessage(MessageType_SliceLoader_GeometryReady); - DeclareHandledMessage(MessageType_SliceLoader_GeometryError); - DeclareHandledMessage(MessageType_SliceLoader_ImageReady); - DeclareHandledMessage(MessageType_SliceLoader_ImageError); - loader_.RegisterObserver(*this); +// DeclareHandledMessage(MessageType_SliceLoader_GeometryReady); +// DeclareHandledMessage(MessageType_SliceLoader_GeometryError); +// DeclareHandledMessage(MessageType_SliceLoader_ImageReady); +// DeclareHandledMessage(MessageType_SliceLoader_ImageError); + loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceGeometryReadyMessage>(*this, &OrthancFrameLayerSource::OnSliceGeometryReady)); + loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceGeometryErrorMessage>(*this, &OrthancFrameLayerSource::OnSliceGeometryError)); + loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceImageReadyMessage>(*this, &OrthancFrameLayerSource::OnSliceImageReady)); + loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceImageErrorMessage>(*this, &OrthancFrameLayerSource::OnSliceImageError)); }