17 asio::any_io_executor executor, std::string address, uint16_t port,
18 bool is_server, std::shared_ptr<spdlog::logger> logger =
nullptr);
29 -> asio::awaitable<std::expected<void, error::RpcError>>
override;
32 -> asio::awaitable<std::expected<void, error::RpcError>>
override;
37 -> asio::awaitable<std::expected<void, error::RpcError>>
override;
40 -> asio::awaitable<std::expected<std::string, error::RpcError>>
override;
43 auto GetSocket() -> asio::ip::tcp::socket&;
45 auto Connect() -> asio::awaitable<std::expected<void, error::RpcError>>;
47 auto BindAndListen() -> asio::awaitable<std::expected<void, error::RpcError>>;
50 auto SendMessageLoop() -> asio::awaitable<void>;
52 asio::ip::tcp::socket socket_;
53 std::unique_ptr<asio::ip::tcp::acceptor> acceptor_;
57 std::atomic<bool> is_closed_{
false};
58 std::atomic<bool> is_started_{
false};
59 std::atomic<bool> is_connected_{
false};
62 std::deque<std::string> send_queue_;
63 std::atomic<bool> sending_{
false};
66 std::array<char, 1024> read_buffer_;
67 std::string message_buffer_;