19 using key_type = std::string;
22 std::string address{
"0.0.0.0"};
23 std::uint16_t port{11451};
24 const std::string& key()
const {
return key_; }
26 using endpoint = asio::ip::udp::endpoint;
32 endpoint local_endpoint()
const {
return socket_.local_endpoint(); }
35 void on_data(
const endpoint& peer, Fn fn) {
36 callbacks_[peer].add([fn = std::move(fn)](
data_ptr data)
mutable ->
auto {
37 return fn(
byte_span{data->data(), data->size()});
41 awaitable<void> send(
const endpoint& peer, byte_span data);
42 awaitable<void> task();
43 std::string desc()
const {
return std::format(
"udp server {}", info_.key_); }
46 awaitable<void> send_task();
49 std::vector<std::byte> data;
52 asio::ip::udp::socket socket_;
53 std::array<std::byte, 65536> buffer_{};
54 std::map<endpoint, callback<data_ptr>> callbacks_;
55 std::deque<datagram> queue_;
56 std::size_t queued_bytes_{};