24 #ifndef GOBY_MIDDLEWARE_IO_UDP_POINT_TO_POINT_H
25 #define GOBY_MIDDLEWARE_IO_UDP_POINT_TO_POINT_H
31 #include <boost/asio/buffer.hpp>
32 #include <boost/asio/ip/udp.hpp>
33 #include <boost/system/error_code.hpp>
53 class UDPPointToPointConfig;
71 bool use_indexed_groups =
false>
73 :
public UDPOneToManyThread<line_in_group, line_out_group, publish_layer, subscribe_layer,
74 goby::middleware::protobuf::UDPPointToPointConfig, ThreadType,
88 boost::asio::ip::udp::resolver resolver(this->
mutable_io());
89 remote_endpoint_ = *resolver.resolve(
91 boost::asio::ip::resolver_query_base::numeric_service});
94 this->
interthread().template publish<line_in_group>(ready);
101 void async_write(std::shared_ptr<const goby::middleware::protobuf::IOData> io_msg)
override;
104 boost::asio::ip::udp::endpoint remote_endpoint_;
114 bool use_indexed_groups>
116 subscribe_layer, ThreadType, use_indexed_groups>::
117 async_write(std::shared_ptr<const goby::middleware::protobuf::IOData> io_msg)
119 this->mutable_socket().async_send_to(
120 boost::asio::buffer(io_msg->
data()), remote_endpoint_,
121 [
this, io_msg](
const boost::system::error_code& ec, std::size_t bytes_transferred)
123 if (!ec && bytes_transferred > 0)
125 this->handle_write_success(bytes_transferred);
129 this->handle_write_error(ec);