37 #ifndef __PROTOBUF_COMM_CLIENT_H_ 38 #define __PROTOBUF_COMM_CLIENT_H_ 40 #include <protobuf_comm/frame_header.h> 41 #include <protobuf_comm/message_register.h> 42 #include <protobuf_comm/queue_entry.h> 44 #include <boost/asio.hpp> 45 #include <boost/signals2.hpp> 46 #include <google/protobuf/message.h> 71 {
return *message_register_; }
80 {
return connected_; }
82 void send(uint16_t component_id, uint16_t msg_type,
83 google::protobuf::Message &m);
85 void send(std::shared_ptr<google::protobuf::Message> m);
86 void send(google::protobuf::Message &m);
91 boost::signals2::signal<void (uint16_t, uint16_t,
92 std::shared_ptr<google::protobuf::Message>)> &
98 boost::signals2::signal<void (uint16_t, uint16_t, std::string)> &
104 boost::signals2::signal<void ()> &
110 boost::signals2::signal<void (const boost::system::error_code &)> &
116 void disconnect_nosig();
118 void handle_resolve(
const boost::system::error_code& err,
119 boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
120 void handle_connect(
const boost::system::error_code& err);
121 void handle_write(
const boost::system::error_code& error,
124 void handle_read_header(
const boost::system::error_code& error);
125 void handle_read_message(
const boost::system::error_code& error);
129 std::mutex asio_mutex_;
130 boost::asio::io_service io_service_;
131 boost::asio::ip::tcp::resolver resolver_;
132 boost::asio::ip::tcp::socket socket_;
133 boost::asio::io_service::work io_service_work_;
135 boost::signals2::signal<void (uint16_t, uint16_t,
136 std::shared_ptr<google::protobuf::Message>)> sig_rcvd_;
137 boost::signals2::signal<void (uint16_t, uint16_t, std::string)> sig_recv_failed_;
138 boost::signals2::signal<void ()> sig_connected_;
139 boost::signals2::signal<void (const boost::system::error_code &)> sig_disconnected_;
141 std::thread asio_thread_;
143 std::queue<QueueEntry *> outbound_queue_;
144 std::mutex outbound_mutex_;
145 bool outbound_active_;
147 void *in_frame_header_;
148 size_t in_frame_header_size_;
149 size_t in_data_size_;
153 bool own_message_register_;
155 frame_header_version_t frame_header_version_;
~ProtobufStreamClient()
Destructor.
Register to map msg type numbers to Protobuf messages.
ProtobufStreamClient()
Constructor.
void disconnect()
Disconnect from remote host.
boost::signals2::signal< void(uint16_t, uint16_t, std::shared_ptr< google::protobuf::Message >)> & signal_received()
Signal that is invoked when a message has been received.
boost::signals2::signal< void(uint16_t, uint16_t, std::string)> & signal_receive_failed()
Signal that is invoked when receiving a message failed.
void send(uint16_t component_id, uint16_t msg_type, google::protobuf::Message &m)
Send a message to the server.
void async_connect(const char *host, unsigned short port)
Asynchronous connect.
boost::signals2::signal< void()> & signal_connected()
Signal that is invoked when the connection has been established.
bool connected() const
Check if client is connected.
boost::signals2::signal< void(const boost::system::error_code &)> & signal_disconnected()
Signal that is invoked when the connection is closed.
Stream client for protobuf message transmission.
MessageRegister & message_register()
Get the client's message register.