36 class TcpAcceptorInterface;
48 std::unique_ptr<interface::TcpAcceptorInterface> acceptor,
49 boost::asio::io_context& ioc);
61 void start() override;
63 bool is_connected() const override;
65 void async_write_move(std::vector<uint8_t>&& data) override;
66 void async_write_shared(std::shared_ptr<const std::vector<uint8_t>> data) override;
67 void on_bytes(
OnBytes cb) override;
68 void on_state(
OnState cb) override;
72 bool broadcast(const std::
string& message);
73 bool send_to_client(
size_t client_id, const std::
string& message);
74 size_t get_client_count() const;
75 std::vector<
size_t> get_connected_clients() const;
87 void set_client_limit(
size_t max_clients);
88 void set_unlimited_clients();
93 explicit
TcpServer(const config::TcpServerConfig& cfg);
94 TcpServer(const config::TcpServerConfig& cfg, std::unique_ptr<interface::TcpAcceptorInterface> acceptor,
95 boost::asio::io_context& ioc);
98 const
Impl* get_impl()
const {
return impl_.get(); }
99 Impl* get_impl() {
return impl_.get(); }
100 std::unique_ptr<Impl> impl_;
std::function< void(memory::ConstByteSpan)> OnBytes
std::function< void(base::LinkState)> OnState
std::function< void(size_t)> OnBackpressure
Thread-safe TCP Server implementation.
TcpServer(TcpServer &&) noexcept
std::function< void(size_t client_id, const std::string &data)> MultiClientDataHandler
static std::shared_ptr< TcpServer > create(const config::TcpServerConfig &cfg, std::unique_ptr< interface::TcpAcceptorInterface > acceptor, boost::asio::io_context &ioc)
std::function< void(size_t client_id)> MultiClientDisconnectHandler
std::function< void(size_t client_id, const std::string &client_info)> MultiClientConnectHandler
SafeSpan< const uint8_t > ConstByteSpan