changeset 2327:139c0ed1ed0c refactoring

improved message templating
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 02 Oct 2026 08:12:12 +0200
parents f5d2e4b76439
children feaa1543cc69
files Applications/Samples/Sdl/SingleFrameViewer/SdlSimpleViewer.cpp OrthancStone/Sources/Loaders/DicomResourcesLoader.cpp OrthancStone/Sources/Loaders/DicomResourcesLoader.h OrthancStone/Sources/Loaders/SeriesFramesLoader.cpp OrthancStone/Sources/Loaders/SeriesFramesLoader.h OrthancStone/Sources/Messages/IObservable.h OrthancStone/Sources/Messages/TypedObservable.h OrthancStone/Sources/StoneApplication.h
diffstat 8 files changed, 26 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/Samples/Sdl/SingleFrameViewer/SdlSimpleViewer.cpp	Wed Sep 30 21:15:01 2026 +0200
+++ b/Applications/Samples/Sdl/SingleFrameViewer/SdlSimpleViewer.cpp	Fri Oct 02 08:12:12 2026 +0200
@@ -330,7 +330,9 @@
         framesLoader_ = SeriesFramesLoader::Create(*context_, *message.GetResources());
 
         //Register<FrameDecodedMessage>(*framesLoader_, &SimpleViewerApp::Handle);
-        framesLoader_->Register(shared_from_this());
+
+        //framesLoader_->TypedObservable<FrameDecodedMessage>::Register(shared_from_this());
+        New::IObservable::Bind<FrameDecodedMessage>(framesLoader_, shared_from_this());
 
         assert(message.HasUserPayload());
 
@@ -357,8 +359,8 @@
 
       //Register<DicomResourcesLoadedMessage>(*dicomLoader_, &SimpleViewerApp::Handle);
 
-      //New::TypedObservable<DicomResourcesLoadedMessage>::Bind(*dicomLoader_, shared_from_this());
-      dicomLoader_->Register(shared_from_this());
+      //dicomLoader_->TypedObservable<DicomResourcesLoadedMessage>::Register(shared_from_this());
+      New::IObservable::Bind<DicomResourcesLoadedMessage>(dicomLoader_, shared_from_this());
 
       annotations_.SetActiveTool(AnnotationsSceneLayer::Tool_Edit);
       annotations_.SetProbedLayer(0);
--- a/OrthancStone/Sources/Loaders/DicomResourcesLoader.cpp	Wed Sep 30 21:15:01 2026 +0200
+++ b/OrthancStone/Sources/Loaders/DicomResourcesLoader.cpp	Fri Oct 02 08:12:12 2026 +0200
@@ -98,7 +98,8 @@
       DicomResourcesLoadedMessage message(*loader_, target_, priority_, source_, userPayload_.get());
       loader_->BroadcastMessage(message);
 
-      loader_->Notify(message);
+      //loader_->Notify(*loader_, message);
+      New::IObservable::Dispatch(loader_, message);
     }
 
     boost::shared_ptr<DicomResourcesLoader> GetLoader()
--- a/OrthancStone/Sources/Loaders/DicomResourcesLoader.h	Wed Sep 30 21:15:01 2026 +0200
+++ b/OrthancStone/Sources/Loaders/DicomResourcesLoader.h	Fri Oct 02 08:12:12 2026 +0200
@@ -108,9 +108,6 @@
     public New::IObservable,
     public New::TypedObservable<DicomResourcesLoadedMessage>
   {
-  public:
-    using New::TypedObservable<DicomResourcesLoadedMessage>::Register;  // TODO Refactoring - Presumably not needed
-
   private:
     class Handler;
     class StringHandler;
--- a/OrthancStone/Sources/Loaders/SeriesFramesLoader.cpp	Wed Sep 30 21:15:01 2026 +0200
+++ b/OrthancStone/Sources/Loaders/SeriesFramesLoader.cpp	Fri Oct 02 08:12:12 2026 +0200
@@ -147,7 +147,8 @@
       
     FrameDecodedMessage message(*this, frameIndex, payload.GetQuality(), image, instance, parameters, payload.GetUserPayload());
     BroadcastMessage(message);
-    Notify(message);
+
+    New::IObservable::Dispatch(shared_from_this(), message);
   }
 
 
--- a/OrthancStone/Sources/Loaders/SeriesFramesLoader.h	Wed Sep 30 21:15:01 2026 +0200
+++ b/OrthancStone/Sources/Loaders/SeriesFramesLoader.h	Fri Oct 02 08:12:12 2026 +0200
@@ -108,9 +108,6 @@
     public New::IObservable,
     public New::TypedObservable<FrameDecodedMessage>
   {
-  public:
-    using New::TypedObservable<FrameDecodedMessage>::Register;  // TODO Refactoring - Presumably not needed
-
   private:
     class Payload;
 
--- a/OrthancStone/Sources/Messages/IObservable.h	Wed Sep 30 21:15:01 2026 +0200
+++ b/OrthancStone/Sources/Messages/IObservable.h	Fri Oct 02 08:12:12 2026 +0200
@@ -65,10 +65,18 @@
       {
       }
 
+      template <typename Observable, typename Message>
+      static void Dispatch(const boost::shared_ptr<Observable>& observable,
+                           const Message& message)
+      {
+        static_cast< TypedObservable<Message>& >(*observable).Notify(*observable, message);
+      }
+
       template <typename Message>
-      void Notify(const Message& message)
+      static void Bind(const boost::shared_ptr< TypedObservable<Message> >& observable,
+                       const boost::shared_ptr< TypedObserver<Message> >& observer)
       {
-        dynamic_cast< TypedObservable<Message>& >(*this).Dispatch(*this, message);
+        observable->Register(observer);
       }
     };
   }
--- a/OrthancStone/Sources/Messages/TypedObservable.h	Wed Sep 30 21:15:01 2026 +0200
+++ b/OrthancStone/Sources/Messages/TypedObservable.h	Fri Oct 02 08:12:12 2026 +0200
@@ -47,8 +47,8 @@
         content_.push_back(observer);
       }
 
-      void Dispatch(const IObservable& observable,
-                    const Message& message)
+      void Notify(const IObservable& observable,
+                  const Message& message)
       {
         Content active;
 
@@ -65,13 +65,6 @@
 
         content_.swap(active);
       }
-
-      template <typename Observable>
-      static void Bind(Observable& observable,
-                       const boost::shared_ptr< TypedObserver<Message> >& observer)
-      {
-        static_cast< TypedObservable<Message>& >(observable).Register(observer);
-      }
     };
   }
 }
--- a/OrthancStone/Sources/StoneApplication.h	Wed Sep 30 21:15:01 2026 +0200
+++ b/OrthancStone/Sources/StoneApplication.h	Fri Oct 02 08:12:12 2026 +0200
@@ -132,6 +132,11 @@
 
       IOracle& GetOracle();
 
+      const boost::shared_ptr<OracleScheduler>& GetScheduler() const
+      {
+        return oracleScheduler_;
+      }
+
       virtual void EmitMessage(boost::weak_ptr<IObserver> observer,
                                const IMessage& message) ORTHANC_OVERRIDE;