1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
#include <IceUtil/IceUtil.h>
#include <Ice/Ice.h>
#include <TestI.h>
using namespace std;
using namespace Ice;
using namespace Test;
namespace
{
string
toString(int value)
{
ostringstream os;
os << value;
return os.str();
}
}
RemoteObjectAdapterPrxPtr
RemoteCommunicatorI::createObjectAdapter(int timeout, int close, int heartbeat, const Current& current)
{
Ice::CommunicatorPtr com = current.adapter->getCommunicator();
Ice::PropertiesPtr properties = com->getProperties();
string protocol = properties->getPropertyWithDefault("Ice.Default.Protocol", "tcp");
string opts;
if(protocol != "bt")
{
opts = " -h \"" + properties->getPropertyWithDefault("Ice.Default.Host", "127.0.0.1") + "\"";
}
string name = generateUUID();
if(timeout >= 0)
{
properties->setProperty(name + ".ACM.Timeout", toString(timeout));
}
if(close >= 0)
{
properties->setProperty(name + ".ACM.Close", toString(close));
}
if(heartbeat >= 0)
{
properties->setProperty(name + ".ACM.Heartbeat", toString(heartbeat));
}
properties->setProperty(name + ".ThreadPool.Size", "2");
ObjectAdapterPtr adapter = com->createObjectAdapterWithEndpoints(name, protocol + opts);
return ICE_UNCHECKED_CAST(RemoteObjectAdapterPrx, current.adapter->addWithUUID(
ICE_MAKE_SHARED(RemoteObjectAdapterI, adapter)));
}
void
RemoteCommunicatorI::shutdown(const Ice::Current& current)
{
current.adapter->getCommunicator()->shutdown();
}
RemoteObjectAdapterI::RemoteObjectAdapterI(const Ice::ObjectAdapterPtr& adapter) :
_adapter(adapter),
_testIntf(ICE_UNCHECKED_CAST(TestIntfPrx, _adapter->add(ICE_MAKE_SHARED(TestI),
stringToIdentity("test"))))
{
_adapter->activate();
}
TestIntfPrxPtr
RemoteObjectAdapterI::getTestIntf(const Ice::Current&)
{
return _testIntf;
}
void
RemoteObjectAdapterI::activate(const Ice::Current&)
{
_adapter->activate();
}
void
RemoteObjectAdapterI::hold(const Ice::Current&)
{
_adapter->hold();
}
void
RemoteObjectAdapterI::deactivate(const Ice::Current&)
{
try
{
_adapter->destroy();
}
catch(const ObjectAdapterDeactivatedException&)
{
}
}
void
TestI::sleep(int delay, const Ice::Current&)
{
Lock sync(*this);
timedWait(IceUtil::Time::seconds(delay));
}
void
TestI::sleepAndHold(int delay, const Ice::Current& current)
{
Lock sync(*this);
current.adapter->hold();
timedWait(IceUtil::Time::seconds(delay));
}
void
TestI::interruptSleep(const Ice::Current&)
{
Lock sync(*this);
notifyAll();
}
void
TestI::startHeartbeatCount(const Ice::Current& current)
{
_callback = ICE_MAKE_SHARED(HeartbeatCallbackI);
#ifdef ICE_CPP11_MAPPING
HeartbeatCallbackIPtr callback = _callback;
current.con->setHeartbeatCallback([callback](Ice::ConnectionPtr connection)
{
callback->heartbeat(std::move(connection));
});
#else
current.con->setHeartbeatCallback(_callback);
#endif
}
void
TestI::waitForHeartbeatCount(int count, const Ice::Current&)
{
assert(_callback);
_callback->waitForCount(count);
}
|