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_SERVICE_CLIENT_LINK_H
00029 #define ROSCPP_SERVICE_CLIENT_LINK_H
00030
00031 #include "ros/common.h"
00032
00033 #include <boost/thread/mutex.hpp>
00034 #include <boost/shared_array.hpp>
00035 #include <boost/enable_shared_from_this.hpp>
00036 #include <boost/signals/connection.hpp>
00037
00038 #include <queue>
00039
00040 namespace ros
00041 {
00042 class Header;
00043 class ServicePublication;
00044 typedef boost::weak_ptr<ServicePublication> ServicePublicationWPtr;
00045 typedef boost::shared_ptr<ServicePublication> ServicePublicationPtr;
00046 class Connection;
00047 typedef boost::shared_ptr<Connection> ConnectionPtr;
00048
00052 class ROSCPP_DECL ServiceClientLink : public boost::enable_shared_from_this<ServiceClientLink>
00053 {
00054 public:
00055 ServiceClientLink();
00056 virtual ~ServiceClientLink();
00057
00058
00059 bool initialize(const ConnectionPtr& connection);
00060 bool handleHeader(const Header& header);
00061
00067 void processResponse(bool ok, const SerializedMessage& res);
00068
00069 const ConnectionPtr& getConnection() { return connection_; }
00070
00071 private:
00072 void onConnectionDropped(const ConnectionPtr& conn);
00073
00074 void onHeaderWritten(const ConnectionPtr& conn);
00075 void onRequestLength(const ConnectionPtr& conn, const boost::shared_array<uint8_t>& buffer, uint32_t size, bool success);
00076 void onRequest(const ConnectionPtr& conn, const boost::shared_array<uint8_t>& buffer, uint32_t size, bool success);
00077 void onResponseWritten(const ConnectionPtr& conn);
00078
00079 ConnectionPtr connection_;
00080 ServicePublicationWPtr parent_;
00081 bool persistent_;
00082 boost::signals::connection dropped_conn_;
00083 };
00084 typedef boost::shared_ptr<ServiceClientLink> ServiceClientLinkPtr;
00085
00086 }
00087
00088 #endif // ROSCPP_PUBLISHER_DATA_HANDLER_H
00089
00090
00091