summaryrefslogtreecommitdiff
path: root/cpp/src/Glacier2Lib/SessionHelper.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2014-05-23 11:59:44 +0200
committerBenoit Foucher <benoit@zeroc.com>2014-05-23 11:59:44 +0200
commitd81701ca8182942b7936f9fd84a019b695e9c890 (patch)
treedc036c9d701fbbe1afad67782bd78572c0f61974 /cpp/src/Glacier2Lib/SessionHelper.cpp
parentFixed bug ICE-5543: stringToIdentity bug with escaped escapes (diff)
downloadice-d81701ca8182942b7936f9fd84a019b695e9c890.tar.bz2
ice-d81701ca8182942b7936f9fd84a019b695e9c890.tar.xz
ice-d81701ca8182942b7936f9fd84a019b695e9c890.zip
Added support for invocation timeouts and ACM heartbeats
Diffstat (limited to 'cpp/src/Glacier2Lib/SessionHelper.cpp')
-rw-r--r--cpp/src/Glacier2Lib/SessionHelper.cpp48
1 files changed, 43 insertions, 5 deletions
diff --git a/cpp/src/Glacier2Lib/SessionHelper.cpp b/cpp/src/Glacier2Lib/SessionHelper.cpp
index ea6ae1b3a98..885dad9401d 100644
--- a/cpp/src/Glacier2Lib/SessionHelper.cpp
+++ b/cpp/src/Glacier2Lib/SessionHelper.cpp
@@ -674,6 +674,30 @@ private:
const Glacier2::SessionHelperPtr _session;
};
+class ConnectionCallbackI : public Ice::ConnectionCallback
+{
+public:
+
+ ConnectionCallbackI(const SessionHelperIPtr& sessionHelper) : _sessionHelper(sessionHelper)
+ {
+ }
+
+ virtual void
+ heartbeat(const Ice::ConnectionPtr&)
+ {
+ }
+
+ virtual void
+ closed(const Ice::ConnectionPtr&)
+ {
+ _sessionHelper->destroy();
+ }
+
+private:
+
+ SessionHelperIPtr _sessionHelper;
+};
+
}
void
@@ -685,8 +709,16 @@ SessionHelperI::connected(const Glacier2::RouterPrx& router, const Glacier2::Ses
assert(router);
Ice::ConnectionPtr conn = router->ice_getCachedConnection();
string category = router->getCategoryForClient();
- Ice::Long timeout = router->getSessionTimeout();
-
+ Ice::Long sessionTimeout = router->getSessionTimeout();
+ int acmTimeout = 0;
+ try
+ {
+ acmTimeout = router->getACMTimeout();
+ }
+ catch(const Ice::OperationNotExistException&)
+ {
+ }
+
{
IceUtil::Mutex::Lock sync(_mutex);
_router = router;
@@ -715,9 +747,16 @@ SessionHelperI::connected(const Glacier2::RouterPrx& router, const Glacier2::Ses
assert(!_refreshThread);
- if(timeout > 0)
+ if(acmTimeout > 0)
+ {
+ Ice::ConnectionPtr connection = _router->ice_getCachedConnection();
+ assert(connection);
+ connection->setACM(acmTimeout, IceUtil::None, Ice::HeartbeatAlways);
+ connection->setCallback(new ConnectionCallbackI(this));
+ }
+ else if(sessionTimeout > 0)
{
- _refreshThread = new SessionRefreshThread(this, _router, (timeout)/2);
+ _refreshThread = new SessionRefreshThread(this, _router, (sessionTimeout)/2);
_refreshThread->start();
}
}
@@ -1013,6 +1052,5 @@ void
Glacier2::SessionFactoryHelper::setDefaultProperties()
{
assert(_initData.properties);
- _initData.properties->setProperty("Ice.ACM.Client", "0");
_initData.properties->setProperty("Ice.RetryIntervals", "-1");
}