31 use_independent_context_(false),
32 enable_port_retry_(false),
34 port_retry_interval_ms_(1000),
37 client_limit_set_(false) {
45 std::unique_ptr<wrapper::TcpServer> server;
46 if (use_independent_context_) {
47 server = std::make_unique<wrapper::TcpServer>(port_, std::make_shared<boost::asio::io_context>());
48 server->set_manage_external_context(
true);
50 server = std::make_unique<wrapper::TcpServer>(port_);
53 if (on_data_) server->on_data(on_data_);
54 if (on_connect_) server->on_client_connect(on_connect_);
55 if (on_disconnect_) server->on_client_disconnect(on_disconnect_);
56 if (on_error_) server->on_error(on_error_);
58 if (enable_port_retry_) {
59 server->enable_port_retry(
true, max_port_retries_, port_retry_interval_ms_);
62 if (idle_timeout_ms_ > 0) {
63 server->idle_timeout(idle_timeout_ms_);
66 if (client_limit_set_) {
67 if (max_clients_ == 0)
68 server->set_unlimited_clients();
70 server->set_client_limit(max_clients_);
74 server->auto_manage(
true);
86 on_data_ = std::move(handler);
91 on_connect_ = std::move(handler);
96 on_disconnect_ = std::move(handler);
101 on_error_ = std::move(handler);
106 use_independent_context_ = use_independent;
111 enable_port_retry_ = enable;
112 max_port_retries_ = max_retries;
113 port_retry_interval_ms_ = retry_interval_ms;
118 idle_timeout_ms_ = timeout_ms;
123 if (max == 0)
throw std::invalid_argument(
"Client limit cannot be 0");
124 if (max == 1)
throw std::invalid_argument(
"Use single_client() for 1 client limit");
126 client_limit_set_ =
true;
132 client_limit_set_ =
true;
140 client_limit_set_ =
true;
static void ensure_io_context_running()
Automatically start IoContextManager if not running.
Modernized Builder for TcpServer.
TcpServerBuilder & max_clients(size_t max)
Set maximum number of clients.
TcpServerBuilder & enable_port_retry(bool enable=true, int max_retries=3, int retry_interval_ms=1000)
Enable port binding retry on failure.
TcpServerBuilder & on_disconnect(std::function< void(const wrapper::ConnectionContext &)> handler) override
Set disconnection handler callback.
TcpServerBuilder & idle_timeout(int timeout_ms)
Set idle connection timeout.
TcpServerBuilder & multi_client(size_t max)
Configure server for multi-client mode with limit.
TcpServerBuilder(uint16_t port)
TcpServerBuilder & on_connect(std::function< void(const wrapper::ConnectionContext &)> handler) override
Set connection handler callback.
TcpServerBuilder & on_data(std::function< void(const wrapper::MessageContext &)> handler) override
Set data handler callback.
TcpServerBuilder & single_client()
Configure server for single client mode.
TcpServerBuilder & unlimited_clients()
Configure server for unlimited multi-client mode.
std::unique_ptr< wrapper::TcpServer > build() override
Build and return the configured TcpServer.
TcpServerBuilder & auto_manage(bool auto_manage=true) override
Enable auto-manage functionality.
TcpServerBuilder & use_independent_context(bool use_independent=true)
Use independent IoContext for this server.
TcpServerBuilder & on_error(std::function< void(const wrapper::ErrorContext &)> handler) override
Set error handler callback.
Context for connection/disconnection events.
Context for error events.
Context for data/message related events.
diagnostics::BuilderException BuilderException