diff options
Diffstat (limited to 'cpp/src/IceStorm/TopicI.cpp')
-rw-r--r-- | cpp/src/IceStorm/TopicI.cpp | 27 |
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. |