Mercurial > hg > orthanc-stone
diff Framework/SmartLoader.cpp @ 262:77fdab5b5d6e am-2
cleanup + todos
author | am@osimis.io |
---|---|
date | Tue, 17 Jul 2018 18:28:12 +0200 |
parents | c887eddd48f1 |
children | c9cf95b49a86 |
line wrap: on
line diff
--- a/Framework/SmartLoader.cpp Tue Jul 17 14:44:26 2018 +0200 +++ b/Framework/SmartLoader.cpp Tue Jul 17 18:28:12 2018 +0200 @@ -33,12 +33,29 @@ void SmartLoader::HandleMessage(IObservable& from, const IMessage& message) { + switch (message.GetType()) { + case MessageType_SliceGeometryReady: + // TODO keep track of objects that have been loaded already + break; + case MessageType_SliceImageReady: + // TODO keep track of objects that have been loaded already + break; + default: + VLOG("unhandled message type" << message.GetType()); + } + // forward messages to its own observers IObservable::broker_.EmitMessage(from, IObservable::observers_, message); } ILayerSource* SmartLoader::GetFrame(const std::string& instanceId, unsigned int frame) { + // TODO: check if this frame has already been loaded or is already being loaded. + // - if already loaded: create a "clone" that will emit the GeometryReady/ImageReady messages "immediately" + // (it can not be immediate because Observers needs to register first and this is done after this method returns) + // - 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_)); layerSource->SetImageQuality(imageQuality_); layerSource->RegisterObserver(*this);