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);