// // Copyright (c) ZeroC, Inc. All rights reserved. // #ifndef ICEGRID_REPLICA_SESSION_H #define ICEGRID_REPLICA_SESSION_H #include #include namespace IceGrid { class Database; class TraceLevels; class WellKnownObjectsManager; class ReplicaSessionI final : public ReplicaSession { public: static std::shared_ptr create(const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&, std::chrono::seconds); void keepAlive(const Ice::Current&) override; int getTimeout(const Ice::Current&) const override; void setDatabaseObserver(std::shared_ptr, IceUtil::Optional, const Ice::Current&) override; void setEndpoints(StringObjectProxyDict, const Ice::Current&) override; void registerWellKnownObjects(ObjectInfoSeq, const Ice::Current&) override; void setAdapterDirectProxy(std::string, std::string, std::shared_ptr, const Ice::Current&) override; void receivedUpdate(TopicName, int, std::string, const Ice::Current&) override; void destroy(const Ice::Current&) override; std::chrono::steady_clock::time_point timestamp() const; void shutdown(); const std::shared_ptr& getInternalRegistry() const; const std::shared_ptr& getInfo() const; std::shared_ptr getProxy() const; std::shared_ptr getEndpoint(const std::string&); bool isDestroyed() const; private: ReplicaSessionI(const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&, std::chrono::seconds); void destroyImpl(bool); const std::shared_ptr _database; const std::shared_ptr _wellKnownObjects; const std::shared_ptr _traceLevels; const std::shared_ptr _internalRegistry; const std::shared_ptr _info; const std::chrono::seconds _timeout; std::shared_ptr _proxy; std::shared_ptr _observer; ObjectInfoSeq _replicaWellKnownObjects; StringObjectProxyDict _replicaEndpoints; std::chrono::steady_clock::time_point _timestamp; bool _destroy; mutable std::mutex _mutex; }; }; #endif