diff Samples/Sdl/FusionMprSdl.cpp @ 828:28f99af358fa

Merge + FusionMprSdl
author Benjamin Golinvaux <bgo@osimis.io>
date Wed, 29 May 2019 16:15:04 +0200
parents 2fd96a637a59
children c47031d9f6b1
line wrap: on
line diff
--- a/Samples/Sdl/FusionMprSdl.cpp	Wed May 29 13:44:55 2019 +0200
+++ b/Samples/Sdl/FusionMprSdl.cpp	Wed May 29 16:15:04 2019 +0200
@@ -24,8 +24,6 @@
 
 #include "../../Framework/StoneInitialization.h"
 
-#include "../../Framework/Messages/IMessageEmitter.h"
-
 #include "../../Framework/Scene2D/CairoCompositor.h"
 #include "../../Framework/Scene2D/ColorTextureSceneLayer.h"
 #include "../../Framework/Scene2D/OpenGLCompositor.h"
@@ -50,7 +48,6 @@
 #include <boost/shared_ptr.hpp>
 #include <boost/weak_ptr.hpp>
 #include <boost/make_shared.hpp>
-#include <boost/thread.hpp>
 
 #include <stdio.h>
 #include "../../Framework/Oracle/GetOrthancWebViewerJpegCommand.h"
