summaryrefslogtreecommitdiff
path: root/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
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')
-rw-r--r--cpp/include/Glacier2/Application.h12
-rw-r--r--cpp/include/Glacier2/SessionHelper.h12
-rw-r--r--cpp/src/Glacier2Lib/Application.cpp10
-rw-r--r--cpp/src/Glacier2Lib/NullPermissionsVerifier.cpp17
-rw-r--r--cpp/src/Glacier2Lib/SessionHelper.cpp120
5 files changed, 105 insertions, 66 deletions
diff --git a/cpp/include/Glacier2/Application.h b/cpp/include/Glacier2/Application.h
index 4fa07d9cef1..543cdd833e4 100644
--- a/cpp/include/Glacier2/Application.h
+++ b/cpp/include/Glacier2/Application.h
@@ -118,7 +118,7 @@ public:
* @return The Glacier2 session.
**/
- virtual Glacier2::SessionPrx createSession() = 0;
+ virtual Glacier2::SessionPrxPtr createSession() = 0;
/**
* Called to restart the application's Glacier2 session. This
@@ -148,7 +148,7 @@ public:
* Returns the Glacier2 router proxy
* @return The router proxy.
**/
- static Glacier2::RouterPrx router()
+ static Glacier2::RouterPrxPtr router()
{
return _router;
}
@@ -157,7 +157,7 @@ public:
* Returns the Glacier2 session proxy
* @return The session proxy.
**/
- static Glacier2::SessionPrx session()
+ static Glacier2::SessionPrxPtr session()
{
return _session;
}
@@ -183,7 +183,7 @@ public:
* @param servant The servant to add.
* @return The proxy for the servant.
**/
- Ice::ObjectPrx addWithUUID(const Ice::ObjectPtr& servant);
+ Ice::ObjectPrxPtr addWithUUID(const Ice::ObjectPtr& servant);
/**
* Creates an object adapter for callback objects.
@@ -211,8 +211,8 @@ private:
}
static Ice::ObjectAdapterPtr _adapter;
- static Glacier2::RouterPrx _router;
- static Glacier2::SessionPrx _session;
+ static Glacier2::RouterPrxPtr _router;
+ static Glacier2::SessionPrxPtr _session;
static bool _createdSession;
static std::string _category;
};
diff --git a/cpp/include/Glacier2/SessionHelper.h b/cpp/include/Glacier2/SessionHelper.h
index 10ee3fbe633..b18f04ccf69 100644
--- a/cpp/include/Glacier2/SessionHelper.h
+++ b/cpp/include/Glacier2/SessionHelper.h
@@ -41,15 +41,15 @@ public:
virtual void destroy() = 0;
virtual Ice::CommunicatorPtr communicator() const = 0;
virtual std::string categoryForClient() const = 0;
- virtual Ice::ObjectPrx addWithUUID(const Ice::ObjectPtr&) = 0;
- virtual Glacier2::SessionPrx session() const = 0;
+ virtual Ice::ObjectPrxPtr addWithUUID(const Ice::ObjectPtr&) = 0;
+ virtual Glacier2::SessionPrxPtr session() const = 0;
virtual bool isConnected() const = 0;
virtual Ice::ObjectAdapterPtr objectAdapter() = 0;
bool operator==(const Glacier2::SessionHelper&) const;
bool operator!=(const Glacier2::SessionHelper&) const;
};
-typedef IceUtil::Handle<SessionHelper> SessionHelperPtr;
+ICE_DEFINE_PTR(SessionHelperPtr, SessionHelper);
class GLACIER2_API SessionCallback : virtual public IceUtil::Shared
{
@@ -61,11 +61,11 @@ public:
virtual void disconnected(const SessionHelperPtr&) = 0;
virtual void connectFailed(const SessionHelperPtr&, const Ice::Exception&) = 0;
};
-typedef IceUtil::Handle<SessionCallback> SessionCallbackPtr;
+ICE_DEFINE_PTR(SessionCallbackPtr, SessionCallback);
class SessionThreadCallback;
-class GLACIER2_API SessionFactoryHelper : public IceUtil::Shared
+class GLACIER2_API SessionFactoryHelper : public ICE_ENABLE_SHARED_FROM_THIS(SessionFactoryHelper)
{
friend class SessionThreadCallback; // To access thread functions
@@ -131,7 +131,7 @@ private:
bool _useCallbacks;
std::map<const SessionHelper*, IceUtil::ThreadPtr> _threads;
};
-typedef IceUtil::Handle<SessionFactoryHelper> SessionFactoryHelperPtr;
+ICE_DEFINE_PTR(SessionFactoryHelperPtr, SessionFactoryHelper);
}
diff --git a/cpp/src/Glacier2Lib/Application.cpp b/cpp/src/Glacier2Lib/Application.cpp
index 2d6d28e4474..729f90aa21f 100644
--- a/cpp/src/Glacier2Lib/Application.cpp
+++ b/cpp/src/Glacier2Lib/Application.cpp
@@ -15,8 +15,8 @@ using namespace std;
using namespace Ice;
Ice::ObjectAdapterPtr Glacier2::Application::_adapter;
-Glacier2::RouterPrx Glacier2::Application::_router;
-Glacier2::SessionPrx Glacier2::Application::_session;
+Glacier2::RouterPrxPtr Glacier2::Application::_router;
+Glacier2::SessionPrxPtr Glacier2::Application::_session;
bool Glacier2::Application::_createdSession = false;
string Glacier2::Application::_category;
@@ -85,7 +85,7 @@ Glacier2::Application::objectAdapter()
return _adapter;
}
-Ice::ObjectPrx
+Ice::ObjectPrxPtr
Glacier2::Application::addWithUUID(const Ice::ObjectPtr& servant)
{
return objectAdapter()->add(servant, createCallbackIdentity(IceUtil::generateUUID()));
@@ -153,7 +153,7 @@ Glacier2::Application::doMain(Ice::StringSeq& args, const Ice::InitializationDat
try
{
IceInternal::Application::_communicator = Ice::initialize(args, initData);
- _router = Glacier2::RouterPrx::uncheckedCast(communicator()->getDefaultRouter());
+ _router = ICE_UNCHECKED_CAST(Glacier2::RouterPrx, communicator()->getDefaultRouter());
if(!_router)
{
@@ -204,7 +204,7 @@ Glacier2::Application::doMain(Ice::StringSeq& args, const Ice::InitializationDat
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, this));
}
_category = _router->getCategoryForClient();
diff --git a/cpp/src/Glacier2Lib/NullPermissionsVerifier.cpp b/cpp/src/Glacier2Lib/NullPermissionsVerifier.cpp
index e538bf2403d..25e85ccd4bc 100644
--- a/cpp/src/Glacier2Lib/NullPermissionsVerifier.cpp
+++ b/cpp/src/Glacier2Lib/NullPermissionsVerifier.cpp
@@ -21,7 +21,11 @@ class NullPermissionsVerifier : public Glacier2::PermissionsVerifier
{
public:
+#ifdef ICE_CPP11_MAPPING
+ bool checkPermissions(string, string, string&, const Current&) const
+#else
bool checkPermissions(const string&, const string&, string&, const Current&) const
+#endif
{
return true;
}
@@ -31,8 +35,13 @@ class NullSSLPermissionsVerifier : public Glacier2::SSLPermissionsVerifier
{
public:
+#ifdef ICE_CPP11_MAPPING
virtual bool
- authorize(const Glacier2::SSLInfo&, std::string&, const Ice::Current&) const
+ authorize(Glacier2::SSLInfo, string&, const Ice::Current&) const
+#else
+ virtual bool
+ authorize(const Glacier2::SSLInfo&, string&, const Ice::Current&) const
+#endif
{
return true;
}
@@ -91,7 +100,7 @@ Init::checkPermissionVerifier(const string& val)
// Check if it's in proxy format
try
{
- ObjectPrx prx = _communicator->stringToProxy(val);
+ ObjectPrxPtr prx = _communicator->stringToProxy(val);
if(prx->ice_getIdentity() == _nullPVId || prx->ice_getIdentity() == _nullSSLPVId)
{
createObjects();
@@ -124,8 +133,8 @@ Init::createObjects()
if(!_adapter)
{
_adapter = _communicator->createObjectAdapter(""); // colloc-only adapter
- _adapter->add(new NullPermissionsVerifier, _nullPVId);
- _adapter->add(new NullSSLPermissionsVerifier, _nullSSLPVId);
+ _adapter->add(ICE_MAKE_SHARED(NullPermissionsVerifier), _nullPVId);
+ _adapter->add(ICE_MAKE_SHARED(NullSSLPermissionsVerifier), _nullSSLPVId);
_adapter->activate();
}
}
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);