comparison Framework/Toolbox/IWebService.h @ 377:8eb4fe74000f

refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 05 Nov 2018 16:18:27 +0100
parents aad37d0b6407
children 939f626eb6d7
comparison
equal deleted inserted replaced
376:70256a53ff21 377:8eb4fe74000f
19 **/ 19 **/
20 20
21 21
22 #pragma once 22 #pragma once
23 23
24 #include <Core/IDynamicObject.h>
25 #include "../../Framework/Messages/IObserver.h" 24 #include "../../Framework/Messages/IObserver.h"
26 #include "../../Framework/Messages/ICallable.h" 25 #include "../../Framework/Messages/ICallable.h"
26
27 #include <Core/IDynamicObject.h>
28 #include <Core/Logging.h>
29
27 #include <string> 30 #include <string>
28 #include <map> 31 #include <map>
29 #include <Core/Logging.h>
30 32
31 namespace OrthancStone 33 namespace OrthancStone
32 { 34 {
33 // The IWebService performs HTTP requests. 35 // The IWebService performs HTTP requests.
34 // Since applications can run in native or WASM environment and, since 36 // Since applications can run in native or WASM environment and, since
35 // in a WASM environment, the WebService is asynchronous, the IWebservice 37 // in a WASM environment, the WebService is asynchronous, the IWebservice
36 // also implements an asynchronous interface: you must schedule a request 38 // also implements an asynchronous interface: you must schedule a request
37 // and you'll be notified when the response/error is ready. 39 // and you'll be notified when the response/error is ready.
38 class IWebService 40 class IWebService : public boost::noncopyable
39 { 41 {
40 protected: 42 protected:
41 MessageBroker& broker_; 43 MessageBroker& broker_;
44
42 public: 45 public:
43 typedef std::map<std::string, std::string> Headers; 46 typedef std::map<std::string, std::string> Headers;
44 47
45 struct HttpRequestSuccessMessage: public BaseMessage<MessageType_HttpRequestSuccess> 48 class HttpRequestSuccessMessage : public BaseMessage<MessageType_HttpRequestSuccess>
46 { 49 {
47 const std::string& uri_; 50 private:
48 const void* answer_; 51 const std::string& uri_;
49 size_t answerSize_; 52 const void* answer_;
50 Orthanc::IDynamicObject* payload_; 53 size_t answerSize_;
54 const Orthanc::IDynamicObject* payload_;
55
56 public:
51 HttpRequestSuccessMessage(const std::string& uri, 57 HttpRequestSuccessMessage(const std::string& uri,
52 const void* answer, 58 const void* answer,
53 size_t answerSize, 59 size_t answerSize,
54 Orthanc::IDynamicObject* payload) 60 const Orthanc::IDynamicObject* payload) :
55 : BaseMessage(), 61 uri_(uri),
56 uri_(uri), 62 answer_(answer),
57 answer_(answer), 63 answerSize_(answerSize),
58 answerSize_(answerSize), 64 payload_(payload)
59 payload_(payload) 65 {
60 {} 66 }
67
68 const std::string& GetUri() const
69 {
70 return uri_;
71 }
72
73 const void* GetAnswer() const
74 {
75 return answer_;
76 }
77
78 size_t GetAnswerSize() const
79 {
80 return answerSize_;
81 }
82
83 bool HasPayload() const
84 {
85 return payload_ != NULL;
86 }
87
88 const Orthanc::IDynamicObject& GetPayload() const;
89
90 const Orthanc::IDynamicObject* GetPayloadPointer() const
91 {
92 return payload_;
93 }
61 }; 94 };
95
62 96
63 struct HttpRequestErrorMessage: public BaseMessage<MessageType_HttpRequestError> 97 class HttpRequestErrorMessage : public BaseMessage<MessageType_HttpRequestError>
64 { 98 {
65 const std::string& uri_; 99 private:
66 Orthanc::IDynamicObject* payload_; 100 const std::string& uri_;
101 const Orthanc::IDynamicObject* payload_;
102
103 public:
67 HttpRequestErrorMessage(const std::string& uri, 104 HttpRequestErrorMessage(const std::string& uri,
68 Orthanc::IDynamicObject* payload) 105 const Orthanc::IDynamicObject* payload) :
69 : BaseMessage(), 106 uri_(uri),
70 uri_(uri), 107 payload_(payload)
71 payload_(payload) 108 {
72 {} 109 }
110
111 const std::string& GetUri() const
112 {
113 return uri_;
114 }
115
116 bool HasPayload() const
117 {
118 return payload_ != NULL;
119 }
120
121 const Orthanc::IDynamicObject& GetPayload() const;
122
123 const Orthanc::IDynamicObject* GetPayloadPointer() const
124 {
125 return payload_;
126 }
73 }; 127 };
74 128
75 129
130 IWebService(MessageBroker& broker) :
131 broker_(broker)
132 {
133 }
76 134
77 IWebService(MessageBroker& broker) 135
78 : broker_(broker)
79 {}
80
81 virtual ~IWebService() 136 virtual ~IWebService()
82 { 137 {
83 } 138 }
84 139
140
85 virtual void GetAsync(const std::string& uri, 141 virtual void GetAsync(const std::string& uri,
86 const Headers& headers, 142 const Headers& headers,
87 Orthanc::IDynamicObject* payload, 143 Orthanc::IDynamicObject* payload /* takes ownership */,
88 MessageHandler<IWebService::HttpRequestSuccessMessage>* successCallback, 144 MessageHandler<IWebService::HttpRequestSuccessMessage>* successCallback,
89 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback = NULL, 145 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback = NULL,
90 unsigned int timeoutInSeconds = 60) = 0; 146 unsigned int timeoutInSeconds = 60) = 0;
91 147
92 virtual void PostAsync(const std::string& uri, 148 virtual void PostAsync(const std::string& uri,
93 const Headers& headers, 149 const Headers& headers,
94 const std::string& body, 150 const std::string& body,
95 Orthanc::IDynamicObject* payload, 151 Orthanc::IDynamicObject* payload /* takes ownership */,
96 MessageHandler<IWebService::HttpRequestSuccessMessage>* successCallback, 152 MessageHandler<IWebService::HttpRequestSuccessMessage>* successCallback,
97 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback = NULL, 153 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback = NULL,
98 unsigned int timeoutInSeconds = 60) = 0; 154 unsigned int timeoutInSeconds = 60) = 0;
99 155
100 virtual void DeleteAsync(const std::string& uri, 156 virtual void DeleteAsync(const std::string& uri,
101 const Headers& headers, 157 const Headers& headers,
102 Orthanc::IDynamicObject* payload, 158 Orthanc::IDynamicObject* payload /* takes ownership */,
103 MessageHandler<IWebService::HttpRequestSuccessMessage>* successCallback, 159 MessageHandler<IWebService::HttpRequestSuccessMessage>* successCallback,
104 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback = NULL, 160 MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback = NULL,
105 unsigned int timeoutInSeconds = 60) = 0; 161 unsigned int timeoutInSeconds = 60) = 0;
106 }; 162 };
107 } 163 }