00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef ROSCPP_SUBSCRIBER_LINK_H
00029 #define ROSCPP_SUBSCRIBER_LINK_H
00030
00031 #include "ros/common.h"
00032
00033 #include <boost/thread/mutex.hpp>
00034 #include <boost/shared_array.hpp>
00035 #include <boost/weak_ptr.hpp>
00036 #include <boost/enable_shared_from_this.hpp>
00037
00038 #include <queue>
00039
00040 namespace ros
00041 {
00042 class Header;
00043 class Message;
00044 class Publication;
00045 typedef boost::shared_ptr<Publication> PublicationPtr;
00046 typedef boost::weak_ptr<Publication> PublicationWPtr;
00047 class Connection;
00048 typedef boost::shared_ptr<Connection> ConnectionPtr;
00049
00050 class ROSCPP_DECL SubscriberLink : public boost::enable_shared_from_this<SubscriberLink>
00051 {
00052 public:
00053 class Stats
00054 {
00055 public:
00056 uint64_t bytes_sent_, message_data_sent_, messages_sent_;
00057 Stats()
00058 : bytes_sent_(0), message_data_sent_(0), messages_sent_(0) { }
00059 };
00060
00061 SubscriberLink();
00062 virtual ~SubscriberLink();
00063
00064 const std::string& getTopic() const { return topic_; }
00065 const Stats &getStats() { return stats_; }
00066 const std::string &getDestinationCallerID() const { return destination_caller_id_; }
00067 int getConnectionID() const { return connection_id_; }
00068
00072 virtual void enqueueMessage(const SerializedMessage& m, bool nocopy, bool ser) = 0;
00073
00074 virtual void drop() = 0;
00075
00076 virtual std::string getTransportType() = 0;
00077
00078 virtual bool isIntraprocess() { return false; }
00079 virtual void getPublishTypes(bool& ser, bool& nocopy, const std::type_info& ti) { ser = true; nocopy = false; }
00080
00081 const std::string& getMD5Sum();
00082 const std::string& getDataType();
00083 const std::string& getMessageDefinition();
00084
00085 protected:
00086 bool verifyDatatype(const std::string &datatype);
00087
00088 PublicationWPtr parent_;
00089 unsigned int connection_id_;
00090 std::string destination_caller_id_;
00091 Stats stats_;
00092 std::string topic_;
00093 };
00094
00095 }
00096
00097 #endif // ROSCPP_SUBSCRIBER_LINK_H
00098
00099