diff Framework/Toolbox/IWebService.h @ 251:192e6e349e69 am-2

first usage of new message system (in SDL only)
author am@osimis.io
date Mon, 02 Jul 2018 18:13:46 +0200
parents 5412adf19980
children 40b21c1f8b8d
line wrap: on
line diff
--- a/Framework/Toolbox/IWebService.h	Mon Jul 02 16:36:17 2018 +0200
+++ b/Framework/Toolbox/IWebService.h	Mon Jul 02 18:13:46 2018 +0200
@@ -13,7 +13,7 @@
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Affero General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  **/
@@ -22,41 +22,102 @@
 #pragma once
 
 #include <Core/IDynamicObject.h>
-
+#include "../../Framework/Messages/IObserver.h"
 #include <string>
 
 namespace OrthancStone
 {
-  class IWebService : public boost::noncopyable
-  {
-  public:
-    class ICallback : public boost::noncopyable
+    class IWebService
     {
+    protected:
+        MessageBroker& broker_;
     public:
-      virtual ~ICallback()
-      {
-      }
+        class ICallback : public IObserver
+        {
+        public:
+            struct HttpRequestSuccessMessage: public IMessage
+            {
+                const std::string& Uri;
+                const void* Answer;
+                size_t AnswerSize;
+                Orthanc::IDynamicObject* Payload;
+                HttpRequestSuccessMessage(const std::string& uri,
+                                          const void* answer,
+                                          size_t answerSize,
+                                          Orthanc::IDynamicObject* payload)
+                    : IMessage(MessageType_HttpRequestSuccess),
+                      Uri(uri),
+                      Answer(answer),
+                      AnswerSize(answerSize),
+                      Payload(payload)
+                {}
+            };
 
-      virtual void NotifyError(const std::string& uri,
-                               Orthanc::IDynamicObject* payload) = 0;
+            struct HttpRequestErrorMessage: public IMessage
+            {
+                const std::string& Uri;
+                Orthanc::IDynamicObject* Payload;
+                HttpRequestErrorMessage(const std::string& uri,
+                                        Orthanc::IDynamicObject* payload)
+                    : IMessage(MessageType_HttpRequestError),
+                      Uri(uri),
+                      Payload(payload)
+                {}
+            };
+
+            ICallback(MessageBroker& broker)
+                : IObserver(broker)
+            {}
+            virtual ~ICallback()
+            {
+            }
 
-      virtual void NotifySuccess(const std::string& uri,
-                                 const void* answer,
-                                 size_t answerSize,
-                                 Orthanc::IDynamicObject* payload) = 0;
-    };
-    
-    virtual ~IWebService()
-    {
-    }
+            virtual void HandleMessage(IObservable& from, const IMessage& message)
+            {
+                switch(message.GetType())
+                {
+                case MessageType_HttpRequestError:
+                {    const HttpRequestErrorMessage& msg = dynamic_cast<const HttpRequestErrorMessage&>(message);
+                    OnHttpRequestError(msg.Uri,
+                                       msg.Payload);
+                }; break;
+
+                case MessageType_HttpRequestSuccess:
+                {
+                    const HttpRequestSuccessMessage& msg = dynamic_cast<const HttpRequestSuccessMessage&>(message);
+                    OnHttpRequestSuccess(msg.Uri,
+                                         msg.Answer,
+                                         msg.AnswerSize,
+                                         msg.Payload);
+                }; break;
+
+                }
+            }
+
+            virtual void OnHttpRequestError(const std::string& uri,
+                                            Orthanc::IDynamicObject* payload) = 0;
 
-    virtual void ScheduleGetRequest(ICallback& callback,
-                                    const std::string& uri,
-                                    Orthanc::IDynamicObject* payload) = 0;
+            virtual void OnHttpRequestSuccess(const std::string& uri,
+                                              const void* answer,
+                                              size_t answerSize,
+                                              Orthanc::IDynamicObject* payload) = 0;
+        };
+
+        IWebService(MessageBroker& broker)
+            : broker_(broker)
+        {}
 
-    virtual void SchedulePostRequest(ICallback& callback,
-                                     const std::string& uri,
-                                     const std::string& body,
-                                     Orthanc::IDynamicObject* payload) = 0;
-  };
+        virtual ~IWebService()
+        {
+        }
+
+        virtual void ScheduleGetRequest(ICallback& callback,
+                                        const std::string& uri,
+                                        Orthanc::IDynamicObject* payload) = 0;
+
+        virtual void SchedulePostRequest(ICallback& callback,
+                                         const std::string& uri,
+                                         const std::string& body,
+                                         Orthanc::IDynamicObject* payload) = 0;
+    };
 }