summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/NodeI.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/NodeI.h')
-rw-r--r--cpp/src/IceGrid/NodeI.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/cpp/src/IceGrid/NodeI.h b/cpp/src/IceGrid/NodeI.h
index 36ac0019c0e..6ecb9df70a8 100644
--- a/cpp/src/IceGrid/NodeI.h
+++ b/cpp/src/IceGrid/NodeI.h
@@ -35,9 +35,29 @@ typedef IceUtil::Handle<ServerCommand> ServerCommandPtr;
class NodeSessionManager;
+class NodeI;
+typedef IceUtil::Handle<NodeI> NodeIPtr;
+
class NodeI : public Node, public IceUtil::Monitor<IceUtil::Mutex>
{
public:
+ class Update : virtual public IceUtil::Shared
+ {
+ public:
+
+ Update(const NodeIPtr&, const NodeObserverPrx&);
+ virtual ~Update();
+
+ virtual void send() = 0;
+
+ void finished(bool);
+
+ protected:
+
+ const NodeIPtr _node;
+ const NodeObserverPrx _observer;
+ };
+ typedef IceUtil::Handle<Update> UpdatePtr;
NodeI(const Ice::ObjectAdapterPtr&, NodeSessionManager&, const ActivatorPtr&, const IceUtil::TimerPtr&,
const TraceLevelsPtr&, const NodePrx&, const std::string&, const UserAccountMapperPrx&);
@@ -97,6 +117,8 @@ public:
void removeObserver(const NodeSessionPrx&);
void observerUpdateServer(const ServerDynamicInfo&);
void observerUpdateAdapter(const AdapterDynamicInfo&);
+ void queueUpdate(const NodeObserverPrx&, const UpdatePtr&);
+ void dequeueUpdate(const NodeObserverPrx&, const UpdatePtr&, bool);
void addServer(const ServerIPtr&, const std::string&);
void removeServer(const ServerIPtr&, const std::string&);
@@ -143,6 +165,8 @@ private:
std::map<std::string, ServerDynamicInfo> _serversDynamicInfo;
std::map<std::string, AdapterDynamicInfo> _adaptersDynamicInfo;
+ std::map<NodeObserverPrx, std::deque<UpdatePtr> > _observerUpdates;
+
IceUtil::Mutex _serversLock;
std::map<std::string, std::set<ServerIPtr> > _serversByApplication;
std::set<std::string> _patchInProgress;