diff options
Diffstat (limited to 'cpp/src/IceGrid/NodeSessionManager.h')
-rw-r--r-- | cpp/src/IceGrid/NodeSessionManager.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/cpp/src/IceGrid/NodeSessionManager.h b/cpp/src/IceGrid/NodeSessionManager.h new file mode 100644 index 00000000000..9b655e4a422 --- /dev/null +++ b/cpp/src/IceGrid/NodeSessionManager.h @@ -0,0 +1,71 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2006 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. +// +// ********************************************************************** + +#ifndef ICE_GRID_NODE_SESSION_MANAGER_H +#define ICE_GRID_NODE_SESSION_MANAGER_H + +#include <IceUtil/Handle.h> +#include <IceUtil/Mutex.h> +#include <IceUtil/Monitor.h> +#include <IceUtil/Thread.h> + +#include <IceGrid/Internal.h> + +namespace IceGrid +{ + +class NodeI; +typedef IceUtil::Handle<NodeI> NodeIPtr; + +class NodeSessionKeepAliveThread : public IceUtil::Thread, public IceUtil::Monitor<IceUtil::Mutex> +{ +public: + + NodeSessionKeepAliveThread(const InternalRegistryPrx&, const NodeIPtr&); + + virtual void run(); + + void waitForCreate(); + void terminate(); + +private: + + void keepAlive(const NodeSessionPrx&); + + const InternalRegistryPrx _registry; + const NodeIPtr _node; + IceUtil::Time _timeout; + NodeSessionPrx _session; + bool _shutdown; +}; +typedef IceUtil::Handle<NodeSessionKeepAliveThread> NodeSessionKeepAliveThreadPtr; + +class NodeSessionManager : public IceUtil::Mutex +{ +public: + + NodeSessionManager(); + + void create(const NodeIPtr&); + void waitForCreate(); + void destroy(); + + void replicaAdded(const InternalRegistryPrx&); + void replicaRemoved(const InternalRegistryPrx&); + +private: + + const NodeIPtr _node; + typedef std::map<Ice::Identity, NodeSessionKeepAliveThreadPtr> NodeSessionMap; + NodeSessionMap _sessions; +}; + +} + +#endif |