summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/TopicI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceStorm/TopicI.cpp')
-rw-r--r--cpp/src/IceStorm/TopicI.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/cpp/src/IceStorm/TopicI.cpp b/cpp/src/IceStorm/TopicI.cpp
index b00bbc2ab45..98b11165cd6 100644
--- a/cpp/src/IceStorm/TopicI.cpp
+++ b/cpp/src/IceStorm/TopicI.cpp
@@ -83,6 +83,32 @@ public:
}
virtual void
+ forward(const EventDataSeq& v, const Ice::Current& current)
+ {
+ EventSeq events;
+ events.reserve(v.size());
+ for(EventDataSeq::const_iterator p = v.begin(); p != v.end(); ++p)
+ {
+ events.push_back(new Event(p->op, p->mode, p->data, p->context));
+ }
+ _topic->publish(true, events);
+ }
+
+private:
+
+ const TopicIPtr _topic;
+};
+
+class TopicLinkV2I : public TopicLinkV2
+{
+public:
+
+ TopicLinkV2I(const TopicIPtr& topic) :
+ _topic(topic)
+ {
+ }
+
+ virtual void
forward(const EventSeq& v, const Ice::Current& current)
{
_topic->publish(true, v);
@@ -125,6 +151,7 @@ TopicI::TopicI(
//
id.name = "link";
_linkPrx = TopicLinkPrx::uncheckedCast(_instance->objectAdapter()->add(new TopicLinkI(this), id));
+ _instance->objectAdapter()->addFacet(new TopicLinkV2I(this), id, "V2");
//
// Re-establish linked subscribers.