diff options
-rw-r--r-- | icetray/icetray/icetrayService.cpp | 22 | ||||
-rw-r--r-- | icetray/icetray/icetrayService.h | 7 |
2 files changed, 29 insertions, 0 deletions
diff --git a/icetray/icetray/icetrayService.cpp b/icetray/icetray/icetrayService.cpp index aff6a8a..7f66cd1 100644 --- a/icetray/icetray/icetrayService.cpp +++ b/icetray/icetray/icetrayService.cpp @@ -2,8 +2,30 @@ #include <visibility.h> #include <factory.impl.h> #include "icetrayService.h" +#include <boost/assert.hpp> namespace IceTray { + Service * Service::current = nullptr; + + Service::Service() + { + BOOST_ASSERT(!current); + current = this; + } + + Service::~Service() + { + BOOST_ASSERT(current); + current = nullptr; + } + + Service * + Service::getCurrent() + { + BOOST_ASSERT(current); + return current; + } + void Service::start(const std::string & name, const Ice::CommunicatorPtr & ic, const Ice::StringSeq & args) { adp = ic->createObjectAdapter(name); diff --git a/icetray/icetray/icetrayService.h b/icetray/icetray/icetrayService.h index c59028a..69ab487 100644 --- a/icetray/icetray/icetrayService.h +++ b/icetray/icetray/icetrayService.h @@ -9,6 +9,9 @@ namespace IceTray { class DLL_PUBLIC Service : public IceBox::Service, public AdHoc::AbstractPluginImplementation { public: + Service(); + virtual ~Service(); + virtual void addObjects(const std::string & name, const Ice::CommunicatorPtr & ic, const Ice::StringSeq &, const Ice::ObjectAdapterPtr &) = 0; void start(const std::string & name, const Ice::CommunicatorPtr & ic, const Ice::StringSeq & args) override; @@ -17,7 +20,11 @@ namespace IceTray { DatabasePoolPtr getConnectionPool(const Ice::CommunicatorPtr & ic, const std::string & type, const std::string & prefix); + static Service * getCurrent(); Ice::ObjectAdapterPtr adp; + + private: + static Service * current; }; typedef IceInternal::Handle<Service> ServicePtr; |