summaryrefslogtreecommitdiff
path: root/cpp/src/Glacier2Lib/SessionHelper.cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2015-12-15 20:09:35 +0100
committerJose <jose@zeroc.com>2015-12-15 20:09:35 +0100
commitf72ebccfa916f610165de8ca48d4ef86b6b2330d (patch)
tree8b58d931f9624a0bb1ebcbae5e1f1b76052e3317 /cpp/src/Glacier2Lib/SessionHelper.cpp
parentC++11 dispatcher test fixes (diff)
downloadice-f72ebccfa916f610165de8ca48d4ef86b6b2330d.tar.bz2
ice-f72ebccfa916f610165de8ca48d4ef86b6b2330d.tar.xz
ice-f72ebccfa916f610165de8ca48d4ef86b6b2330d.zip
C++11 mapping Glacier2Lib updates
Diffstat (limited to 'cpp/src/Glacier2Lib/SessionHelper.cpp')
-rw-r--r--cpp/src/Glacier2Lib/SessionHelper.cpp120
1 files changed, 75 insertions, 45 deletions
diff --git a/cpp/src/Glacier2Lib/SessionHelper.cpp b/cpp/src/Glacier2Lib/SessionHelper.cpp
index 1f4f4781de7..7563520329b 100644
--- a/cpp/src/Glacier2Lib/SessionHelper.cpp
+++ b/cpp/src/Glacier2Lib/SessionHelper.cpp
@@ -20,7 +20,7 @@ using namespace std;
namespace Glacier2
{
-class SessionThreadCallback : public IceUtil::Shared
+class SessionThreadCallback : public ICE_ENABLE_SHARED_FROM_THIS(SessionThreadCallback)
{
public:
@@ -38,21 +38,24 @@ private:
const Glacier2::SessionFactoryHelperPtr _factory;
};
-typedef IceUtil::Handle<SessionThreadCallback> SessionThreadCallbackPtr;
+ICE_DEFINE_PTR(SessionThreadCallbackPtr, SessionThreadCallback);
};
namespace
{
-class ConnectStrategy : public Ice::LocalObject
+class ConnectStrategy
+#ifndef ICE_CPP11_MAPPING
+ : public Ice::LocalObject
+#endif
{
public:
- virtual Glacier2::SessionPrx connect(const Glacier2::RouterPrx& router) = 0;
+ virtual Glacier2::SessionPrxPtr connect(const Glacier2::RouterPrxPtr& router) = 0;
};
-typedef IceUtil::Handle< ConnectStrategy> ConnectStrategyPtr;
+ICE_DEFINE_PTR(ConnectStrategyPtr, ConnectStrategy);
class Disconnected : public Ice::DispatcherCall
{
@@ -80,6 +83,9 @@ private:
};
class SessionHelperI : public Glacier2::SessionHelper
+#ifdef ICE_CPP11_MAPPING
+ , public enable_shared_from_this<SessionHelperI>
+#endif
{
public:
@@ -89,8 +95,8 @@ public:
void destroy();
Ice::CommunicatorPtr communicator() const;
std::string categoryForClient() const;
- Ice::ObjectPrx addWithUUID(const Ice::ObjectPtr&);
- Glacier2::SessionPrx session() const;
+ Ice::ObjectPrxPtr addWithUUID(const Ice::ObjectPtr&);
+ Glacier2::SessionPrxPtr session() const;
bool isConnected() const;
Ice::ObjectAdapterPtr objectAdapter();
@@ -103,7 +109,7 @@ public:
private:
Ice::ObjectAdapterPtr internalObjectAdapter();
- void connected(const Glacier2::RouterPrx&, const Glacier2::SessionPrx&);
+ void connected(const Glacier2::RouterPrxPtr&, const Glacier2::SessionPrxPtr&);
void destroyInternal(const Ice::DispatcherCallPtr&);
void destroyCommunicator();
void connectFailed();
@@ -118,8 +124,8 @@ private:
IceUtil::Mutex _mutex;
Ice::CommunicatorPtr _communicator;
Ice::ObjectAdapterPtr _adapter;
- Glacier2::RouterPrx _router;
- Glacier2::SessionPrx _session;
+ Glacier2::RouterPrxPtr _router;
+ Glacier2::SessionPrxPtr _session;
std::string _category;
bool _connected;
bool _destroy;
@@ -129,7 +135,7 @@ private:
const string _finder;
const bool _useCallbacks;
};
-typedef IceUtil::Handle<SessionHelperI> SessionHelperIPtr;
+ICE_DEFINE_PTR(SessionHelperIPtr, SessionHelperI);
class DestroyInternal : public IceUtil::Thread
{
@@ -221,17 +227,17 @@ SessionHelperI::destroy()
// We destroy the communicator to trigger the immediate
// failure of the connection establishment.
//
- IceUtil::ThreadPtr destroyCommunicator = new DestroyCommunicator(this);
- _threadCB = 0;
+ IceUtil::ThreadPtr destroyCommunicator = new DestroyCommunicator(ICE_SHARED_FROM_THIS);
+ _threadCB = ICE_NULLPTR;
destroyCommunicator->start();
return;
}
- IceUtil::ThreadPtr destroyInternal = new DestroyInternal(this, _threadCB, _callback);
+ IceUtil::ThreadPtr destroyInternal = new DestroyInternal(ICE_SHARED_FROM_THIS, _threadCB, _callback);
- _session = 0;
+ _session = ICE_NULLPTR;
_connected = false;
- _threadCB = 0;
+ _threadCB = ICE_NULLPTR;
//
// Run destroyInternal in a thread because it makes remote invocations.
@@ -257,7 +263,7 @@ SessionHelperI::categoryForClient() const
return _category;
}
-Ice::ObjectPrx
+Ice::ObjectPrxPtr
SessionHelperI::addWithUUID(const Ice::ObjectPtr& servant)
{
IceUtil::Mutex::Lock sync(_mutex);
@@ -271,7 +277,7 @@ SessionHelperI::addWithUUID(const Ice::ObjectPtr& servant)
return internalObjectAdapter()->add(servant, id);
}
-Glacier2::SessionPrx
+Glacier2::SessionPrxPtr
SessionHelperI::session() const
{
IceUtil::Mutex::Lock sync(_mutex);
@@ -336,8 +342,8 @@ public:
{
}
- virtual Glacier2::SessionPrx
- connect(const Glacier2::RouterPrx& router)
+ virtual Glacier2::SessionPrxPtr
+ connect(const Glacier2::RouterPrxPtr& router)
{
return router->createSessionFromSecureConnection(_context);
}
@@ -359,8 +365,8 @@ public:
{
}
- virtual Glacier2::SessionPrx
- connect(const Glacier2::RouterPrx& router)
+ virtual Glacier2::SessionPrxPtr
+ connect(const Glacier2::RouterPrxPtr& router)
{
return router->createSession(_user, _password, _context);
}
@@ -378,14 +384,14 @@ void
SessionHelperI::connect(const map<string, string>& context)
{
IceUtil::Mutex::Lock sync(_mutex);
- connectImpl(new ConnectStrategySecureConnection(context));
+ connectImpl(ICE_MAKE_SHARED(ConnectStrategySecureConnection, context));
}
void
SessionHelperI::connect(const string& user, const string& password, const map<string, string>& context)
{
IceUtil::Mutex::Lock sync(_mutex);
- connectImpl(new ConnectStrategyUserPassword(user, password, context));
+ connectImpl(ICE_MAKE_SHARED(ConnectStrategyUserPassword, user, password, context));
}
void
@@ -393,11 +399,11 @@ SessionHelperI::destroyInternal(const Ice::DispatcherCallPtr& disconnected)
{
assert(_destroy);
Ice::CommunicatorPtr communicator;
- Glacier2::RouterPrx router;
+ Glacier2::RouterPrxPtr router;
{
IceUtil::Mutex::Lock sync(_mutex);
router = _router;
- _router = 0;
+ _router = ICE_NULLPTR;
_connected = false;
communicator = _communicator;
@@ -443,9 +449,9 @@ SessionHelperI::destroyInternal(const Ice::DispatcherCallPtr& disconnected)
catch(...)
{
}
- communicator = 0;
+ communicator = ICE_NULLPTR;
}
- dispatchCallback(disconnected, 0);
+ dispatchCallback(disconnected, ICE_NULLPTR);
}
void
@@ -466,7 +472,7 @@ SessionHelperI::destroyCommunicator()
catch(...)
{
}
- communicator = 0;
+ communicator = ICE_NULLPTR;
}
}
@@ -567,8 +573,8 @@ public:
{
if(!_communicator->getDefaultRouter())
{
- Ice::RouterFinderPrx finder =
- Ice::RouterFinderPrx::uncheckedCast(_communicator->stringToProxy(_finder));
+ Ice::RouterFinderPrxPtr finder =
+ ICE_UNCHECKED_CAST(Ice::RouterFinderPrx, _communicator->stringToProxy(_finder));
try
{
_communicator->setDefaultRouter(finder->getRouter());
@@ -587,12 +593,12 @@ public:
Ice::Identity ident;
ident.category = "Glacier2";
ident.name = "router";
- _communicator->setDefaultRouter(Ice::RouterPrx::uncheckedCast(finder->ice_identity(ident)));
+ _communicator->setDefaultRouter(ICE_UNCHECKED_CAST(Ice::RouterPrx, finder->ice_identity(ident)));
}
}
_session->dispatchCallbackAndWait(new CreatedCommunicator(_callback, _session), 0);
- Glacier2::RouterPrx routerPrx = Glacier2::RouterPrx::uncheckedCast(_communicator->getDefaultRouter());
- Glacier2::SessionPrx session = _factory->connect(routerPrx);
+ Glacier2::RouterPrxPtr routerPrx = ICE_UNCHECKED_CAST(Glacier2::RouterPrx, _communicator->getDefaultRouter());
+ Glacier2::SessionPrxPtr session = _factory->connect(routerPrx);
_session->connected(routerPrx, session);
}
catch(const Ice::Exception& ex)
@@ -636,7 +642,7 @@ public:
virtual void run()
{
_session->dispatchCallback(_call, _conn);
- _session = 0;
+ _session = ICE_NULLPTR;
}
private:
@@ -660,13 +666,13 @@ SessionHelperI::connectImpl(const ConnectStrategyPtr& factory)
catch(const Ice::LocalException& ex)
{
_destroy = true;
- IceUtil::ThreadPtr thread = new DispatchCallThread(this, new ConnectFailed(_callback, this, ex), 0);
+ IceUtil::ThreadPtr thread = new DispatchCallThread(ICE_SHARED_FROM_THIS, new ConnectFailed(_callback, ICE_SHARED_FROM_THIS, ex), 0);
_threadCB->add(this, thread);
thread->start();
return;
}
- IceUtil::ThreadPtr thread = new ConnectThread(_callback, this, factory, _communicator, _finder);
+ IceUtil::ThreadPtr thread = new ConnectThread(_callback, ICE_SHARED_FROM_THIS, factory, _communicator, _finder);
_threadCB->add(this, thread);
thread->start();
}
@@ -731,7 +737,7 @@ private:
}
void
-SessionHelperI::connected(const Glacier2::RouterPrx& router, const Glacier2::SessionPrx& session)
+SessionHelperI::connected(const Glacier2::RouterPrxPtr& router, const Glacier2::SessionPrxPtr& session)
{
//
// Remote invocation should be done without acquiring a mutex lock.
@@ -789,7 +795,7 @@ SessionHelperI::connected(const Glacier2::RouterPrx& router, const Glacier2::Ses
Ice::ConnectionPtr connection = _router->ice_getCachedConnection();
assert(connection);
connection->setACM(acmTimeout, IceUtil::None, Ice::HeartbeatAlways);
- connection->setCallback(new ConnectionCallbackI(this));
+ connection->setCallback(ICE_MAKE_SHARED(ConnectionCallbackI, ICE_SHARED_FROM_THIS));
}
}
}
@@ -800,11 +806,11 @@ SessionHelperI::connected(const Glacier2::RouterPrx& router, const Glacier2::Ses
// connected() is only called from the ConnectThread so it is ok to
// call destroyInternal here.
//
- destroyInternal(new Disconnected(this, _callback));
+ destroyInternal(new Disconnected(ICE_SHARED_FROM_THIS, _callback));
}
else
{
- dispatchCallback(new Connected(_callback, this), conn);
+ dispatchCallback(new Connected(_callback, ICE_SHARED_FROM_THIS), conn);
}
}
@@ -813,7 +819,15 @@ SessionHelperI::dispatchCallback(const Ice::DispatcherCallPtr& call, const Ice::
{
if(_initData.dispatcher)
{
+#ifdef ICE_CPP11_MAPPING
+ _initData.dispatcher([call]()
+ {
+ call->run();
+ },
+ conn);
+#else
_initData.dispatcher->dispatch(call, conn);
+#endif
}
else
{
@@ -857,7 +871,15 @@ SessionHelperI::dispatchCallbackAndWait(const Ice::DispatcherCallPtr& call, cons
{
IceUtilInternal::CountDownLatch cdl(1);
Ice::DispatcherCallPtr callWait = new DispatcherCallWait(cdl, call);
+#ifdef ICE_CPP11_MAPPING
+ _initData.dispatcher([call]()
+ {
+ call->run();
+ },
+ conn);
+#else
_initData.dispatcher->dispatch(callWait, conn);
+#endif
cdl.await();
}
else
@@ -1096,8 +1118,12 @@ Glacier2::SessionFactoryHelper::connect()
map<string, string> context;
{
IceUtil::Mutex::Lock sync(_mutex);
- session = new SessionHelperI(new SessionThreadCallback(this), _callback, createInitData(),
- getRouterFinderStr(), _useCallbacks);
+ session = ICE_MAKE_SHARED(SessionHelperI,
+ ICE_MAKE_SHARED(SessionThreadCallback, ICE_SHARED_FROM_THIS),
+ _callback,
+ createInitData(),
+ getRouterFinderStr(),
+ _useCallbacks);
context = _context;
}
session->connect(context);
@@ -1111,8 +1137,12 @@ Glacier2::SessionFactoryHelper::connect(const string& user, const string& passw
map<string, string> context;
{
IceUtil::Mutex::Lock sync(_mutex);
- session = new SessionHelperI(new SessionThreadCallback(this), _callback, createInitData(),
- getRouterFinderStr(), _useCallbacks);
+ session = ICE_MAKE_SHARED(SessionHelperI,
+ ICE_MAKE_SHARED(SessionThreadCallback, ICE_SHARED_FROM_THIS),
+ _callback,
+ createInitData(),
+ getRouterFinderStr(),
+ _useCallbacks);
context = _context;
}
session->connect(user, password, _context);