diff options
author | Jose <jose@zeroc.com> | 2015-12-15 20:09:35 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2015-12-15 20:09:35 +0100 |
commit | f72ebccfa916f610165de8ca48d4ef86b6b2330d (patch) | |
tree | 8b58d931f9624a0bb1ebcbae5e1f1b76052e3317 /cpp/src/Glacier2Lib/SessionHelper.cpp | |
parent | C++11 dispatcher test fixes (diff) | |
download | ice-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.cpp | 120 |
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); |