summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/Topics.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/Topics.h')
-rw-r--r--cpp/src/IceGrid/Topics.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/cpp/src/IceGrid/Topics.h b/cpp/src/IceGrid/Topics.h
new file mode 100644
index 00000000000..4efe214b546
--- /dev/null
+++ b/cpp/src/IceGrid/Topics.h
@@ -0,0 +1,79 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2005 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 ICEGRID_TOPICS_H
+#define ICEGRID_TOPICS_H
+
+#include <IceUtil/Mutex.h>
+
+#include <IceStorm/IceStorm.h>
+
+#include <IceGrid/Observer.h>
+
+namespace IceGrid
+{
+
+class NodeObserverTopic : public NodeObserver, public IceUtil::Mutex
+{
+public:
+
+ NodeObserverTopic(const IceStorm::TopicPrx&, const NodeObserverPrx&);
+
+ virtual void init(const std::string&, const ServerDynamicInfoSeq&, const AdapterDynamicInfoSeq&,
+ const Ice::Current&);
+ virtual void updateServer(const std::string&, const ServerDynamicInfo&, const Ice::Current&);
+ virtual void updateAdapter(const std::string&, const AdapterDynamicInfo&, const Ice::Current&);
+
+ void subscribe(const NodeObserverPrx&);
+ void unsubscribe(const NodeObserverPrx&);
+
+ void removeNode(const std::string&);
+
+private:
+
+ const IceStorm::TopicPrx _topic;
+ const NodeObserverPrx _publisher;
+
+ std::set<std::string> _nodes;
+ std::map<std::string, ServerDynamicInfoSeq> _servers;
+ std::map<std::string, AdapterDynamicInfoSeq> _adapters;
+};
+
+class RegistryObserverTopic : public RegistryObserver, public IceUtil::Mutex
+{
+public:
+
+ RegistryObserverTopic(const IceStorm::TopicPrx&, const RegistryObserverPrx&, NodeObserverTopic&);
+ virtual void init(int, const ApplicationDescriptorSeq&, const Ice::StringSeq&, const Ice::Current&);
+
+ virtual void applicationAdded(int, const ApplicationDescriptorPtr&, const Ice::Current&);
+ virtual void applicationRemoved(int, const std::string&, const Ice::Current&);
+ virtual void applicationSynced(int, const ApplicationDescriptorPtr&, const Ice::Current&);
+ virtual void applicationUpdated(int, const ApplicationUpdateDescriptor&, const Ice::Current&);
+
+ virtual void nodeUp(const std::string&, const Ice::Current&);
+ virtual void nodeDown(const std::string&, const Ice::Current&);
+
+ void subscribe(const RegistryObserverPrx&);
+ void unsubscribe(const RegistryObserverPrx&);
+
+private:
+
+ const IceStorm::TopicPrx _topic;
+ const RegistryObserverPrx _publisher;
+ NodeObserverTopic& _nodeObserver;
+
+ int _serial;
+ ApplicationDescriptorSeq _applications;
+ Ice::StringSeq _nodes;
+};
+
+};
+
+#endif