42 listener->set_callbacks({
43 .on_accept = [](std::string_view conn_id) {
44 std::cout <<
"[Server] New connection: " << conn_id <<
"\n";
46 .on_data = [](std::string_view conn_id, std::span<const std::byte> data) {
47 std::cout <<
"[Server] Received " << data.size()
48 <<
" bytes from " << conn_id <<
"\n";
52 .on_disconnect = [](std::string_view conn_id) {
53 std::cout <<
"[Server] Disconnected: " << conn_id <<
"\n";
55 .on_error = [](std::string_view conn_id, std::error_code ec) {
56 std::cerr <<
"[Server] Error on " << conn_id
57 <<
": " << ec.message() <<
"\n";
62 if (
auto result = listener->start(8080); !result) {
63 std::cerr <<
"[Server] Failed to start\n";
67 std::cout <<
"[Server] Listening on port 8080\n";
74 std::cout <<
"\n=== TCP Server (Unified API) ===\n";
85 std::cout <<
"\n=== UDP Server (Unified API) ===\n";
96 std::cout <<
"\n=== WebSocket Server (Unified API) ===\n";
111 void start(std::unique_ptr<unified::i_listener> listener) {
116 [
this](std::unique_ptr<unified::i_connection> conn) {
132 auto endpoint = conn->remote_endpoint();
133 std::string
id = std::string(endpoint.host) +
":" +
134 std::to_string(endpoint.port);
136 std::cout <<
"Managing connection: " <<
id <<
"\n";
139 conn->set_callbacks({
140 .on_data = [id](std::span<const std::byte> data) {
141 std::cout <<
"Data from " <<
id <<
"\n";
143 .on_disconnected = [
this, id]() {
145 std::cout <<
"Removed connection: " <<
id <<
"\n";
154 std::map<std::string, std::unique_ptr<unified::i_connection>>
connections_;
161 const std::string& protocol,
164 if (protocol ==
"tcp") {
166 }
else if (protocol ==
"udp") {
168 }
else if (protocol ==
"websocket") {
172 throw std::invalid_argument(
"Unknown protocol: " + protocol);
176 std::cout <<
"=== Unified Server Example ===\n";
177 std::cout <<
"This file demonstrates the NEW unified API for servers.\n\n";
179 std::cout <<
"Benefits of unified server API:\n";
180 std::cout <<
" 1. Single i_listener interface for all protocols\n";
181 std::cout <<
" 2. Accepted connections are i_connection (same as clients)\n";
182 std::cout <<
" 3. Protocol selection via factory functions\n";
183 std::cout <<
" 4. Cleaner callback setup with aggregate initialization\n";
184 std::cout <<
" 5. Easy connection management with ownership\n";
186 std::cout <<
"\nCode patterns shown:\n";
187 std::cout <<
" - protocol::tcp::listen(port)\n";
188 std::cout <<
" - protocol::udp::listen(port)\n";
189 std::cout <<
" - protocol::websocket::listen(port, path)\n";
190 std::cout <<
" - listener->set_callbacks({...})\n";
191 std::cout <<
" - listener->set_accept_callback(callback)\n";
192 std::cout <<
" - listener->start(port)\n";
193 std::cout <<
" - listener->broadcast(data)\n";
Advanced example: Managing accepted connections.
void start(std::unique_ptr< unified::i_listener > listener)
void handle_new_connection(std::unique_ptr< unified::i_connection > conn)
void broadcast(std::span< const std::byte > data)
std::map< std::string, std::unique_ptr< unified::i_connection > > connections_
std::unique_ptr< unified::i_listener > listener_
virtual auto set_accept_callback(accept_callback_t callback) -> void=0
Sets the accept callback for new connections.
virtual auto start(const endpoint_info &bind_address) -> VoidResult=0
Starts listening for incoming connections.
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.
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.
auto listen(const unified::endpoint_info &bind_address, std::string_view path="/", std::string_view id="") -> std::unique_ptr< unified::i_listener >
Creates and starts a WebSocket listener in one call.
Main namespace for all Network System components.
Convenience header for all protocol factory functions.
Convenience header for the unified network interface API.
std::unique_ptr< unified::i_listener > create_listener(const std::string &protocol, uint16_t port)
Example of protocol selection at runtime.
void setup_server(std::unique_ptr< unified::i_listener > listener)
Protocol-agnostic server setup.
void udp_server_example()
UDP server example using unified API.
void tcp_server_example()
TCP server example using unified API.
void websocket_server_example()
WebSocket server example using unified API.