diff --git a/Modules/CppRestSdk/include/mitkIRESTManager.h b/Modules/CppRestSdk/include/mitkIRESTManager.h index 288ee47c12..c1eb34d68b 100644 --- a/Modules/CppRestSdk/include/mitkIRESTManager.h +++ b/Modules/CppRestSdk/include/mitkIRESTManager.h @@ -1,31 +1,29 @@ #ifndef mitkIRESTManager_h #define mitkIRESTManager_h +#include "cpprest/uri.h" #include #include -#include "cpprest/uri.h" +#include namespace mitk { class IRESTManager { public: virtual ~IRESTManager(); enum RequestType { get, post, put }; virtual void sendRequest(RequestType type) = 0; - virtual void receiveRequest(web::uri uri) = 0; - - - + virtual void receiveRequest(web::uri uri, IRESTObserver *observer) = 0; }; } // namespace mitk MITK_DECLARE_SERVICE_INTERFACE(mitk::IRESTManager, "org.mitk.IRESTManager") #endif diff --git a/Modules/CppRestSdk/include/mitkRESTManager.h b/Modules/CppRestSdk/include/mitkRESTManager.h index 02b0ec317e..9964edbd4b 100644 --- a/Modules/CppRestSdk/include/mitkRESTManager.h +++ b/Modules/CppRestSdk/include/mitkRESTManager.h @@ -1,26 +1,28 @@ #ifndef mitkRESTManager_h #define mitkRESTManager_h #include #include #include +#include namespace mitk { class RESTManager : public IRESTManager { public: RESTManager(); ~RESTManager() override; //calls RESTClient void sendRequest(RequestType type) override; //calls RESTServer - void receiveRequest(web::uri uri) override; + void receiveRequest(web::uri uri, IRESTObserver *observer) override; private: std::map m_ClientMap; // Map with port client pairs std::map m_ServerMap; // Map with port server pairs + std::map m_Observer; //Map with all observers }; } // namespace mitk #endif // !mitkRESTManager_h diff --git a/Modules/CppRestSdk/src/mitkRESTManager.cpp b/Modules/CppRestSdk/src/mitkRESTManager.cpp index 10d74f3d42..9f038b7c16 100644 --- a/Modules/CppRestSdk/src/mitkRESTManager.cpp +++ b/Modules/CppRestSdk/src/mitkRESTManager.cpp @@ -1,50 +1,69 @@ #include "mitkRESTManager.h" #include mitk::RESTManager::RESTManager() {} mitk::RESTManager::~RESTManager() {} void mitk::RESTManager::sendRequest(RequestType type) { switch (type) { case get: //Call get in mitkRESTClientMicroService break; case post: //Call post in mitkRESTClientMicroService break; case put: //Call put in mitkRESTClientMicroService break; } } -void mitk::RESTManager::receiveRequest(web::uri uri) +void mitk::RESTManager::receiveRequest(web::uri uri, mitk::IRESTObserver *observer) { //New instance of RESTServerMicroservice in m_ServerMap, key is port of the request int port = uri.port(); if (m_ServerMap.count(port) == 0) { //new observer has to be added + m_Observer[uri] = observer; + + //testing if entry has been added to map + utility::string_t uristringt = uri.to_string(); + std::string uristring(uristringt.begin(), uristringt.end()); + MITK_INFO << uristring << " : Number of elements in map: " << m_Observer.count(uri); + + //creating server instance RESTServerMicroService *server = new RESTServerMicroService(uri.authority()); + //add reference to server instance to map m_ServerMap[port] = server; + + //info output utility::string_t host = uri.authority().to_string(); std::string hoststring(host.begin(), host.end()); MITK_INFO << "new server" << hoststring<<" at port" << port; } else { if (m_ServerMap[port]->GetUri() == uri.authority()) { //new observer has to be added - MITK_INFO << "started listening"; + m_Observer[uri] = observer; + + // testing if entry has been added to map + utility::string_t uristringt = uri.to_string(); + std::string uristring(uristringt.begin(), uristringt.end()); + MITK_INFO << uristring << " : Number of elements in map: " << m_Observer.count(uri); + + //info output + MITK_INFO << "started listening, no new server instance has been created"; } else { MITK_ERROR << "there is already another server listening under this port"; } } } diff --git a/Modules/CppRestSdk/src/mitkRESTTest.cpp b/Modules/CppRestSdk/src/mitkRESTTest.cpp index b975b2fde2..c74c73bd4e 100644 --- a/Modules/CppRestSdk/src/mitkRESTTest.cpp +++ b/Modules/CppRestSdk/src/mitkRESTTest.cpp @@ -1,29 +1,29 @@ #include "mitkRESTTest.h" #include #include #include mitk::RestTest::RestTest() {} mitk::RestTest::~RestTest() {} void mitk::RestTest::TestRESTServer() { us::ModuleContext *context = us::GetModuleContext(); auto managerRef = context->GetServiceReference(); if (managerRef) { auto managerService = context->GetService(managerRef); if (managerService) { - managerService->receiveRequest(L"http://localhost:8080/test"); - managerService->receiveRequest(L"http://localhost:8080/example"); - managerService->receiveRequest(L"http://localhost:8090"); + managerService->receiveRequest(L"http://localhost:8080/test", this); + managerService->receiveRequest(L"http://localhost:8080/example", this); + managerService->receiveRequest(L"http://localhost:8090", this); } } } bool mitk::RestTest::notify() { return true; }