17 #ifndef _TOPICMANAGER_HH_
18 #define _TOPICMANAGER_HH_
20 #include <boost/bind.hpp>
101 public:
template<
typename M>
103 unsigned int _queueLimit,
106 google::protobuf::Message *msg =
NULL;
108 msg =
dynamic_cast<google::protobuf::Message *
>(&msgtype);
110 gzthrow(
"Advertise requires a google protobuf type");
115 msg->GetTypeName(), _queueLimit, _hzRate));
117 std::string msgTypename;
121 msgTypename = msg->GetTypeName();
124 GZ_ASSERT(publication !=
NULL,
"FindPublication returned NULL");
133 pub->SetPublication(publication);
136 SubNodeMap::iterator iter2;
137 SubNodeMap::iterator stEnd2 = this->subscribedNodes.end();
138 for (iter2 = this->subscribedNodes.begin();
139 iter2 != stEnd2; ++iter2)
141 if (iter2->first == _topic)
143 std::list<NodePtr>::iterator liter;
144 std::list<NodePtr>::iterator lEnd = iter2->second.end();
145 for (liter = iter2->second.begin();
146 liter != lEnd; ++liter)
158 public:
void Unadvertise(
const std::string &_topic);
166 const boost::function<
void()> &_cb =
NULL);
183 const std::string &_host,
191 const std::string &_host,
204 const std::string &_msgType);
218 public: std::map<std::string, std::list<std::string> >
231 private: typedef std::map<std::
string,
PublicationPtr> PublicationPtr_M;
232 private: PublicationPtr_M advertisedTopics;
233 private: PublicationPtr_M::iterator advertisedTopicsEnd;
234 private: SubNodeMap subscribedNodes;
235 private: std::vector<
NodePtr> nodes;
237 private: boost::recursive_mutex nodeMutex;
240 private: boost::mutex subscriberMutex;
242 private:
bool pauseIncoming;