SRS-control 0.1.4
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include <boost/asio.hpp>
2#include <srs/format.hpp>
3#include <srs/srs.hpp>
4
5constexpr auto PORT = "11111";
6constexpr auto IP_ADDR = "localhost";
7constexpr auto INPUT_BUFFER_SIZE = 10000;
8namespace asio = boost::asio;
9using udp = asio::ip::udp;
10
11namespace
12{
13 auto create_socket_from_ip_port(asio::io_context& context, const std::string& ip_addr, const std::string& port)
14 {
15 auto resolver = udp::resolver{ context };
16 auto udp_endpoints = resolver.resolve(udp::v4(), ip_addr, port);
17 auto endpoint = *udp_endpoints.begin();
18 return udp::socket{ context, endpoint };
19 }
20
21} // namespace
22
24{
25 public:
26 explicit MsgReceiver(udp::socket socket)
27 : socket_{ std::move(socket) }
28 {
29 }
30
31 void listen()
32 {
33 socket_.async_receive(asio::buffer(msg_buffer_),
34 [this](auto error_code, auto byte_read)
35 {
36 auto msg = std::string_view{ msg_buffer_.data(), byte_read };
37 if (!error_code)
38 {
39 const auto& struct_data = msg_reader_.convert(msg);
40 fmt::print("{}\n", struct_data);
41 }
42 listen();
43 });
44 }
45
46 private:
47 udp::socket socket_;
48 std::array<char, INPUT_BUFFER_SIZE> msg_buffer_{};
50};
51
52auto main() -> int
53{
54 auto io_context = asio::io_context{};
55
56 auto msg_receiver = MsgReceiver{ create_socket_from_ip_port(io_context, IP_ADDR, PORT) };
57 msg_receiver.listen();
58 io_context.run();
59
60 return 0;
61}
udp::socket socket_
Definition main.cpp:47
srs::ProtoMsgReader msg_reader_
Definition main.cpp:49
void listen()
Definition main.cpp:31
MsgReceiver(udp::socket socket)
Definition main.cpp:26
std::array< char, INPUT_BUFFER_SIZE > msg_buffer_
Definition main.cpp:48
auto main() -> int
Definition main.cpp:52
constexpr auto PORT
Definition main.cpp:5
asio::ip::udp udp
Definition main.cpp:9
constexpr auto IP_ADDR
Definition main.cpp:6
constexpr auto INPUT_BUFFER_SIZE
Definition main.cpp:7
reader::ProtoMsg ProtoMsgReader
Definition srs.hpp:9