Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
tcp.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 <chrono>
10#include <random>
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("tcp-conn") : std::string(id);
36 return std::make_unique<unified::adapters::tcp_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 (async, will complete in background)
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("tcp-listener") : std::string(id);
59 return std::make_unique<unified::adapters::tcp_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::tcp
auto listen(const unified::endpoint_info &bind_address, std::string_view id="") -> std::unique_ptr< unified::i_listener >
Creates and starts a TCP listener in one call.
Definition tcp.cpp:62
auto create_listener(std::string_view id="") -> std::unique_ptr< unified::i_listener >
Creates a TCP listener (not yet listening)
Definition tcp.cpp:56
auto connect(const unified::endpoint_info &endpoint, std::string_view id="") -> std::unique_ptr< unified::i_connection >
Creates and connects a TCP connection in one call.
Definition tcp.cpp:39
auto create_connection(std::string_view id="") -> std::unique_ptr< unified::i_connection >
Creates a TCP connection (not yet connected)
Definition tcp.cpp:33
Network endpoint information (host/port or URL)
Definition types.h:56
TCP protocol connection and listener factory functions.