TopicI.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 TOPIC_I_H
11 #define TOPIC_I_H
12 
13 #include <list>
14 
15 #include <Ice/ObserverHelper.h>
16 #include <IceStorm/Election.h>
19 #include <IceStorm/Util.h>
20 
21 namespace IceStorm
22 {
23 
24  // Forward declarations
25  class PersistentInstance;
27 
28  class Subscriber;
30 
31  class TopicImpl : public IceUtil::Shared
32  {
33  public:
35  const std::string&,
36  const Ice::Identity&,
37  const SubscriberRecordSeq&);
38 
39  std::string getName() const;
40  Ice::ObjectPrx getPublisher() const;
41  Ice::ObjectPrx getNonReplicatedPublisher() const;
42  Ice::ObjectPrx subscribeAndGetPublisher(const QoS&, const Ice::ObjectPrx&);
43  void unsubscribe(const Ice::ObjectPrx&);
45  void link(const TopicPrx&, Ice::Int);
46  void unlink(const TopicPrx&);
47  LinkInfoSeq getLinkInfoSeq() const;
48  Ice::IdentitySeq getSubscribers() const;
49  void reap(const Ice::IdentitySeq&);
50  void destroy();
51 
53 
54  void update(const SubscriberRecordSeq&);
55 
56  // Internal methods
57  bool destroyed() const;
58  Ice::Identity id() const;
59  TopicPrx proxy() const;
60  void shutdown();
61  void publish(bool, const EventDataSeq&);
62 
63  // Observer methods.
65  void observerRemoveSubscriber(const IceStormElection::LogUpdate&, const Ice::IdentitySeq&);
67 
68  Ice::ObjectPtr getServant() const;
69 
70  void updateObserver();
72 
73  private:
74  IceStormElection::LogUpdate destroyInternal(const IceStormElection::LogUpdate&, bool);
75  void removeSubscribers(const Ice::IdentitySeq&);
76 
77  //
78  // Immutable members.
79  //
80  const Ice::ObjectPrx _publisherReplicaProxy;
81  const PersistentInstancePtr _instance;
82  const std::string _name; // The topic name
83  const Ice::Identity _id; // The topic identity
84 
85  IceInternal::ObserverHelperT<IceStorm::Instrumentation::TopicObserver> _observer;
86 
87  /*const*/ Ice::ObjectPrx _publisherPrx; // The actual publisher proxy.
88  /*const*/ TopicLinkPrx _linkPrx; // The link proxy.
89 
90  Ice::ObjectPtr _servant; // The topic implementation servant.
91 
92  // Mutex protecting the subscribers.
93  IceUtil::Mutex _subscribersMutex;
94 
95  //
96  // We keep a vector of subscribers since the optimized behaviour
97  // should be publishing events, not searching through the list of
98  // subscribers for a particular subscriber. I tested
99  // vector/list/map and although there was little difference vector
100  // was the fastest of the three.
101  //
102  std::vector<SubscriberPtr> _subscribers;
103 
104  bool _destroyed; // Has this Topic been destroyed?
105 
106  LLUMap _lluMap;
107  SubscriberMap _subscriberMap;
108  };
109 
111 
112 } // End namespace IceStorm
113 
114 #endif
Instrumentation.h
IceStorm::SubscriberRecordSeq
::std::vector<::IceStorm::SubscriberRecord > SubscriberRecordSeq
Definition: SubscriberRecord.h:244
IceStorm::TopicImpl::destroy
void destroy()
Definition: TopicI.cpp:818
IceStorm::TopicImpl::getLinkInfoSeq
LinkInfoSeq getLinkInfoSeq() const
Definition: TopicI.cpp:782
IceStorm
Definition: DBTypes.ice:22
IceStorm::TopicImpl::getName
std::string getName() const
Definition: TopicI.cpp:459
IceStorm::TopicImpl::observerAddSubscriber
void observerAddSubscriber(const IceStormElection::LogUpdate &, const SubscriberRecord &)
Definition: TopicI.cpp:1053
IceStorm::EventDataSeq
std::deque<::IceStorm::EventDataPtr > EventDataSeq
A sequence of EventData.
Definition: IceStormInternal.h:528
IceStormInternal.h
IceStorm::TopicImpl::getServant
Ice::ObjectPtr getServant() const
Definition: TopicI.cpp:1199
IceStorm::TopicImpl::shutdown
void shutdown()
Definition: TopicI.cpp:766
IceStormElection::LogUpdate
A struct used for marking the last log update.
Definition: LLURecord.h:102
IceStorm::TopicImpl::destroyed
bool destroyed() const
Definition: TopicI.cpp:920
IceStorm::TopicImpl::updateObserver
void updateObserver()
Definition: TopicI.cpp:1205
IceStorm::TopicImplPtr
IceUtil::Handle< TopicImpl > TopicImplPtr
Definition: TopicI.h:110
IceStorm::SubscriberPtr
IceUtil::Handle< Subscriber > SubscriberPtr
Definition: Subscriber.h:25
IceStorm::TopicImpl::unsubscribe
void unsubscribe(const Ice::ObjectPrx &)
Definition: TopicI.cpp:593
IceStorm::TopicImpl::update
void update(const SubscriberRecordSeq &)
Definition: TopicI.cpp:864
IceStorm::TopicImpl::unlink
void unlink(const TopicPrx &)
Definition: TopicI.cpp:704
Util.h
IceStorm::TopicImpl::getPublisher
Ice::ObjectPrx getPublisher() const
Definition: TopicI.cpp:466
IceStorm::SubscriberRecord
Used to store persistent information for persistent subscribers.
Definition: SubscriberRecord.h:233
IceStorm::TopicImpl::reap
void reap(const Ice::IdentitySeq &)
Definition: TopicI.cpp:743
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:570
IceStormElection::TopicContent
The contents of topic.
Definition: Election.ice:23
IceStorm::TopicImpl::updateSubscriberObservers
void updateSubscriberObservers()
Definition: TopicI.cpp:1216
IceStorm::TopicImpl::TopicImpl
TopicImpl(const PersistentInstancePtr &, const std::string &, const Ice::Identity &, const SubscriberRecordSeq &)
Definition: TopicI.cpp:354
IceStorm::TopicImpl
Definition: TopicI.h:31
IceStorm::TopicImpl::proxy
TopicPrx proxy() const
Definition: TopicI.cpp:934
IceDB::Dbi< std::string, IceStormElection::LogUpdate, IceDB::IceContext, Ice::OutputStream >
IceStorm::TopicImpl::publish
void publish(bool, const EventDataSeq &)
Definition: TopicI.cpp:980
IceStorm::TopicImpl::observerRemoveSubscriber
void observerRemoveSubscriber(const IceStormElection::LogUpdate &, const Ice::IdentitySeq &)
Definition: TopicI.cpp:1119
IceStorm::TopicImpl::getLinkProxy
TopicLinkPrx getLinkProxy()
Definition: TopicI.cpp:627
Election.h
IceUtil::Handle
Definition: forward_declarations.h:30
IceStorm::TopicImpl::id
Ice::Identity id() const
Definition: TopicI.cpp:927
IceInternal::ProxyHandle<::IceProxy::IceStorm::TopicLink >
armarx::VariantType::Int
const VariantTypeId Int
Definition: Variant.h:917
IceStorm::TopicImpl::observerDestroyTopic
void observerDestroyTopic(const IceStormElection::LogUpdate &)
Definition: TopicI.cpp:1178
armarx::Mutex
boost::mutex Mutex
Definition: Synchronization.h:149
IceStorm::TopicImpl::subscribeAndGetPublisher
Ice::ObjectPrx subscribeAndGetPublisher(const QoS &, const Ice::ObjectPrx &)
Definition: TopicI.cpp:510
armarx::aron::type::ObjectPtr
std::shared_ptr< Object > ObjectPtr
Definition: Object.h:36
IceStorm::TopicImpl::link
void link(const TopicPrx &, Ice::Int)
Definition: TopicI.cpp:639
IceStorm::TopicImpl::getNonReplicatedPublisher
Ice::ObjectPrx getNonReplicatedPublisher() const
Definition: TopicI.cpp:477
IceStorm::PersistentInstancePtr
IceUtil::Handle< PersistentInstance > PersistentInstancePtr
Definition: Instance.h:172
IceStorm::TopicImpl::getSubscribers
Ice::IdentitySeq getSubscribers() const
Definition: TopicI.cpp:804
IceStorm::TopicImpl::getContent
IceStormElection::TopicContent getContent() const
Definition: TopicI.cpp:843