25 std::atomic<uint64_t> g_client_id_counter{0};
28 std::atomic<uint64_t> g_server_id_counter{0};
33 const auto id = g_client_id_counter.fetch_add(1, std::memory_order_relaxed);
34 std::ostringstream oss;
35 oss <<
"tcp_client_" << std::setfill(
'0') << std::setw(8) << id;
41 const auto id = g_server_id_counter.fetch_add(1, std::memory_order_relaxed);
42 std::ostringstream oss;
43 oss <<
"tcp_server_" << std::setfill(
'0') << std::setw(8) << id;
51 return error_void(-1,
"tcp_facade: host cannot be empty",
"tcp_facade");
56 return error_void(-1,
"tcp_facade: port must be between 1 and 65535",
"tcp_facade");
59 if (
config.timeout.count() <= 0)
61 return error_void(-1,
"tcp_facade: timeout must be positive",
"tcp_facade");
71 return error_void(-1,
"tcp_facade: port must be between 1 and 65535",
"tcp_facade");
76 if (!
config.cert_path.has_value() ||
config.cert_path->empty())
78 return error_void(-1,
"tcp_facade: cert_path required when use_ssl=true",
"tcp_facade");
81 if (!
config.key_path.has_value() ||
config.key_path->empty())
83 return error_void(-1,
"tcp_facade: key_path required when use_ssl=true",
"tcp_facade");
94 auto validation = validate_client_config(
config);
95 if (validation.is_err())
98 validation.error().code, validation.error().message,
"tcp_facade");
102 const std::string client_id =
config.client_id.empty() ? generate_client_id() :
config.client_id;
108 -6,
"tcp_facade: SSL/TLS support not yet implemented",
"tcp_facade");
111 auto client = std::make_shared<core::messaging_client>(client_id);
118 -600,
"tcp_facade: failed to start client: " + result.error().
message,
"tcp_facade");
121 return ok(std::shared_ptr<interfaces::i_protocol_client>(client));
128 auto validation = validate_server_config(
config);
129 if (validation.is_err())
132 validation.error().code, validation.error().message,
"tcp_facade");
136 const std::string server_id =
config.server_id.empty() ? generate_server_id() :
config.server_id;
142 -6,
"tcp_facade: SSL/TLS support not yet implemented",
"tcp_facade");
146 auto server = std::make_shared<internal::adapters::tcp_server_adapter>(server_id);
148 return ok(std::shared_ptr<interfaces::i_protocol_server>(server));
157 -1,
"tcp_facade: host cannot be empty",
"tcp_facade");
163 -1,
"tcp_facade: port must be between 1 and 65535",
"tcp_facade");
166 if (
config.pool_size == 0)
169 -1,
"tcp_facade: pool_size must be greater than 0",
"tcp_facade");
172 return ok(std::make_shared<core::connection_pool>(
static auto validate_server_config(const server_config &config) -> VoidResult
Validates server configuration.
auto create_server(const server_config &config) const -> Result< std::shared_ptr< interfaces::i_protocol_server > >
Creates a TCP server with the specified configuration.
auto create_connection_pool(const pool_config &config) const -> Result< std::shared_ptr< core::connection_pool > >
Creates a TCP connection pool with the specified configuration.
auto create_client(const client_config &config) const -> Result< std::shared_ptr< interfaces::i_protocol_client > >
Creates a TCP client with the specified configuration.
static auto generate_server_id() -> std::string
Generates a unique server ID.
static auto generate_client_id() -> std::string
Generates a unique client ID.
static auto validate_client_config(const client_config &config) -> VoidResult
Validates client configuration.
TCP client implementation.
VoidResult error_void(int code, const std::string &message, const std::string &source="network_system", const std::string &details="")
Configuration for creating a TCP client.
Configuration for creating a TCP connection pool.
Configuration for creating a TCP server.
Simplified facade for creating TCP clients and servers.