26 const web::uri &uri,
const RequestType &type,
const std::map<utility::string_t, utility::string_t> headers)
28 pplx::task<web::json::value> answer;
34 answer = client->Get(uri, headers);
38 mitkThrow() <<
"Request Type not supported";
47 const std::vector<unsigned char> *content,
48 const std::map<utility::string_t, utility::string_t> headers)
50 pplx::task<web::json::value> answer;
56 if (
nullptr == content)
57 MITK_WARN <<
"Content for post is empty, this will create an empty resource";
59 answer = client->Post(uri, content, headers);
63 mitkThrow() <<
"Request Type not supported for binary data";
72 const web::json::value *content,
73 const std::map<utility::string_t, utility::string_t> headers,
74 const utility::string_t &filePath)
76 pplx::task<web::json::value> answer;
82 answer = !filePath.empty() ? client->Get(uri, filePath, headers) : client->Get(uri, headers);
86 if (
nullptr == content)
87 MITK_WARN <<
"Content for post is empty, this will create an empty resource";
89 answer = client->Post(uri, content, headers);
94 if (
nullptr == content)
95 MITK_WARN <<
"Content for put is empty, this will empty the ressource";
97 answer = client->Put(uri, content);
101 mitkThrow() <<
"Request Type not supported";
110 auto port = uri.port();
113 if (0 == m_ServerMap.count(port))
115 this->AddObserver(uri, observer);
117 auto server =
new RESTServer(uri.authority());
119 m_ServerMap[port] = server;
121 server->OpenListener();
126 this->RequestForATakenPort(uri, observer);
131 const web::json::value &body,
132 const web::http::method &method,
136 auto key = std::make_pair(uri.port(), uri.path());
137 if (0 != m_Observers.count(key))
139 return m_Observers[key]->Notify(uri, body, method, headers);
144 MITK_WARN <<
"No Observer can handle the data";
146 response.set_body(U(
"No one can handle the request under the given port."));
153 for (
auto it = m_Observers.begin(); it != m_Observers.end();)
157 if (observer == obsMap)
160 if (uri.is_empty() || uri.path() == it->first.second)
162 int port = it->first.first;
163 bool noObserverForPort = this->DeleteObserver(it);
164 if (noObserverForPort)
168 m_ServerMap[port]->CloseListener();
169 delete m_ServerMap[port];
171 m_ServerMap.erase(port);
196 void mitk::RESTManager::AddObserver(
const web::uri &uri,
IRESTObserver *observer)
199 std::pair<int, utility::string_t> key(uri.port(), uri.path());
200 m_Observers[key] = observer;
203 void mitk::RESTManager::RequestForATakenPort(
const web::uri &uri,
IRESTObserver *observer)
206 if (uri.authority() == m_ServerMap[uri.port()]->GetUri())
209 std::pair<int, utility::string_t> key(uri.port(), uri.path());
211 if (0 == m_Observers.count(key))
213 this->AddObserver(uri, observer);
217 MITK_ERROR <<
"Threre is already a observer handeling this data";
223 MITK_ERROR <<
"There is already another server listening under this port";
227 bool mitk::RESTManager::DeleteObserver(
std::map<std::pair<int, utility::string_t>,
IRESTObserver *>::iterator &it)
229 int port = it->first.first;
231 it = m_Observers.erase(it);
233 for (
auto observer : m_Observers)
235 if (port == observer.first.first)
245 void mitk::RESTManager::SetServerMap(
const int port,
RESTServer *server)
247 m_ServerMap[port] = server;
250 void mitk::RESTManager::DeleteFromServerMap(
const int port)
252 m_ServerMap.erase(port);
255 void mitk::RESTManager::SetObservers(
const std::pair<int, utility::string_t> key,
IRESTObserver *observer)
257 m_Observers[key] = observer;
pplx::task< web::json::value > SendJSONRequest(const web::uri &uri, const RequestType &type=RequestType::Get, const web::json::value *body=nullptr, const std::map< utility::string_t, utility::string_t > headers={}, const utility::string_t &filePath={}) override
Executes a HTTP request in the mitkRESTClient class.
pplx::task< web::json::value > SendBinaryRequest(const web::uri &uri, const RequestType &type=RequestType::Get, const std::vector< unsigned char > *={}, const std::map< utility::string_t, utility::string_t > headers={}) override
Executes a HTTP request in the mitkRESTClient class.
pplx::task< web::json::value > SendRequest(const web::uri &uri, const RequestType &type=RequestType::Get, const std::map< utility::string_t, utility::string_t > headers={}) override
Executes a HTTP request in the mitkRESTClient class.
const std::map< int, RESTServer * > & GetServerMap() override
internal use only
web::http::http_response Handle(const web::uri &uri, const web::json::value &body, const web::http::method &method, const mitk::RESTUtil::ParamMap &headers) override
Handles incoming requests by notifying the observer which should receive it.
RequestType
request type for client requests by calling SendRequest
web::http::http_response http_response
MITKMATCHPOINTREGISTRATION_EXPORT ResultImageType::Pointer map(const InputImageType *input, const RegistrationType *registration, bool throwOnOutOfInputAreaError=false, const double &paddingValue=0, const ResultImageGeometryType *resultGeometry=nullptr, bool throwOnMappingError=true, const double &errorValue=0, mitk::ImageMappingInterpolator::Type interpolatorType=mitk::ImageMappingInterpolator::Linear)
std::map< utility::string_t, utility::string_t > ParamMap
void HandleDeleteObserver(IRESTObserver *observer, const web::uri &uri={}) override
Handles the deletion of an observer for all or a specific uri.
void ReceiveRequest(const web::uri &uri, IRESTObserver *observer) override
starts listening for requests if there isn't another observer listening and the port is free ...
std::map< std::pair< int, utility::string_t >, IRESTObserver * > & GetObservers() override