void SessionRouterI::refreshSession(const Ice::ConnectionPtr& con) { RouterIPtr router; { IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); router = getRouterImpl(con, Ice::Identity(), false); // getRouter updates the session timestamp. if(!router) { // // Close the connection otherwise the peer has no way to know that the // session has gone. // con->close(ICE_SCOPED_ENUM(ConnectionClose, Forcefully)); throw SessionNotExistException(); } } SessionPrx session = router->getSession(); if(session) { // // Ping the session to ensure it does not timeout. // session->begin_ice_ping(Ice::newCallback(new ACMPingCallback(this, con), &ACMPingCallback::finished)); } }
void SessionRouterI::refreshSession_async(const AMD_Router_refreshSessionPtr& callback, const Ice::Current& current) { RouterIPtr router; { IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this); router = getRouterImpl(current.con, current.id, false); // getRouter updates the session timestamp. if(!router) { callback->ice_exception(SessionNotExistException()); return; } } SessionPrx session = router->getSession(); if(session) { // // Ping the session to ensure it does not timeout. // session->begin_ice_ping(Ice::newCallback( new PingCallback(this, callback, current.con), &PingCallback::finished)); } else { callback->ice_response(); } }