Publication.hh
00001 #ifndef PUBLICATION_HH
00002 #define PUBLICATION_HH
00003 
00004 #include <boost/shared_ptr.hpp>
00005 #include <list>
00006 
00007 #include "transport/CallbackHelper.hh"
00008 #include "transport/TransportTypes.hh"
00009 #include "transport/PublicationTransport.hh"
00010 
00011 namespace gazebo
00012 {
00013   namespace transport
00014   {
00017 
00020     class Publication
00021     {
00023       public: Publication( const std::string &topic, 
00024                            const std::string &msgType );
00025 
00027       public: virtual ~Publication();
00028 
00030       public: std::string GetTopic() const;
00031 
00033       public: std::string GetMsgType() const;
00034 
00035       public: void AddSubscription(const CallbackHelperPtr &callback);
00036       public: void AddSubscription(const NodePtr &_node);
00037 
00038       public: void RemoveSubscription(const CallbackHelperPtr &callback);
00039       public: void RemoveSubscription(const NodePtr &_node);
00040 
00042       public: void RemoveSubscription(const std::string &host, unsigned int port);
00043 
00044       public: void RemoveTransport(const std::string &host, unsigned int port);
00045 
00046       public: unsigned int GetTransportCount() const;
00047       public: unsigned int GetCallbackCount() const;
00048       public: unsigned int GetNodeCount() const;
00049       public: unsigned int GetRemoteSubscriptionCount();
00050 
00053       public: bool GetLocallyAdvertised() const;
00054 
00056       public: void SetLocallyAdvertised(bool _value);
00057 
00059       public: void Publish(const std::string &data);
00060       public: void LocalPublish(const std::string &data);
00061 
00062       public: void Publish(const google::protobuf::Message &msg,
00063                            const boost::function<void()> &cb = NULL);
00064 
00065       public: void AddTransport( const PublicationTransportPtr &publink );
00066       public: bool HasTransport( const std::string &_host, unsigned int _port );
00067 
00068       public: void AddPublisher(PublisherPtr _pub);
00069       public: void RemovePublisher();
00070 
00071       private: unsigned int id;
00072       private: static unsigned int idCounter;
00073       private: std::string topic;
00074       private: std::string msgType;
00075 
00077       private: std::list<CallbackHelperPtr> callbacks;
00078 
00080       private: std::list<NodePtr> nodes;
00081 
00082       private: std::list<PublicationTransportPtr> transports;
00083 
00084       private: std::vector<PublisherPtr> publishers;
00085 
00086       private: bool locallyAdvertised;
00087     };
00089   }
00090 }
00091 #endif