// ********************************************************************** // // Copyright (c) 2003-2012 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #pragma once #include #include #include #include #include namespace IceGrid { class Database; typedef IceUtil::Handle DatabasePtr; class WellKnownObjectsManager; typedef IceUtil::Handle WellKnownObjectsManagerPtr; class TraceLevels; typedef IceUtil::Handle TraceLevelsPtr; class ReplicaSessionManager : public IceUtil::Monitor { public: class Thread : public SessionKeepAliveThread { public: Thread(ReplicaSessionManager& manager, const InternalRegistryPrx& master, const Ice::LoggerPtr& logger) : SessionKeepAliveThread(master, logger), _manager(manager) { } virtual ReplicaSessionPrx createSession(InternalRegistryPrx& master, IceUtil::Time& timeout) { return _manager.createSession(master, timeout); } virtual void destroySession(const ReplicaSessionPrx& session) { _manager.destroySession(session); } virtual bool keepAlive(const ReplicaSessionPrx& session) { return _manager.keepAlive(session); } void registerAllWellKnownObjects(); private: ReplicaSessionManager& _manager; }; typedef IceUtil::Handle ThreadPtr; ReplicaSessionManager(); void create(const std::string&, const InternalReplicaInfoPtr&, const DatabasePtr&, const WellKnownObjectsManagerPtr&, const InternalRegistryPrx&); void create(const InternalRegistryPrx&); NodePrxSeq getNodes(const NodePrxSeq&) const; void destroy(); void registerAllWellKnownObjects(); ReplicaSessionPrx getSession() const { return _thread->getSession(); } private: friend class Thread; bool isDestroyed() { Lock sync(*this); return !_thread; } ReplicaSessionPrx createSession(InternalRegistryPrx&, IceUtil::Time&); ReplicaSessionPrx createSessionImpl(const InternalRegistryPrx&, IceUtil::Time&); void destroySession(const ReplicaSessionPrx&); bool keepAlive(const ReplicaSessionPrx&); ThreadPtr _thread; std::string _name; InternalReplicaInfoPtr _info; InternalRegistryPrx _master; RegistryPrx _registry; InternalRegistryPrx _internalRegistry; DatabaseObserverPrx _observer; DatabasePtr _database; WellKnownObjectsManagerPtr _wellKnownObjects; TraceLevelsPtr _traceLevels; std::vector _queryObjects; }; }