R-Type 0.1
Loading...
Searching...
No Matches
UdpTransport.hpp
1#pragma once
2
8#include <array>
9#include <asio.hpp>
10#include <cstddef>
11#include <cstdint>
12#include <functional>
13#include <vector>
14
15#include "../config/NetworkConfig.hpp"
16#include "../metrics/Metrics.hpp"
17
22public:
29 UdpTransport(asio::io_context &context, std::uint16_t port,
30 NetworkMetrics &metrics);
31 ~UdpTransport() = default;
32
36 void startReceive();
37
43 void send(const asio::ip::udp::endpoint &destination,
44 const std::vector<std::uint8_t> &data);
45
49 void close();
50
55 bool isOpen() const;
56
61 void
62 setReceiveCallback(std::function<void(const asio::ip::udp::endpoint &Endpoint,
63 const std::vector<std::uint8_t> &)>
64 callback);
65
66private:
67 static constexpr std::size_t BUFFER_SIZE = 2048;
68
69 asio::ip::udp::socket _socket;
70 asio::ip::udp::endpoint _endpoint;
71 NetworkMetrics &_metrics;
72
73 std::array<std::uint8_t, BUFFER_SIZE> _receiveBuffer;
74 std::function<void(const asio::ip::udp::endpoint &Endpoint,
75 const std::vector<std::uint8_t> &)>
76 _receiveCallback;
77
78 void execClose();
79};
80
Asynchronous UDP socket wrapper used by the server.
Definition UdpTransport.hpp:21
void setReceiveCallback(std::function< void(const asio::ip::udp::endpoint &Endpoint, const std::vector< std::uint8_t > &)> callback)
Sets the function called for every received datagram.
Definition UdpTransport.cpp:70
void send(const asio::ip::udp::endpoint &destination, const std::vector< std::uint8_t > &data)
Queues a datagram for sending, ignored if larger than the limit.
Definition UdpTransport.cpp:46
void startReceive()
Starts the receive loop that forwards datagrams to the callback.
Definition UdpTransport.cpp:9
UdpTransport(asio::io_context &context, std::uint16_t port, NetworkMetrics &metrics)
Opens an IPv4 UDP socket bound to a port.
Definition UdpTransport.cpp:4
bool isOpen() const
Tells whether the socket is still open.
Definition UdpTransport.cpp:77
void close()
Cancels pending operations and closes the socket.
Definition UdpTransport.cpp:96
Traffic and latency counters of a network endpoint.
Definition Metrics.hpp:14