summaryrefslogtreecommitdiff
path: root/icetray/dryice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'icetray/dryice.cpp')
-rw-r--r--icetray/dryice.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/icetray/dryice.cpp b/icetray/dryice.cpp
new file mode 100644
index 0000000..50f85cb
--- /dev/null
+++ b/icetray/dryice.cpp
@@ -0,0 +1,49 @@
+#include "dryice.h"
+#include <boost/assert.hpp>
+#include <dlfcn.h>
+#include <factory.h>
+#include <Ice/Initialize.h>
+
+namespace IceTray {
+ typedef IceBox::Service *(* SetupFunction)(Ice::CommunicatorPtr);
+
+ DryIce::DryIce(const Ice::StringSeq & cmdline)
+ {
+ void * i = dlsym(NULL, "createIceTrayService");
+ BOOST_VERIFY(i);
+ auto sf = (SetupFunction)i;
+ BOOST_VERIFY(sf);
+ Ice::StringSeq args;
+ Ice::InitializationData id;
+ id.properties = Ice::createProperties();
+ id.properties->setProperty("DryIce.Endpoints", "tcp -p 9002");
+ id.properties->setProperty("DryIce.PoolProvider", "MockPool");
+ id.properties->parseCommandLineOptions("", cmdline);
+ ic = Ice::initialize(args, id);
+ s = sf(nullptr);
+ s->start("DryIce", ic, {});
+ }
+
+ DryIce::~DryIce()
+ {
+ if (s) {
+ s->stop();
+ s = NULL;
+ }
+ if (ic) {
+ ic->destroy();
+ ic = NULL;
+ }
+ }
+
+ DryIceClient::DryIceClient()
+ {
+ ic = Ice::initialize();
+ }
+
+ DryIceClient::~DryIceClient()
+ {
+ ic->destroy();
+ }
+}
+