Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
quic_server_adapter.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6
8
9#include <atomic>
10#include <memory>
11#include <mutex>
12#include <optional>
13#include <string>
14#include <unordered_map>
15#include <vector>
16
17namespace kcenon::network::core {
18 class messaging_quic_server;
19}
20
22 class quic_session;
23}
24
26
35public:
42 std::string_view session_id,
43 std::shared_ptr<session::quic_session> session);
44
45 // i_session interface
46 [[nodiscard]] auto id() const -> std::string_view override;
47 [[nodiscard]] auto is_connected() const -> bool override;
48 [[nodiscard]] auto send(std::vector<uint8_t>&& data) -> VoidResult override;
49 auto close() -> void override;
50
51private:
52 std::string session_id_;
53 std::shared_ptr<session::quic_session> session_;
54 std::atomic<bool> is_connected_{true};
55};
56
88public:
93 explicit quic_server_adapter(std::string_view server_id);
94
98 ~quic_server_adapter() override;
99
100 // Non-copyable, non-movable
105
106 // =========================================================================
107 // QUIC-specific Configuration (REQUIRED before start)
108 // =========================================================================
109
116 auto set_cert_path(std::string_view path) -> void;
117
124 auto set_key_path(std::string_view path) -> void;
125
130 auto set_alpn_protocols(const std::vector<std::string>& protocols) -> void;
131
136 auto set_ca_cert_path(std::string_view path) -> void;
137
142 auto set_require_client_cert(bool require) -> void;
143
148 auto set_max_idle_timeout(uint64_t timeout_ms) -> void;
149
154 auto set_max_connections(size_t max) -> void;
155
156 // =========================================================================
157 // i_network_component interface implementation
158 // =========================================================================
159
160 [[nodiscard]] auto is_running() const -> bool override;
161 auto wait_for_stop() -> void override;
162
163 // =========================================================================
164 // i_protocol_server interface implementation
165 // =========================================================================
166
167 [[nodiscard]] auto start(uint16_t port) -> VoidResult override;
168 [[nodiscard]] auto stop() -> VoidResult override;
169 [[nodiscard]] auto connection_count() const -> size_t override;
170
171 auto set_connection_callback(connection_callback_t callback) -> void override;
172 auto set_disconnection_callback(disconnection_callback_t callback) -> void override;
173 auto set_receive_callback(receive_callback_t callback) -> void override;
174 auto set_error_callback(error_callback_t callback) -> void override;
175
176private:
180 auto setup_internal_callbacks() -> void;
181
185 auto get_or_create_wrapper(std::shared_ptr<session::quic_session> session)
186 -> std::shared_ptr<quic_session_wrapper>;
187
191 auto remove_wrapper(const std::string& session_id) -> void;
192
193 std::string server_id_;
194 std::shared_ptr<core::messaging_quic_server> server_;
195 std::atomic<bool> is_running_{false};
196
197 // QUIC-specific configuration
198 std::string cert_path_;
199 std::string key_path_;
200 std::vector<std::string> alpn_protocols_;
201 std::optional<std::string> ca_cert_path_;
203 uint64_t max_idle_timeout_ms_{30000};
204 size_t max_connections_{10000};
205
206 // Session management
207 mutable std::mutex sessions_mutex_;
208 std::unordered_map<std::string, std::shared_ptr<quic_session_wrapper>> sessions_;
209
210 // Callbacks
211 mutable std::mutex callbacks_mutex_;
216};
217
218} // namespace kcenon::network::internal::adapters
Unified interface for all protocol server implementations.
std::function< void(std::string_view)> disconnection_callback_t
Callback type for disconnections (session_id)
std::function< void(std::string_view, const std::vector< uint8_t > &)> receive_callback_t
Callback type for received data (session_id, data)
std::function< void(std::string_view, std::error_code)> error_callback_t
Callback type for errors (session_id, error)
std::function< void(std::shared_ptr< i_session >)> connection_callback_t
Callback type for new connections.
Interface for a single client session on the server side.
Definition i_session.h:49
Adapter that wraps messaging_quic_server to implement i_protocol_server.
auto start(uint16_t port) -> VoidResult override
Starts the server and begins listening for connections.
std::unordered_map< std::string, std::shared_ptr< quic_session_wrapper > > sessions_
auto set_error_callback(error_callback_t callback) -> void override
Sets the callback for errors.
~quic_server_adapter() override
Destructor ensures proper cleanup.
auto set_ca_cert_path(std::string_view path) -> void
Sets CA certificate path for client verification.
auto set_key_path(std::string_view path) -> void
Sets the server private key path.
std::shared_ptr< core::messaging_quic_server > server_
auto is_running() const -> bool override
Checks if the component is currently running.
quic_server_adapter & operator=(quic_server_adapter &&)=delete
quic_server_adapter & operator=(const quic_server_adapter &)=delete
auto wait_for_stop() -> void override
Blocks until the component has stopped.
auto remove_wrapper(const std::string &session_id) -> void
Removes a session wrapper.
auto set_disconnection_callback(disconnection_callback_t callback) -> void override
Sets the callback for disconnections.
auto set_require_client_cert(bool require) -> void
Sets whether to require client certificate (mutual TLS)
auto stop() -> VoidResult override
Stops the server and closes all connections.
auto setup_internal_callbacks() -> void
Sets up internal callbacks to bridge QUIC callbacks to i_protocol_server callbacks.
auto set_connection_callback(connection_callback_t callback) -> void override
Sets the callback for new connections.
auto set_alpn_protocols(const std::vector< std::string > &protocols) -> void
Sets the ALPN protocols for negotiation.
quic_server_adapter(const quic_server_adapter &)=delete
auto get_or_create_wrapper(std::shared_ptr< session::quic_session > session) -> std::shared_ptr< quic_session_wrapper >
Creates or retrieves a session wrapper for a QUIC session.
quic_server_adapter(std::string_view server_id)
Constructs an adapter with a unique server ID.
auto set_max_idle_timeout(uint64_t timeout_ms) -> void
Sets max idle timeout in milliseconds.
auto set_receive_callback(receive_callback_t callback) -> void override
Sets the callback for received data.
auto set_cert_path(std::string_view path) -> void
Sets the server certificate path.
auto connection_count() const -> size_t override
Gets the number of active client connections.
auto set_max_connections(size_t max) -> void
Sets maximum number of concurrent connections.
Wrapper for QUIC session to implement i_session interface.
auto is_connected() const -> bool override
Checks if the session is currently connected.
quic_session_wrapper(std::string_view session_id, std::shared_ptr< session::quic_session > session)
Constructs a session wrapper.
auto id() const -> std::string_view override
Gets the unique identifier for this session.
Protocol-specific server interface extending i_server.