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_TRANSPORT_PUBLISHER_LINK_H
00029 #define ROSCPP_TRANSPORT_PUBLISHER_LINK_H
00030
00031 #include "common.h"
00032 #include "publisher_link.h"
00033 #include "connection.h"
00034
00035 namespace ros
00036 {
00037 class Header;
00038 class Message;
00039 class Subscription;
00040 typedef boost::shared_ptr<Subscription> SubscriptionPtr;
00041 typedef boost::weak_ptr<Subscription> SubscriptionWPtr;
00042 class Connection;
00043 typedef boost::shared_ptr<Connection> ConnectionPtr;
00044
00045 class WallTimerEvent;
00046
00051 class ROSCPP_DECL TransportPublisherLink : public PublisherLink
00052 {
00053 public:
00054 TransportPublisherLink(const SubscriptionPtr& parent, const std::string& xmlrpc_uri, const TransportHints& transport_hints);
00055 virtual ~TransportPublisherLink();
00056
00057
00058 bool initialize(const ConnectionPtr& connection);
00059
00060 const ConnectionPtr& getConnection() { return connection_; }
00061
00062 virtual std::string getTransportType();
00063 virtual void drop();
00064
00065 private:
00066 void onConnectionDropped(const ConnectionPtr& conn, Connection::DropReason reason);
00067 bool onHeaderReceived(const ConnectionPtr& conn, const Header& header);
00068
00072 virtual void handleMessage(const SerializedMessage& m, bool ser, bool nocopy);
00073
00074 void onHeaderWritten(const ConnectionPtr& conn);
00075 void onMessageLength(const ConnectionPtr& conn, const boost::shared_array<uint8_t>& buffer, uint32_t size, bool success);
00076 void onMessage(const ConnectionPtr& conn, const boost::shared_array<uint8_t>& buffer, uint32_t size, bool success);
00077
00078 void onRetryTimer(const ros::WallTimerEvent&);
00079
00080 ConnectionPtr connection_;
00081
00082 int32_t retry_timer_handle_;
00083 bool needs_retry_;
00084 WallDuration retry_period_;
00085 WallTime next_retry_;
00086 bool dropping_;
00087 };
00088 typedef boost::shared_ptr<TransportPublisherLink> TransportPublisherLinkPtr;
00089
00090 }
00091
00092 #endif // ROSCPP_TRANSPORT_PUBLISHER_LINK_H
00093
00094
00095