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