Mercurial > hg > orthanc-stone
diff Framework/SmartLoader.cpp @ 300:b4abaeb783b1 am-callable-and-promise
messaging refactoring almost complete: works fine in native
author | am@osimis.io |
---|---|
date | Tue, 18 Sep 2018 15:23:21 +0200 |
parents | 3897f9f28cfa |
children | b66d13708f40 |
line wrap: on
line diff
--- a/Framework/SmartLoader.cpp Fri Sep 14 16:44:01 2018 +0200 +++ b/Framework/SmartLoader.cpp Tue Sep 18 15:23:21 2018 +0200 @@ -21,6 +21,7 @@ #include "SmartLoader.h" #include "Layers/OrthancFrameLayerSource.h" +#include "Messages/MessageForwarder.h" namespace OrthancStone { @@ -31,41 +32,6 @@ webService_(webService), orthancApiClient_(broker, webService) { -// DeclareHandledMessage(MessageType_LayerSource_GeometryReady); -// DeclareHandledMessage(MessageType_LayerSource_LayerReady); -// DeclareIgnoredMessage(MessageType_LayerSource_GeometryError); -// DeclareIgnoredMessage(MessageType_LayerSource_ContentChanged); -// DeclareIgnoredMessage(MessageType_LayerSource_SliceChanged); - -// DeclareHandledMessage(MessageType_OrthancApi_InternalGetJsonResponseReady); -// DeclareIgnoredMessage(MessageType_OrthancApi_InternalGetJsonResponseError); - } - - void SmartLoader::HandleMessage(IObservable& from, const IMessage& message) - { - switch (message.GetType()) { - case MessageType_LayerSource_GeometryReady: - { - //const OrthancFrameLayerSource* layerSource=dynamic_cast<const OrthancFrameLayerSource*>(&from); - // TODO keep track of objects that have been loaded already - }; break; - case MessageType_LayerSource_LayerReady: - { - //const OrthancFrameLayerSource* layerSource=dynamic_cast<const OrthancFrameLayerSource*>(&from); - // TODO keep track of objects that have been loaded already - }; break; -// case MessageType_OrthancApi_GetStudyIds_Ready: -// { - -// const OrthancApiClient::GetJsonResponseReadyMessage& msg = dynamic_cast<OrthancApiClient::GetJsonResponseReadyMessage&>(message); - -// }; break; - default: - VLOG("unhandled message type" << message.GetType()); - } - - // forward messages to its own observers - // TODO TODO TODO IObservable::broker_.EmitMessage(from, IObservable::observers_, message); } ILayerSource* SmartLoader::GetFrame(const std::string& instanceId, unsigned int frame) @@ -76,9 +42,10 @@ // - if currently loading, we need to return an object that will observe the existing LayerSource and forward // the messages to its observables // in both cases, we must be carefull about objects lifecycle !!! - std::auto_ptr<OrthancFrameLayerSource> layerSource (new OrthancFrameLayerSource(IObserver::broker_, webService_)); + std::auto_ptr<OrthancFrameLayerSource> layerSource (new OrthancFrameLayerSource(IObserver::broker_, orthancApiClient_)); layerSource->SetImageQuality(imageQuality_); - //layerSource->RegisterObserverCallback(new Callable<SmartLoader, ILayerSource::GeometryReadyMessage>(*this, &SmartLoader::....)); + layerSource->RegisterObserverCallback(new MessageForwarder<ILayerSource::GeometryReadyMessage>(IObserver::broker_, *this)); + layerSource->RegisterObserverCallback(new MessageForwarder<ILayerSource::LayerReadyMessage>(IObserver::broker_, *this)); layerSource->LoadFrame(instanceId, frame); return layerSource.release();