17 #ifndef _TOPICMANAGER_HH_
18 #define _TOPICMANAGER_HH_
20 #include <boost/bind.hpp>
21 #include <boost/function.hpp>
26 #include <boost/unordered/unordered_set.hpp>
70 public:
void AddNode(
NodePtr _node);
74 public:
void RemoveNode(
unsigned int _id);
79 public:
void ProcessNodes(
bool _onlyOut =
false);
84 public:
bool IsAdvertised(
const std::string &_topic);
95 public:
void Unsubscribe(
const std::string &_topic,
const NodePtr &_sub);
104 public:
template<
typename M>
106 unsigned int _queueLimit,
109 google::protobuf::Message *msg =
NULL;
111 msg =
dynamic_cast<google::protobuf::Message *
>(&msgtype);
113 gzthrow(
"Advertise requires a google protobuf type");
115 this->UpdatePublications(_topic, msg->GetTypeName());
118 msg->GetTypeName(), _queueLimit, _hzRate));
120 std::string msgTypename;
124 msgTypename = msg->GetTypeName();
126 publication = this->FindPublication(_topic);
127 GZ_ASSERT(publication !=
NULL,
"FindPublication returned NULL");
129 publication->AddPublisher(pub);
130 if (!publication->GetLocallyAdvertised())
135 publication->SetLocallyAdvertised(
true);
136 pub->SetPublication(publication);
139 SubNodeMap::iterator iter2;
140 SubNodeMap::iterator stEnd2 = this->subscribedNodes.end();
141 for (iter2 = this->subscribedNodes.begin();
142 iter2 != stEnd2; ++iter2)
144 if (iter2->first == _topic)
146 std::list<NodePtr>::iterator liter;
147 std::list<NodePtr>::iterator lEnd = iter2->second.end();
148 for (liter = iter2->second.begin();
149 liter != lEnd; ++liter)
151 publication->AddSubscription(*liter);
161 public:
void Unadvertise(
const std::string &_topic);
173 public:
void Publish(
const std::string &_topic,
MessagePtr _message,
174 boost::function<
void(uint32_t)> _cb, uint32_t _id);
179 public:
void ConnectPubToSub(
const std::string &_topic,
184 public:
void ConnectSubToPub(
const msgs::Publish &_pub);
190 public:
void DisconnectPubFromSub(
const std::string &_topic,
191 const std::string &_host,
198 public:
void DisconnectSubFromPub(
const std::string &_topic,
199 const std::string &_host,
204 public:
void ConnectSubscribers(
const std::string &_topic);
211 public:
PublicationPtr UpdatePublications(
const std::string &_topic,
212 const std::string &_msgType);
216 public:
void RegisterTopicNamespace(
const std::string &_name);
220 public:
void GetTopicNamespaces(std::list<std::string> &_namespaces);
223 public:
void ClearBuffers();
227 public:
void PauseIncoming(
bool _pause);
231 public:
void AddNodeToProcess(
NodePtr _ptr);
234 typedef std::map<std::string, std::list<NodePtr> >
SubNodeMap;
236 private:
typedef std::map<std::string, PublicationPtr> PublicationPtr_M;
237 private: PublicationPtr_M advertisedTopics;
238 private: PublicationPtr_M::iterator advertisedTopicsEnd;
239 private: SubNodeMap subscribedNodes;
240 private: std::vector<NodePtr> nodes;
243 private: boost::unordered_set<NodePtr> nodesToProcess;
245 private: boost::recursive_mutex nodeMutex;
248 private: boost::mutex subscriberMutex;
251 private: boost::mutex processNodesMutex;
253 private:
bool pauseIncoming;
boost::shared_ptr< SubscriptionTransport > SubscriptionTransportPtr
Definition: TransportTypes.hh:69
Options for a subscription.
Definition: SubscribeOptions.hh:35
static ConnectionManager * Instance()
Get an instance of the singleton.
Definition: SingletonT.hh:36
#define GZ_ASSERT(_expr, _msg)
This macro define the standard way of launching an exception inside gazebo.
Definition: Assert.hh:24
Forward declarations for the common classes.
Definition: Animation.hh:33
boost::shared_ptr< Subscriber > SubscriberPtr
Definition: TransportTypes.hh:53
#define gzthrow(msg)
This macro logs an error to the throw stream and throws an exception that contains the file name and ...
Definition: Exception.hh:39
Forward declarations for transport.
Singleton template class.
Definition: SingletonT.hh:33
PublisherPtr Advertise(const std::string &_topic, unsigned int _queueLimit, double _hzRate)
Advertise on a topic.
Definition: TopicManager.hh:105
Manages topics and their subscriptions.
Definition: TopicManager.hh:52
A publisher of messages on a topic.
Definition: Publisher.hh:43
boost::shared_ptr< Publication > PublicationPtr
Definition: TransportTypes.hh:61
std::map< std::string, std::list< NodePtr > > SubNodeMap
A map of string->list of Node pointers.
Definition: TopicManager.hh:234
boost::shared_ptr< google::protobuf::Message > MessagePtr
Definition: TransportTypes.hh:45
#define NULL
Definition: CommonTypes.hh:30
boost::shared_ptr< Node > NodePtr
Definition: TransportTypes.hh:57
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
#define GZ_TRANSPORT_VISIBLE
Definition: system.hh:166
boost::shared_ptr< Publisher > PublisherPtr
Definition: TransportTypes.hh:49