diff options
author | Bernard Normier <bernard@zeroc.com> | 2007-11-28 09:55:39 -0500 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2007-11-28 09:55:39 -0500 |
commit | 8e5dfe52de91d5f096b349c119b8d3bb8a16baf2 (patch) | |
tree | 88d4918f065b6c8ff396ddad4708a87a564f04d8 /cpp/src/IceGrid/SessionServantManager.cpp | |
parent | Fix a couple of typos (diff) | |
download | ice-8e5dfe52de91d5f096b349c119b8d3bb8a16baf2.tar.bz2 ice-8e5dfe52de91d5f096b349c119b8d3bb8a16baf2.tar.xz ice-8e5dfe52de91d5f096b349c119b8d3bb8a16baf2.zip |
First cut callback support
Diffstat (limited to 'cpp/src/IceGrid/SessionServantManager.cpp')
-rw-r--r-- | cpp/src/IceGrid/SessionServantManager.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/cpp/src/IceGrid/SessionServantManager.cpp b/cpp/src/IceGrid/SessionServantManager.cpp index 5002e9ac0a2..994a9a3ff51 100644 --- a/cpp/src/IceGrid/SessionServantManager.cpp +++ b/cpp/src/IceGrid/SessionServantManager.cpp @@ -19,12 +19,15 @@ SessionServantManager::SessionServantManager(const Ice::ObjectAdapterPtr& adapte const string& instanceName, const bool checkConnection, const string& serverAdminCategory, - const Ice::ObjectPtr& serverAdminRouter) : + const Ice::ObjectPtr& serverAdminRouter, + const AdminCallbackRouterPtr& adminCallbackRouter + ) : _adapter(adapter), _instanceName(instanceName), _checkConnection(checkConnection), _serverAdminCategory(serverAdminCategory), - _serverAdminRouter(serverAdminRouter) + _serverAdminRouter(serverAdminRouter), + _adminCallbackRouter(adminCallbackRouter) { } @@ -69,18 +72,21 @@ SessionServantManager::deactivate(const std::string&) } Ice::ObjectPrx -SessionServantManager::addSession(const Ice::ObjectPtr& session, const Ice::ConnectionPtr& con, bool admin) +SessionServantManager::addSession(const Ice::ObjectPtr& session, const Ice::ConnectionPtr& con, const string& category) { Lock sync(*this); - _sessions.insert(make_pair(session, SessionInfo(con, admin))); + _sessions.insert(make_pair(session, SessionInfo(con, category))); // // Keep track of all the connections which have an admin session to allow access // to server admin objects. // - if(admin) + if(category != "") { + assert(con != 0); + _adminConnections.insert(con); + _adminCallbackRouter->addMapping(category, con); } return addImpl(session, session); // Register a servant for the session and return its proxy. @@ -109,7 +115,7 @@ SessionServantManager::setSessionControl(const Ice::ObjectPtr& session, // // Allow invocations on server admin objects. // - if(p->second.admin && _serverAdminRouter) + if(p->second.category != "" && _serverAdminRouter) { Ice::StringSeq seq; seq.push_back(_serverAdminCategory); @@ -174,9 +180,10 @@ SessionServantManager::removeSession(const Ice::ObjectPtr& session) // // If this is an admin session, remove its connection from the admin connections. // - if(p->second.admin) + if(p->second.category != "") { _adminConnections.erase(p->second.connection); + _adminCallbackRouter->removeMapping(p->second.category); } _sessions.erase(p); |