Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
udp.cpp
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
8
9#include <atomic>
10#include <chrono>
11#include <sstream>
12
14
15namespace {
16
20auto generate_unique_id(std::string_view prefix) -> std::string
21{
22 static std::atomic<uint64_t> counter{0};
23 auto now = std::chrono::steady_clock::now().time_since_epoch().count();
24 auto count = counter.fetch_add(1);
25
26 std::ostringstream oss;
27 oss << prefix << "-" << now << "-" << count;
28 return oss.str();
29}
30
31} // namespace
32
33auto create_connection(std::string_view id) -> std::unique_ptr<unified::i_connection>
34{
35 std::string connection_id = id.empty() ? generate_unique_id("udp-conn") : std::string(id);
36 return std::make_unique<unified::adapters::udp_connection_adapter>(connection_id);
37}
38
39auto connect(const unified::endpoint_info& endpoint, std::string_view id)
40 -> std::unique_ptr<unified::i_connection>
41{
42 auto conn = create_connection(id);
43 // Initiate "connection" (for UDP, this starts the client with target endpoint)
44 (void)conn->connect(endpoint);
45 return conn;
46}
47
48auto connect(std::string_view url, std::string_view id)
49 -> std::unique_ptr<unified::i_connection>
50{
51 auto conn = create_connection(id);
52 (void)conn->connect(url);
53 return conn;
54}
55
56auto create_listener(std::string_view id) -> std::unique_ptr<unified::i_listener>
57{
58 std::string listener_id = id.empty() ? generate_unique_id("udp-listener") : std::string(id);
59 return std::make_unique<unified::adapters::udp_listener_adapter>(listener_id);
60}
61
62auto listen(const unified::endpoint_info& bind_address, std::string_view id)
63 -> std::unique_ptr<unified::i_listener>
64{
65 auto listener = create_listener(id);
66 (void)listener->start(bind_address);
67 return listener;
68}
69
70auto listen(uint16_t port, std::string_view id) -> std::unique_ptr<unified::i_listener>
71{
72 return listen(unified::endpoint_info{"0.0.0.0", port}, id);
73}
74
75} // namespace kcenon::network::protocol::udp
auto listen(const unified::endpoint_info &bind_address, std::string_view id="") -> std::unique_ptr< unified::i_listener >
Creates and starts a UDP listener in one call.
Definition udp.cpp:62
auto connect(const unified::endpoint_info &endpoint, std::string_view id="") -> std::unique_ptr< unified::i_connection >
Creates and starts a UDP connection in one call.
Definition udp.cpp:39
auto create_listener(std::string_view id="") -> std::unique_ptr< unified::i_listener >
Creates a UDP listener (not yet listening)
Definition udp.cpp:56
auto create_connection(std::string_view id="") -> std::unique_ptr< unified::i_connection >
Creates a UDP connection (not yet started)
Definition udp.cpp:33
Network endpoint information (host/port or URL)
Definition types.h:56
UDP protocol connection factory functions.