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
21namespace IceStorm
22{
23
24 // Forward declarations
26 typedef IceUtil::Handle<PersistentInstance> PersistentInstancePtr;
27
28 class Subscriber;
29 typedef IceUtil::Handle<Subscriber> SubscriberPtr;
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
bool destroyed() const
Definition TopicI.cpp:920
LinkInfoSeq getLinkInfoSeq() const
Definition TopicI.cpp:782
void publish(bool, const EventDataSeq &)
Definition TopicI.cpp:980
std::string getName() const
Definition TopicI.cpp:459
void update(const SubscriberRecordSeq &)
Definition TopicI.cpp:864
void observerDestroyTopic(const IceStormElection::LogUpdate &)
Definition TopicI.cpp:1178
void unsubscribe(const Ice::ObjectPrx &)
Definition TopicI.cpp:593
Ice::IdentitySeq getSubscribers() const
Definition TopicI.cpp:804
void link(const TopicPrx &, Ice::Int)
Definition TopicI.cpp:639
TopicPrx proxy() const
Definition TopicI.cpp:934
Ice::ObjectPrx getNonReplicatedPublisher() const
Definition TopicI.cpp:477
Ice::ObjectPtr getServant() const
Definition TopicI.cpp:1199
void reap(const Ice::IdentitySeq &)
Definition TopicI.cpp:743
Ice::ObjectPrx getPublisher() const
Definition TopicI.cpp:466
TopicLinkPrx getLinkProxy()
Definition TopicI.cpp:627
TopicImpl(const PersistentInstancePtr &, const std::string &, const Ice::Identity &, const SubscriberRecordSeq &)
Definition TopicI.cpp:354
Ice::ObjectPrx subscribeAndGetPublisher(const QoS &, const Ice::ObjectPrx &)
Definition TopicI.cpp:510
void updateSubscriberObservers()
Definition TopicI.cpp:1216
void observerRemoveSubscriber(const IceStormElection::LogUpdate &, const Ice::IdentitySeq &)
Definition TopicI.cpp:1119
IceStormElection::TopicContent getContent() const
Definition TopicI.cpp:843
void unlink(const TopicPrx &)
Definition TopicI.cpp:704
void observerAddSubscriber(const IceStormElection::LogUpdate &, const SubscriberRecord &)
Definition TopicI.cpp:1053
Ice::Identity id() const
Definition TopicI.cpp:927
IceDB::Dbi< IceStorm::SubscriberRecordKey, IceStorm::SubscriberRecord, IceDB::IceContext, Ice::OutputStream > SubscriberMap
Definition Util.h:31
IceUtil::Handle< Subscriber > SubscriberPtr
Definition Subscriber.h:26
::IceInternal::ProxyHandle<::IceProxy::IceStorm::Topic > TopicPrx
Definition IceManager.h:70
std::deque<::IceStorm::EventDataPtr > EventDataSeq
A sequence of EventData.
::std::vector<::IceStorm::SubscriberRecord > SubscriberRecordSeq
IceUtil::Handle< PersistentInstance > PersistentInstancePtr
Definition Instance.h:172
IceUtil::Handle< TopicImpl > TopicImplPtr
Definition TopicI.h:110
::IceInternal::ProxyHandle<::IceProxy::IceStorm::TopicLink > TopicLinkPrx
IceDB::Dbi< std::string, IceStormElection::LogUpdate, IceDB::IceContext, Ice::OutputStream > LLUMap
Definition Util.h:34
A struct used for marking the last log update.
Definition LLURecord.h:103
The contents of topic.
Definition Election.ice:24
Used to store persistent information for persistent subscribers.