// // Copyright (c) ZeroC, Inc. All rights reserved. // #ifndef ICE_GRID_SESSIONSERVANTLOCATOR_H #define ICE_GRID_SESSIONSERVANTLOCATOR_H #include #include #include #include namespace IceGrid { class SessionServantManager final : public Ice::ServantLocator { public: SessionServantManager(const std::shared_ptr&, const std::string&, bool, const std::string&, const std::shared_ptr&, const std::string&, const std::shared_ptr&, const std::string&, const std::shared_ptr&, const std::shared_ptr&); std::shared_ptr locate(const Ice::Current&, std::shared_ptr&); void finished(const Ice::Current&, const std::shared_ptr&, const std::shared_ptr&); void deactivate(const std::string&); std::shared_ptr addSession(const std::shared_ptr&, const std::shared_ptr&, const std::string&); void setSessionControl(const std::shared_ptr&, const std::shared_ptr&, const Ice::IdentitySeq&); std::shared_ptr getGlacier2IdentitySet(const std::shared_ptr&); std::shared_ptr getGlacier2AdapterIdSet(const std::shared_ptr&); void removeSession(const std::shared_ptr&); std::shared_ptr add(const std::shared_ptr&, const std::shared_ptr&); void remove(const Ice::Identity&); void connectionHeartbeat(const std::shared_ptr&); void connectionClosed(const std::shared_ptr&); private: std::shared_ptr addImpl(const std::shared_ptr&, const std::shared_ptr&); struct ServantInfo { ServantInfo(const std::shared_ptr& s, const std::shared_ptr& con, const std::shared_ptr& ss) : servant(s), connection(con), session(ss) { } const std::shared_ptr servant; const std::shared_ptr connection; const std::shared_ptr session; }; struct SessionInfo { SessionInfo(const std::shared_ptr& c, const std::string& cat) : connection(c), category(cat) { } const std::shared_ptr connection; const std::string category; std::shared_ptr sessionControl; std::shared_ptr identitySet; std::shared_ptr adapterIdSet; std::set identities; }; const std::shared_ptr _adapter; const std::string _instanceName; const bool _checkConnection; const std::string _serverAdminCategory; const std::shared_ptr _serverAdminRouter; const std::string _nodeAdminCategory; const std::shared_ptr _nodeAdminRouter; const std::string _replicaAdminCategory; const std::shared_ptr _replicaAdminRouter; const std::shared_ptr _adminCallbackRouter; std::map _servants; std::map, SessionInfo> _sessions; std::multiset> _adminConnections; std::mutex _mutex; }; }; #endif