TransientTopicI.h
Go to the documentation of this file.
1 // **********************************************************************
2 //
3 // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4 //
5 // This copy of Ice is licensed to you under the terms described in the
6 // ICE_LICENSE file included in this distribution.
7 //
8 // **********************************************************************
9 
10 #ifndef TRANSIENT_TOPIC_I_H
11 #define TRANSIENT_TOPIC_I_H
12 
14 
15 namespace IceStorm
16 {
17 
18  // Forward declarations.
19  class Instance;
21 
22  class Subscriber;
24 
26  {
27  public:
28  TransientTopicImpl(const InstancePtr&, const std::string&, const Ice::Identity&);
30 
31  virtual std::string getName(const Ice::Current&) const;
32  virtual Ice::ObjectPrx getPublisher(const Ice::Current&) const;
33  virtual Ice::ObjectPrx getNonReplicatedPublisher(const Ice::Current&) const;
34  virtual void subscribe(const QoS&, const Ice::ObjectPrx&, const Ice::Current&);
35  virtual Ice::ObjectPrx
36  subscribeAndGetPublisher(const QoS&, const Ice::ObjectPrx&, const Ice::Current&);
37  virtual void unsubscribe(const Ice::ObjectPrx&, const Ice::Current&);
38  virtual TopicLinkPrx getLinkProxy(const Ice::Current&);
39  virtual void link(const TopicPrx&, Ice::Int, const Ice::Current&);
40  virtual void unlink(const TopicPrx&, const Ice::Current&);
41  virtual LinkInfoSeq getLinkInfoSeq(const Ice::Current&) const;
42  virtual Ice::IdentitySeq getSubscribers(const Ice::Current&) const;
43  virtual void destroy(const Ice::Current&);
44  virtual void reap(const Ice::IdentitySeq&, const Ice::Current&);
45 
46  // Internal methods
47  bool destroyed() const;
48  Ice::Identity id() const;
49  void publish(bool, const EventDataSeq&);
50 
51  void shutdown();
52 
53  private:
54  //
55  // Immutable members.
56  //
57  const InstancePtr _instance;
58  const std::string _name; // The topic name
59  const Ice::Identity _id; // The topic identity
60 
61  /*const*/ Ice::ObjectPrx _publisherPrx;
62  /*const*/ TopicLinkPrx _linkPrx;
63 
64  //
65  // We keep a vector of subscribers since the optimized behaviour
66  // should be publishing events, not searching through the list of
67  // subscribers for a particular subscriber. I tested
68  // vector/list/map and although there was little difference vector
69  // was the fastest of the three.
70  //
71  std::vector<SubscriberPtr> _subscribers;
72 
73  bool _destroyed; // Has this Topic been destroyed?
74  };
75 
77 
78 } // End namespace IceStorm
79 
80 #endif
IceStorm::TransientTopicImpl::getSubscribers
virtual Ice::IdentitySeq getSubscribers(const Ice::Current &) const
Definition: TransientTopicI.cpp:461
IceStorm
Definition: DBTypes.ice:22
IceStorm::TransientTopicImpl::getPublisher
virtual Ice::ObjectPrx getPublisher(const Ice::Current &) const
Definition: TransientTopicI.cpp:136
IceStorm::TransientTopicImpl::TransientTopicImpl
TransientTopicImpl(const InstancePtr &, const std::string &, const Ice::Identity &)
Definition: TransientTopicI.cpp:87
IceStorm::EventDataSeq
std::deque<::IceStorm::EventDataPtr > EventDataSeq
A sequence of EventData.
Definition: IceStormInternal.h:528
IceStormInternal.h
IceStorm::TransientTopicImpl::unlink
virtual void unlink(const TopicPrx &, const Ice::Current &)
Definition: TransientTopicI.cpp:395
IceStorm::TransientTopicImpl::unsubscribe
virtual void unsubscribe(const Ice::ObjectPrx &, const Ice::Current &)
Definition: TransientTopicI.cpp:310
IceStorm::TransientTopicImpl
Definition: TransientTopicI.h:25
IceStorm::TopicInternal::getLinkProxy
idempotent TopicLink * getLinkProxy()
Retrieve a proxy to the TopicLink interface.
IceStorm::TransientTopicImpl::getName
virtual std::string getName(const Ice::Current &) const
Definition: TransientTopicI.cpp:129
IceStorm::SubscriberPtr
IceUtil::Handle< Subscriber > SubscriberPtr
Definition: Subscriber.h:25
IceStorm::TransientTopicImpl::subscribe
virtual void subscribe(const QoS &, const Ice::ObjectPrx &, const Ice::Current &)
Definition: TransientTopicI.cpp:150
IceStorm::TransientTopicImpl::reap
virtual void reap(const Ice::IdentitySeq &, const Ice::Current &)
Definition: TransientTopicI.cpp:512
IceStorm::TopicInternal
Internal operations for a topic.
Definition: IceStormInternal.h:878
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:570
IceStorm::TransientTopicImpl::id
Ice::Identity id() const
Definition: TransientTopicI.cpp:524
IceStorm::TransientTopicImpl::subscribeAndGetPublisher
virtual Ice::ObjectPrx subscribeAndGetPublisher(const QoS &, const Ice::ObjectPrx &, const Ice::Current &)
Definition: TransientTopicI.cpp:251
IceStorm::TransientTopicImpl::~TransientTopicImpl
~TransientTopicImpl()
Definition: TransientTopicI.cpp:124
IceStorm::InstancePtr
IceUtil::Handle< Instance > InstancePtr
Definition: Instance.h:128
IceStorm::TransientTopicImpl::publish
void publish(bool, const EventDataSeq &)
Definition: TransientTopicI.cpp:531
IceStorm::TransientTopicImpl::destroyed
bool destroyed() const
Definition: TransientTopicI.cpp:517
IceStorm::TransientTopicImpl::shutdown
void shutdown()
Definition: TransientTopicI.cpp:594
IceStorm::TransientTopicImpl::getLinkInfoSeq
virtual LinkInfoSeq getLinkInfoSeq(const Ice::Current &) const
Definition: TransientTopicI.cpp:440
IceUtil::Handle
Definition: forward_declarations.h:30
IceInternal::ProxyHandle<::IceProxy::IceStorm::TopicLink >
IceStorm::TransientTopicImpl::link
virtual void link(const TopicPrx &, Ice::Int, const Ice::Current &)
Definition: TransientTopicI.cpp:355
armarx::VariantType::Int
const VariantTypeId Int
Definition: Variant.h:917
armarx::Mutex
boost::mutex Mutex
Definition: Synchronization.h:149
IceStorm::TransientTopicImpl::getNonReplicatedPublisher
virtual Ice::ObjectPrx getNonReplicatedPublisher(const Ice::Current &) const
Definition: TransientTopicI.cpp:143
IceStorm::TransientTopicImplPtr
IceUtil::Handle< TransientTopicImpl > TransientTopicImplPtr
Definition: TransientTopicI.h:76
IceStorm::TransientTopicImpl::destroy
virtual void destroy(const Ice::Current &)
Definition: TransientTopicI.cpp:475