Goby3 3.4.0
2026.04.13
Loading...
Searching...
No Matches
udp.h
Go to the documentation of this file.
1// Copyright 2019-2026:
2// GobySoft, LLC (2013-)
3// Community contributors (see AUTHORS file)
4// File authors:
5// Toby Schneider <toby@gobysoft.org>
6//
7//
8// This file is part of the Goby Underwater Autonomy Project Libraries
9// ("The Goby Libraries").
10//
11// The Goby Libraries are free software: you can redistribute them and/or modify
12// them under the terms of the GNU Lesser General Public License as published by
13// the Free Software Foundation, either version 2.1 of the License, or
14// (at your option) any later version.
15//
16// The Goby Libraries are distributed in the hope that they will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU Lesser General Public License for more details.
20//
21// You should have received a copy of the GNU Lesser General Public License
22// along with Goby. If not, see <http://www.gnu.org/licenses/>.
23
24#ifndef GOBY_MIDDLEWARE_IO_MAVLINK_UDP_H
25#define GOBY_MIDDLEWARE_IO_MAVLINK_UDP_H
26
27#include <iosfwd> // for size_t
28
29#include <boost/asio/buffer.hpp> // for buffer
30#include <boost/asio/ip/udp.hpp> // for udp, udp::endpoint
31#include <boost/system/error_code.hpp> // for error_code
32
33#include "goby/middleware/io/detail/io_interface.h" // for PubSubLayer, Pub...
34#include "goby/middleware/io/mavlink/common.h" // for IOThreadMAVLink
35#include "goby/middleware/io/udp_point_to_point.h" // for UDPPointToPointT...
37
38namespace goby
39{
40namespace middleware
41{
42class Group;
43}
44} // namespace goby
45namespace goby
46{
47namespace middleware
48{
49namespace protobuf
50{
51class UDPPointToPointConfig;
52}
53} // namespace middleware
54} // namespace goby
55
56namespace goby
57{
58namespace middleware
59{
60namespace io
61{
62template <const goby::middleware::Group& line_in_group,
63 const goby::middleware::Group& line_out_group, PubSubLayer publish_layer,
64 PubSubLayer subscribe_layer, template <class> class ThreadType>
66 IOThreadMAVLink<line_in_group, line_out_group, publish_layer, subscribe_layer,
67 UDPPointToPointThread<line_in_group, line_out_group, publish_layer,
68 subscribe_layer, ThreadType>,
70
74template <const goby::middleware::Group& line_in_group,
75 const goby::middleware::Group& line_out_group,
77 PubSubLayer subscribe_layer = PubSubLayer::INTERTHREAD,
78 template <class> class ThreadType = goby::zeromq::SimpleThread>
79class UDPThreadMAVLink : public UDPThreadMAVLinkBase<line_in_group, line_out_group, publish_layer,
80 subscribe_layer, ThreadType>
81{
82 public:
84 : UDPThreadMAVLinkBase<line_in_group, line_out_group, publish_layer, subscribe_layer,
85 ThreadType>(config)
86 {
87 }
88
90
91 private:
92 void async_read() override;
93
94 private:
95 boost::asio::ip::udp::endpoint sender_endpoint_;
96};
97} // namespace io
98} // namespace middleware
99} // namespace goby
100
101template <const goby::middleware::Group& line_in_group,
102 const goby::middleware::Group& line_out_group,
104 goby::middleware::io::PubSubLayer subscribe_layer, template <class> class ThreadType>
105void goby::middleware::io::UDPThreadMAVLink<line_in_group, line_out_group, publish_layer,
106 subscribe_layer, ThreadType>::async_read()
107{
108 this->mutable_socket().async_receive_from(
109 boost::asio::buffer(this->buffer()), sender_endpoint_,
110 [this](const boost::system::error_code& ec, std::size_t bytes_transferred)
111 {
112 if (!ec && bytes_transferred > 0)
113 {
114 this->try_parse(bytes_transferred);
115 this->async_read();
116 }
117 else
118 {
119 this->handle_read_error(ec);
120 }
121 });
122}
123
124#endif
Class for grouping publications in the Goby middleware. Analogous to "topics" in ROS,...
Definition group.h:60
Implements Thread for a three layer middleware setup ([ intervehicle [ interprocess [ interthread ] ]...
The global namespace for the Goby project.