Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
kcenon::network::facade::tcp_facade Class Reference

Simplified facade for creating TCP clients and servers. More...

#include <tcp_facade.h>

Collaboration diagram for kcenon::network::facade::tcp_facade:
Collaboration graph

Classes

struct  client_config
 Configuration for creating a TCP client. More...
 
struct  pool_config
 Configuration for creating a TCP connection pool. More...
 
struct  server_config
 Configuration for creating a TCP server. More...
 

Public Member Functions

auto create_client (const client_config &config) const -> Result< std::shared_ptr< interfaces::i_protocol_client > >
 Creates a TCP client with the specified 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.
 

Static Private Member Functions

static auto generate_client_id () -> std::string
 Generates a unique client ID.
 
static auto generate_server_id () -> std::string
 Generates a unique server ID.
 
static auto validate_client_config (const client_config &config) -> VoidResult
 Validates client configuration.
 
static auto validate_server_config (const server_config &config) -> VoidResult
 Validates server configuration.
 

Detailed Description

Simplified facade for creating TCP clients and servers.

This facade provides a simple, unified API for creating TCP protocol clients and servers, hiding the complexity of template parameters, protocol tags, and TLS policies from the user.

Design Goals

  • Simplicity: No template parameters or protocol tags
  • Consistency: Same API pattern across all protocol facades
  • Type Safety: Returns standard IProtocolClient/IProtocolServer interfaces
  • Zero Cost: No performance overhead compared to direct instantiation

Thread Safety

All methods are thread-safe and can be called concurrently.

Usage Example

using namespace kcenon::network::facade;
// Create plain TCP client
tcp_facade facade;
auto client = facade.create_client({
.host = "127.0.0.1",
.port = 8080,
.client_id = "my-client"
});
// Create secure TCP client
auto secure_client = facade.create_client({
.host = "example.com",
.port = 8443,
.use_ssl = true,
.client_id = "secure-client"
});
// Create TCP server
auto server = facade.create_server({
.port = 8080
});
// Create secure TCP server
auto secure_server = facade.create_server({
.port = 8443,
.use_ssl = true,
.cert_path = "/path/to/cert.pem",
.key_path = "/path/to/key.pem"
});
Simplified facade for creating TCP clients and servers.
Definition tcp_facade.h:95
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_client(const client_config &config) const -> Result< std::shared_ptr< interfaces::i_protocol_client > >
Creates a TCP client with the specified configuration.
See also
interfaces::i_protocol_client
interfaces::i_protocol_server
Examples
connection_pool.cpp, observer_pattern.cpp, tcp_client.cpp, and tcp_echo_server.cpp.

Definition at line 94 of file tcp_facade.h.

Member Function Documentation

◆ create_client()

auto kcenon::network::facade::tcp_facade::create_client ( const client_config & config) const -> Result<std::shared_ptr<interfaces::i_protocol_client>>
nodiscard

Creates a TCP client with the specified configuration.

Parameters
configClient configuration.
Returns
Shared pointer to IProtocolClient interface.
Result containing shared pointer to IProtocolClient, or error.

Behavior

  • Creates appropriate client type based on use_ssl flag
  • Plain TCP client if use_ssl=false
  • Secure TCP client if use_ssl=true
  • Client ID is auto-generated if not provided

Error Conditions

  • Returns error if host is empty
  • Returns error if port is 0 or > 65535
  • Returns error if use_ssl=true but SSL support not compiled in

Definition at line 90 of file tcp_facade.cpp.

92{
93 // Validate configuration
94 auto validation = validate_client_config(config);
95 if (validation.is_err())
96 {
98 validation.error().code, validation.error().message, "tcp_facade");
99 }
100
101 // Generate client ID if not provided
102 const std::string client_id = config.client_id.empty() ? generate_client_id() : config.client_id;
103
104 // SSL support not yet implemented
105 if (config.use_ssl)
106 {
108 -6, "tcp_facade: SSL/TLS support not yet implemented", "tcp_facade");
109 }
110
111 auto client = std::make_shared<core::messaging_client>(client_id);
112
113 // Start the client and connect
114 auto result = client->start(config.host, config.port);
115 if (result.is_err())
116 {
118 -600, "tcp_facade: failed to start client: " + result.error().message, "tcp_facade");
119 }
120
121 return ok(std::shared_ptr<interfaces::i_protocol_client>(client));
122}
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.
tracing_config config
Definition exporters.cpp:29
VoidResult ok()

References config, kcenon::network::error, kcenon::network::message, and kcenon::network::ok().

Here is the call graph for this function:

◆ create_connection_pool()

auto kcenon::network::facade::tcp_facade::create_connection_pool ( const pool_config & config) const -> Result<std::shared_ptr<core::connection_pool>>
nodiscard

Creates a TCP connection pool with the specified configuration.

Parameters
configPool configuration.
Returns
Shared pointer to connection_pool.

Behavior

  • Creates a connection pool that manages multiple reusable connections
  • Pool is not initialized; call initialize() before use
  • Thread-safe for concurrent acquire/release operations

Usage Example

tcp_facade facade;
auto pool = facade.create_connection_pool({
.host = "127.0.0.1",
.port = 5555,
.pool_size = 10
});
auto result = pool->initialize();
if (result.is_ok()) {
auto client = pool->acquire();
client->send_packet(data);
pool->release(std::move(client));
}
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.

