From 9e6b0c1884462d25634e28205b4a117770918e2e Mon Sep 17 00:00:00 2001 From: Krzysztof Jackiewicz Date: Wed, 17 Jun 2015 13:12:39 +0200 Subject: [PATCH] Add support for inter-service communication in SocketManager [Feature] Inter-service communication development. [Solution] Add CommunicationManager basing on existing messages to SocketManager. Set communication manager in services. [Verification] Successfull compilation. Run ckm-tests --output. Change-Id: Ic22b3496f7f40a424cec4794513cec9211a752d1 --- src/manager/main/generic-socket-manager.h | 7 ++++++- src/manager/main/socket-manager.cpp | 15 ++++++++------- src/manager/main/socket-manager.h | 2 ++ src/manager/main/thread-service.h | 3 ++- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/manager/main/generic-socket-manager.h b/src/manager/main/generic-socket-manager.h index 4108c3b..bec21c6 100644 --- a/src/manager/main/generic-socket-manager.h +++ b/src/manager/main/generic-socket-manager.h @@ -36,6 +36,7 @@ #include #include #include +#include extern "C" { struct msghdr; @@ -100,6 +101,9 @@ struct GenericSocketService { virtual void SetSocketManager(GenericSocketManager *manager) { m_serviceManager = manager; } + virtual void SetCommManager(CommMgr *manager) { + m_commMgr = manager; + } virtual ServiceDescriptionVector GetServiceDescription() = 0; virtual void Event(const AcceptEvent &event) = 0; @@ -110,10 +114,11 @@ struct GenericSocketService { virtual void Start() = 0; virtual void Stop() = 0; - GenericSocketService() : m_serviceManager(NULL) {} + GenericSocketService() : m_serviceManager(NULL), m_commMgr(NULL) {} virtual ~GenericSocketService(){} protected: GenericSocketManager *m_serviceManager; + CommMgr *m_commMgr; }; struct GenericSocketManager { diff --git a/src/manager/main/socket-manager.cpp b/src/manager/main/socket-manager.cpp index 4a5e147..44a7d3c 100644 --- a/src/manager/main/socket-manager.cpp +++ b/src/manager/main/socket-manager.cpp @@ -94,10 +94,10 @@ struct DummyService : public GenericSocketService { void Start() {} void Stop() {} - void Event(const AcceptEvent &event) { (void)event; } - void Event(const WriteEvent &event) { (void)event; } - void Event(const ReadEvent &event) { (void)event; } - void Event(const CloseEvent &event) { (void)event; } + void Event(const AcceptEvent &) {} + void Event(const WriteEvent &) {} + void Event(const ReadEvent &) {} + void Event(const CloseEvent &) {} }; struct SignalService : public GenericSocketService { @@ -118,9 +118,9 @@ struct SignalService : public GenericSocketService { void Start() {} void Stop() {} - void Event(const AcceptEvent &event) { (void)event; } // not supported - void Event(const WriteEvent &event) { (void)event; } // not supported - void Event(const CloseEvent &event) { (void)event; } // not supported + void Event(const AcceptEvent &) {} // not supported + void Event(const WriteEvent &) {} // not supported + void Event(const CloseEvent &) {} // not supported void Event(const ReadEvent &event) { LogDebug("Get signal information"); @@ -564,6 +564,7 @@ void SocketManager::CreateDomainSocket( void SocketManager::RegisterSocketService(GenericSocketService *service) { service->SetSocketManager(this); + service->SetCommManager(&m_commMgr); auto serviceVector = service->GetServiceDescription(); Try { for (auto iter = serviceVector.begin(); iter != serviceVector.end(); ++iter) diff --git a/src/manager/main/socket-manager.h b/src/manager/main/socket-manager.h index 978dbee..5dbffdc 100644 --- a/src/manager/main/socket-manager.h +++ b/src/manager/main/socket-manager.h @@ -35,6 +35,7 @@ #include #include +#include namespace CKM { @@ -119,6 +120,7 @@ protected: int m_notifyMe[2]; int m_counter; std::priority_queue m_timeoutQueue; + CommMgr m_commMgr; }; } // namespace CKM diff --git a/src/manager/main/thread-service.h b/src/manager/main/thread-service.h index 2a4cadb..e8f0ac6 100644 --- a/src/manager/main/thread-service.h +++ b/src/manager/main/thread-service.h @@ -43,11 +43,12 @@ public: protected: virtual bool ProcessOne(const ConnectionID &conn, ConnectionInfo &info) = 0; -private: + template void ThreadEvent(const E& event) { CreateEvent([this, event]() { this->Handle(event); }); } +private: void Handle(const AcceptEvent &event); void Handle(const WriteEvent &event); -- 2.7.4