diff Platforms/Generic/WebServiceCommandBase.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 87376a645ee1
children b4abaeb783b1
line wrap: on
line diff
--- a/Platforms/Generic/WebServiceCommandBase.cpp	Mon Sep 10 12:22:26 2018 +0200
+++ b/Platforms/Generic/WebServiceCommandBase.cpp	Fri Sep 14 16:44:01 2018 +0200
@@ -42,7 +42,7 @@
   {
     DeclareEmittableMessage(MessageType_HttpRequestError);
     DeclareEmittableMessage(MessageType_HttpRequestSuccess);
-    RegisterObserver(callback);
+    // TODO ? RegisterObserver(callback);
   }
 
 
@@ -61,4 +61,40 @@
       EmitMessage(message);
     }
   }
+
+  NewWebServiceCommandBase::NewWebServiceCommandBase(MessageBroker& broker,
+                                                     MessageHandler<IWebService::NewHttpRequestSuccessMessage>* successCallback,
+                                                     MessageHandler<IWebService::NewHttpRequestErrorMessage>* failureCallback,
+                                               const Orthanc::WebServiceParameters& parameters,
+                                               const std::string& uri,
+                                               const IWebService::Headers& headers,
+                                               Orthanc::IDynamicObject* payload /* takes ownership */,
+                                               NativeStoneApplicationContext& context) :
+    IObservable(broker),
+    successCallback_(successCallback),
+    failureCallback_(failureCallback),
+    parameters_(parameters),
+    uri_(uri),
+    headers_(headers),
+    payload_(payload),
+    context_(context)
+  {
+  }
+
+
+  void NewWebServiceCommandBase::Commit()
+  {
+    NativeStoneApplicationContext::GlobalMutexLocker lock(context_);  // we want to make sure that, i.e, the UpdateThread is not triggered while we are updating the "model" with the result of a WebServiceCommand
+
+    if (success_ && successCallback_.get() != NULL)
+    {
+      successCallback_->Apply(IWebService::NewHttpRequestSuccessMessage(uri_, answer_.c_str(), answer_.size(), payload_.release()));
+    }
+    else if (!success_ && failureCallback_.get() != NULL)
+    {
+      successCallback_->Apply(IWebService::NewHttpRequestErrorMessage(uri_, payload_.release()));
+    }
+
+  }
+
 }