Definition at line 151 of file tcp_facade.cpp.

153{
154 if (config.host.empty())
155 {
157 -1, "tcp_facade: host cannot be empty", "tcp_facade");
158 }
159
160 if (config.port == 0 || config.port > 65535)
161 {
163 -1, "tcp_facade: port must be between 1 and 65535", "tcp_facade");
164 }
165
166 if (config.pool_size == 0)
167 {
169 -1, "tcp_facade: pool_size must be greater than 0", "tcp_facade");
170 }
171
172 return ok(std::make_shared<core::connection_pool>(
173 config.host,
174 config.port,
175 config.pool_size,
176 config.acquire_timeout));
177}

References config, kcenon::network::error, and kcenon::network::ok().

Here is the call graph for this function:

◆ create_server()

auto kcenon::network::facade::tcp_facade::create_server ( const server_config & config) const -> Result<std::shared_ptr<interfaces::i_protocol_server>>
nodiscard

Creates a TCP server with the specified configuration.

Parameters
configServer configuration.
Returns
Shared pointer to IProtocolServer interface.
Result containing shared pointer to IProtocolServer, or error.

Behavior

  • Creates appropriate server type based on use_ssl flag
  • Plain TCP server if use_ssl=false
  • Secure TCP server if use_ssl=true
  • Server ID is auto-generated if not provided

Error Conditions

  • Returns error if port is 0 or > 65535
  • Returns error if use_ssl=true but cert_path or key_path not provided
  • Returns error if use_ssl=true but SSL support not compiled in

Definition at line 124 of file tcp_facade.cpp.

126{
127 // Validate configuration
128 auto validation = validate_server_config(config);
129 if (validation.is_err())
130 {
132 validation.error().code, validation.error().message, "tcp_facade");
133 }
134
135 // Generate server ID if not provided
136 const std::string server_id = config.server_id.empty() ? generate_server_id() : config.server_id;
137
138 // SSL support not yet implemented
139 if (config.use_ssl)
140 {
142 -6, "tcp_facade: SSL/TLS support not yet implemented", "tcp_facade");
143 }
144
145 // Create adapter wrapping messaging_server
146 auto server = std::make_shared<internal::adapters::tcp_server_adapter>(server_id);
147
148 return ok(std::shared_ptr<interfaces::i_protocol_server>(server));
149}
static auto validate_server_config(const server_config &config) -> VoidResult
Validates server configuration.
static auto generate_server_id() -> std::string
Generates a unique server ID.
@ server
Server-side handling of a request.

References config, kcenon::network::error, and kcenon::network::ok().

Here is the call graph for this function:

◆ generate_client_id()

auto kcenon::network::facade::tcp_facade::generate_client_id ( ) -> std::string
staticnodiscardprivate

Generates a unique client ID.

Definition at line 31 of file tcp_facade.cpp.

32{
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;
36 return oss.str();
37}

◆ generate_server_id()

auto kcenon::network::facade::tcp_facade::generate_server_id ( ) -> std::string
staticnodiscardprivate

Generates a unique server ID.

Definition at line 39 of file tcp_facade.cpp.

40{
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;
44 return oss.str();
45}

◆ validate_client_config()

auto kcenon::network::facade::tcp_facade::validate_client_config ( const client_config & config) -> VoidResult
staticprivate

Validates client configuration.

Definition at line 47 of file tcp_facade.cpp.

48{
49 if (config.host.empty())
50 {
51 return error_void(-1, "tcp_facade: host cannot be empty", "tcp_facade");
52 }
53
54 if (config.port == 0 || config.port > 65535)
55 {
56 return error_void(-1, "tcp_facade: port must be between 1 and 65535", "tcp_facade");
57 }
58
59 if (config.timeout.count() <= 0)
60 {
61 return error_void(-1, "tcp_facade: timeout must be positive", "tcp_facade");
62 }
63
64 return ok();
65}
VoidResult error_void(int code, const std::string &message, const std::string &source="network_system", const std::string &details="")

References config, kcenon::network::error_void(), and kcenon::network::ok().

Here is the call graph for this function:

◆ validate_server_config()

auto kcenon::network::facade::tcp_facade::validate_server_config ( const server_config & config) -> VoidResult
staticprivate

Validates server configuration.

Definition at line 67 of file tcp_facade.cpp.

68{
69 if (config.port == 0 || config.port > 65535)
70 {
71 return error_void(-1, "tcp_facade: port must be between 1 and 65535", "tcp_facade");
72 }
73
74 if (config.use_ssl)
75 {
76 if (!config.cert_path.has_value() || config.cert_path->empty())
77 {
78 return error_void(-1, "tcp_facade: cert_path required when use_ssl=true", "tcp_facade");
79 }
80
81 if (!config.key_path.has_value() || config.key_path->empty())
82 {
83 return error_void(-1, "tcp_facade: key_path required when use_ssl=true", "tcp_facade");
84 }
85 }
86
87 return ok();
88}

References config, kcenon::network::error_void(), and kcenon::network::ok().

Here is the call graph for this function:

The documentation for this class was generated from the following files: