// // Copyright (c) ZeroC, Inc. All rights reserved. // #ifndef ICE_GRID_REPLICA_SESSION_MANAGER_H #define ICE_GRID_REPLICA_SESSION_MANAGER_H #include #include #include #include #include namespace IceGrid { class Database; class TraceLevels; class WellKnownObjectsManager; class ReplicaSessionManager : public SessionManager { public: class Thread : public SessionKeepAliveThread { public: Thread(ReplicaSessionManager& manager, const std::shared_ptr& master, const std::shared_ptr& logger) : SessionKeepAliveThread(master, logger), _manager(manager) { } std::shared_ptr createSession(std::shared_ptr& master, std::chrono::seconds& timeout) override { return _manager.createSession(master, timeout); } void destroySession(const std::shared_ptr& session) override { _manager.destroySession(session); } bool keepAlive(const std::shared_ptr& session) override { return _manager.keepAlive(session); } void registerAllWellKnownObjects(); private: ReplicaSessionManager& _manager; }; using SessionManager::SessionManager; void create(const std::string&, const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&); void create(const std::shared_ptr&); NodePrxSeq getNodes(const NodePrxSeq&) const; void destroy(); void registerAllWellKnownObjects(); std::shared_ptr getSession() const { return _thread ? _thread->getSession() : nullptr; } std::shared_ptr findInternalRegistryForReplica(const Ice::Identity&); private: friend class Thread; bool isDestroyed() { std::lock_guard lock(_mutex); return !_communicator; } std::shared_ptr createSession(std::shared_ptr&, std::chrono::seconds&); std::shared_ptr createSessionImpl(const std::shared_ptr&, std::chrono::seconds&); void destroySession(const std::shared_ptr&); bool keepAlive(const std::shared_ptr&); std::shared_ptr _thread; std::string _name; std::shared_ptr _info; std::shared_ptr _registry; std::shared_ptr _internalRegistry; std::shared_ptr _observer; std::shared_ptr _database; std::shared_ptr _wellKnownObjects; std::shared_ptr _traceLevels; }; } #endif