diff options
Diffstat (limited to 'cpp/src/IceGrid/NodeSessionManager.h')
-rw-r--r-- | cpp/src/IceGrid/NodeSessionManager.h | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/cpp/src/IceGrid/NodeSessionManager.h b/cpp/src/IceGrid/NodeSessionManager.h index 9b655e4a422..8304a5047d8 100644 --- a/cpp/src/IceGrid/NodeSessionManager.h +++ b/cpp/src/IceGrid/NodeSessionManager.h @@ -15,6 +15,7 @@ #include <IceUtil/Monitor.h> #include <IceUtil/Thread.h> +#include <IceGrid/Query.h> #include <IceGrid/Internal.h> namespace IceGrid @@ -31,22 +32,20 @@ public: virtual void run(); - void waitForCreate(); + bool waitForCreate(); void terminate(); private: - void keepAlive(const NodeSessionPrx&); - const InternalRegistryPrx _registry; const NodeIPtr _node; - IceUtil::Time _timeout; + const std::string _name; NodeSessionPrx _session; bool _shutdown; }; typedef IceUtil::Handle<NodeSessionKeepAliveThread> NodeSessionKeepAliveThreadPtr; -class NodeSessionManager : public IceUtil::Mutex +class NodeSessionManager : public IceUtil::Monitor<IceUtil::Mutex> { public: @@ -56,12 +55,44 @@ public: void waitForCreate(); void destroy(); + void run(); + void replicaAdded(const InternalRegistryPrx&); void replicaRemoved(const InternalRegistryPrx&); private: + void syncReplicas(const InternalRegistryPrxSeq&); + + class Thread : public IceUtil::Thread + { + public: + + Thread(NodeSessionManager& manager) : _manager(manager) + { + } + + virtual void + run() + { + _manager.run(); + } + + private: + + NodeSessionManager& _manager; + }; + + const NodeIPtr _node; + IceUtil::ThreadPtr _thread; + QueryPrx _query; + InternalRegistryPrx _master; + NodeSessionPrx _masterSession; + unsigned long _serial; + bool _destroyed; + IceUtil::Time _timeout; + typedef std::map<Ice::Identity, NodeSessionKeepAliveThreadPtr> NodeSessionMap; NodeSessionMap _sessions; }; |