Mercurial > hg > orthanc-stone
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 } |