Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
udp.cppm
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
21module;
22
23// =============================================================================
24// Global Module Fragment - Standard Library Headers
25// =============================================================================
26#include <atomic>
27#include <chrono>
28#include <functional>
29#include <memory>
30#include <mutex>
31#include <optional>
32#include <span>
33#include <string>
34#include <string_view>
35#include <vector>
36
37// Third-party headers
38#include <asio.hpp>
39
40export module kcenon.network:udp;
41
42import :core;
43
44// =============================================================================
45// UDP Client
46// =============================================================================
47
48export namespace kcenon::network::core {
49
81public:
85 using udp_data_callback = std::function<void(
86 std::span<const uint8_t> data,
87 const std::string& from_address,
88 uint16_t from_port)>;
89
94 explicit messaging_udp_client(std::string_view client_id);
95
99 virtual ~messaging_udp_client() noexcept;
100
101 // Non-copyable, movable
103 messaging_udp_client& operator=(const messaging_udp_client&) = delete;
106
114 bool start_client(std::string_view remote_host, uint16_t remote_port, uint16_t local_port = 0);
115
120
126 bool send_packet(std::span<const uint8_t> data);
127
133 bool send_packet(std::string_view data);
134
142 bool send_to(std::span<const uint8_t> data, std::string_view host, uint16_t port);
143
148 bool is_running() const noexcept;
149
154 std::string_view client_id() const noexcept;
155
161
167
173 bool join_multicast_group(std::string_view multicast_address);
174
180 bool leave_multicast_group(std::string_view multicast_address);
181
182private:
183 struct impl;
184 std::unique_ptr<impl> pimpl_;
185};
186
187// =============================================================================
188// UDP Server
189// =============================================================================
190
220public:
224 using udp_data_callback = std::function<void(
225 std::span<const uint8_t> data,
226 const std::string& from_address,
227 uint16_t from_port)>;
228
233 explicit messaging_udp_server(std::string_view server_id);
234
238 virtual ~messaging_udp_server() noexcept;
239
240 // Non-copyable, movable
242 messaging_udp_server& operator=(const messaging_udp_server&) = delete;
245
251 bool start_server(uint16_t port);
252
259 bool start_server(std::string_view address, uint16_t port);
260
264 void stop_server();
265
273 bool send_to(std::span<const uint8_t> data, std::string_view host, uint16_t port);
274
282 bool send_to(std::string_view data, std::string_view host, uint16_t port);
283
290 bool broadcast(std::span<const uint8_t> data, uint16_t port);
291
296 bool is_running() const noexcept;
297
302 std::string_view server_id() const noexcept;
303
309
315
321 bool join_multicast_group(std::string_view multicast_address);
322
323private:
324 struct impl;
325 std::unique_ptr<impl> pimpl_;
326};
327
328// =============================================================================
329// Reliable UDP Client
330// =============================================================================
331
357public:
362 explicit reliable_udp_client(std::string_view client_id);
363
367 virtual ~reliable_udp_client() noexcept;
368
369 // Non-copyable, movable
371 reliable_udp_client& operator=(const reliable_udp_client&) = delete;
374
381 bool start_client(std::string_view remote_host, uint16_t remote_port);
382
387
393 bool send_reliable(std::span<const uint8_t> data);
394
400 bool send_unreliable(std::span<const uint8_t> data);
401
406 bool is_connected() const noexcept;
407
412 bool is_running() const noexcept;
413
418 std::string_view client_id() const noexcept;
419
424 void set_connection_callback(connection_callback callback);
425
430 void set_disconnection_callback(disconnection_callback callback);
431
437
443
448 void set_retransmit_timeout(std::chrono::milliseconds timeout);
449
454 void set_max_retransmit_attempts(size_t max_attempts);
455
460 std::chrono::milliseconds get_rtt() const noexcept;
461
466 double get_packet_loss_rate() const noexcept;
467
468private:
469 struct impl;
470 std::unique_ptr<impl> pimpl_;
471};
472
473} // namespace kcenon::network::core
A UDP client that sends datagrams to a target endpoint and can receive responses.
Definition udp.cppm:80
auto client_id() const -> const std::string &
Returns the client identifier.
void set_data_callback(udp_data_callback callback)
Set data received callback.
bool send_packet(std::span< const uint8_t > data)
Send a datagram to the configured remote endpoint.
bool leave_multicast_group(std::string_view multicast_address)
Leave multicast group.
auto stop_client() -> VoidResult
Stops the client and releases all resources.
bool send_to(std::span< const uint8_t > data, std::string_view host, uint16_t port)
Send a datagram to a specific endpoint.
bool join_multicast_group(std::string_view multicast_address)
Enable multicast reception.
messaging_udp_client(std::string_view client_id)
Construct a UDP client with a given client_id.
std::function< void( std::span< const uint8_t > data, const std::string &from_address, uint16_t from_port)> udp_data_callback
Callback type for UDP data reception.
Definition udp.cppm:85
virtual ~messaging_udp_client() noexcept
Destructor - automatically stops the client if running.
auto is_running() const -> bool override
Checks if the client is currently running.
auto start_client(std::string_view host, uint16_t port) -> VoidResult
Starts the client by resolving target host and port.
auto set_error_callback(error_callback_t callback) -> void override
Sets the callback for errors.
A UDP server that receives datagrams and routes them based on sender endpoint.
Definition udp.cppm:219
std::function< void( std::span< const uint8_t > data, const std::string &from_address, uint16_t from_port)> udp_data_callback
Callback type for UDP data reception.
Definition udp.cppm:224
messaging_udp_server(std::string_view server_id)
Construct a UDP server with a given server_id.
virtual ~messaging_udp_server() noexcept
Destructor - automatically stops the server if running.
A UDP client with optional reliability layer for configurable delivery guarantees.
Definition udp.cppm:356
virtual ~reliable_udp_client() noexcept
Destructor.
reliable_udp_client(std::string_view client_id)
Construct a reliable UDP client.
std::function< void()> disconnection_callback
Definition core.cppm:411
std::function< void()> connection_callback
Callback type aliases for messaging.
Definition core.cppm:410
std::function< void(const std::string &)> error_callback
Definition core.cppm:412
std::function< void(std::span< const uint8_t >)> data_callback
Definition core.cppm:413