@@ -65,76 +62,6 @@
 
 namespace OrthancStone
 {
-
-  class NativeApplicationContext : public IMessageEmitter
-  {
-  private:
-    boost::shared_mutex  mutex_;
-    MessageBroker        broker_;
-    IObservable          oracleObservable_;
-
-  public:
-    NativeApplicationContext() :
-      oracleObservable_(broker_)
-    {
-    }
-
-
-    virtual void EmitMessage(const IObserver& observer,
-      const IMessage& message) ORTHANC_OVERRIDE
-    {
-      try
-      {
-        boost::unique_lock<boost::shared_mutex>  lock(mutex_);
-        oracleObservable_.EmitMessage(observer, message);
-      }
-      catch (Orthanc::OrthancException& e)
-      {
-        LOG(ERROR) << "Exception while emitting a message: " << e.What();
-      }
-    }
-
-
-    class ReaderLock : public boost::noncopyable
-    {
-    private:
-      NativeApplicationContext& that_;
-      boost::shared_lock<boost::shared_mutex>  lock_;
-
-    public:
-      ReaderLock(NativeApplicationContext& that) :
-        that_(that),
-        lock_(that.mutex_)
-      {
-      }
-    };
-
-
-    class WriterLock : public boost::noncopyable
-    {
-    private:
-      NativeApplicationContext& that_;
-      boost::unique_lock<boost::shared_mutex>  lock_;
-
-    public:
-      WriterLock(NativeApplicationContext& that) :
-        that_(that),
-        lock_(that.mutex_)
-      {
-      }
-
-      MessageBroker& GetBroker()
-      {
-        return that_.broker_;
-      }
-
-      IObservable& GetOracleObservable()
-      {
-        return that_.oracleObservable_;
-      }
-    };
-  };
-
   const char* FusionMprMeasureToolToString(size_t i)
   {
     static const char* descs[] = {
@@ -474,10 +401,31 @@
   }
 
 
-  FusionMprSdlApp::FusionMprSdlApp(MessageBroker& broker) : IObserver(broker)
+  FusionMprSdlApp::FusionMprSdlApp(MessageBroker& broker)
+    : IObserver(broker)
+    , broker_(broker)
+    , oracleObservable_(broker)
+    , oracle_(*this)
     , currentTool_(FusionMprGuiTool_Rotate)
   {
-    controller_ = boost::shared_ptr<ViewportController>(new ViewportController(broker));
+    //oracleObservable.RegisterObserverCallback
+    //(new Callable
+    //  <FusionMprSdlApp, SleepOracleCommand::TimeoutMessage>(*this, &FusionMprSdlApp::Handle));
+
+    //oracleObservable.RegisterObserverCallback
+    //(new Callable
+    //  <Toto, GetOrthancImageCommand::SuccessMessage>(*this, &FusionMprSdlApp::Handle));
+
+    //oracleObservable.RegisterObserverCallback
+    //(new Callable
+    //  <FusionMprSdlApp, GetOrthancWebViewerJpegCommand::SuccessMessage>(*this, &ToFusionMprSdlAppto::Handle));
+
+    oracleObservable_.RegisterObserverCallback
+    (new Callable
+      <FusionMprSdlApp, OracleCommandExceptionMessage>(*this, &FusionMprSdlApp::Handle));
+    
+    controller_ = boost::shared_ptr<ViewportController>(
+      new ViewportController(broker_));
 
     controller_->RegisterObserverCallback(
       new Callable<FusionMprSdlApp, ViewportController::SceneTransformChanged>
@@ -653,18 +601,11 @@
 
 
     //////// from loader
-
-        // from main
-    NativeApplicationContext context;
-    ThreadedOracle oracle(context);
-
-
-
     {
       Orthanc::WebServiceParameters p;
       //p.SetUrl("http://localhost:8043/");
       p.SetCredentials("orthanc", "orthanc");
-      oracle.SetOrthancParameters(p);
+      oracle_.SetOrthancParameters(p);
     }
 
     //////// from Run
@@ -678,38 +619,16 @@
     boost::shared_ptr<DicomStructureSetLoader>  rtstructLoader;
 
     {
-      NativeApplicationContext::WriterLock lock(context);
-      //toto.reset(new Toto(oracle, lock.GetOracleObservable()));
-      oracle_ = &oracle;
-      IObservable* oracleObservable = &lock.GetOracleObservable();
-
-
-      //oracleObservable->RegisterObserverCallback
-      //(new Callable
-      //  <FusionMprSdlApp, SleepOracleCommand::TimeoutMessage>(*this, &FusionMprSdlApp::Handle));
-
-
-      //oracleObservable->RegisterObserverCallback
-      //(new Callable
-      //  <Toto, GetOrthancImageCommand::SuccessMessage>(*this, &FusionMprSdlApp::Handle));
-
-      //oracleObservable->RegisterObserverCallback
-      //(new Callable
-      //  <FusionMprSdlApp, GetOrthancWebViewerJpegCommand::SuccessMessage>(*this, &ToFusionMprSdlAppto::Handle));
-
-      oracleObservable->RegisterObserverCallback
-      (new Callable
-        <FusionMprSdlApp, OracleCommandExceptionMessage>(*this, &FusionMprSdlApp::Handle));
-      
-
-      ctLoader.reset(new OrthancSeriesVolumeProgressiveLoader(ct, oracle, lock.GetOracleObservable()));
-      doseLoader.reset(new OrthancMultiframeVolumeLoader(dose, oracle, lock.GetOracleObservable()));
-      rtstructLoader.reset(new DicomStructureSetLoader(oracle, lock.GetOracleObservable()));
+      ctLoader.reset(new OrthancSeriesVolumeProgressiveLoader(ct, oracle_, oracleObservable_));
+      doseLoader.reset(new OrthancMultiframeVolumeLoader(dose, oracle_, oracleObservable_));
+      rtstructLoader.reset(new DicomStructureSetLoader(oracle_, oracleObservable_));
     }
 
-
     //toto->SetReferenceLoader(*ctLoader);
-    doseLoader->RegisterObserverCallback
+    //doseLoader->RegisterObserverCallback
+    //(new Callable
+    //  <FusionMprSdlApp, DicomVolumeImage::GeometryReadyMessage>(*this, &FusionMprSdlApp::Handle));
+    ctLoader->RegisterObserverCallback
     (new Callable
       <FusionMprSdlApp, DicomVolumeImage::GeometryReadyMessage>(*this, &FusionMprSdlApp::Handle));
 
@@ -725,10 +644,10 @@
 
     this->SetStructureSet(2, rtstructLoader);
 
-#if 0
+#if 1
     // BGO data
     ctLoader->LoadSeries("a04ecf01-79b2fc33-58239f7e-ad9db983-28e81afa");  // CT
-    doseLoader->LoadInstance("830a69ff-8e4b5ee3-b7f966c8-bccc20fb-d322dceb");  // RT-DOSE
+    //doseLoader->LoadInstance("830a69ff-8e4b5ee3-b7f966c8-bccc20fb-d322dceb");  // RT-DOSE
     //rtstructLoader->LoadInstance("54460695-ba3885ee-ddf61ac0-f028e31d-a6e474d9");  // RT-STRUCT
 #else
     //ctLoader->LoadSeries("cb3ea4d1-d08f3856-ad7b6314-74d88d77-60b05618");  // CT
@@ -741,7 +660,7 @@
     rtstructLoader->LoadInstance("54460695-ba3885ee-ddf61ac0-f028e31d-a6e474d9");  // RT-STRUCT
 #endif
 
-    oracle.Start();
+    oracle_.Start();
 
 //// END from loader
 
@@ -818,7 +737,7 @@
      * as in (*).
      **/
 
-    oracle.Stop();
+    oracle_.Stop();
     //// END from loader
   }
 
@@ -861,7 +780,7 @@
 
   try
   {
-    MessageBroker broker;
+    OrthancStone::MessageBroker broker;
     boost::shared_ptr<FusionMprSdlApp> app(new FusionMprSdlApp(broker));
     g_app = app;
     app->PrepareScene();