20 asio::any_io_executor executor, std::string socket_path,
21 bool is_server =
false, std::shared_ptr<spdlog::logger> logger =
nullptr);
32 -> asio::awaitable<std::expected<void, error::RpcError>>
override;
35 -> asio::awaitable<std::expected<void, error::RpcError>>
override;
40 -> asio::awaitable<std::expected<void, error::RpcError>>
override;
42 auto Flush() -> asio::awaitable<std::expected<void, error::RpcError>>;
45 -> asio::awaitable<std::expected<std::string, error::RpcError>>
override;
48 auto GetSocket() -> asio::local::stream_protocol::socket&;
52 auto Connect() -> asio::awaitable<std::expected<void, error::RpcError>>;
54 auto BindAndListen() -> asio::awaitable<std::expected<void, error::RpcError>>;
58 auto SendMessageLoop() -> asio::awaitable<void>;
60 asio::local::stream_protocol::socket socket_;
61 std::unique_ptr<asio::local::stream_protocol::acceptor> acceptor_;
62 std::string socket_path_;
64 std::atomic<bool> is_closed_{
false};
65 std::atomic<bool> is_started_{
false};
66 std::atomic<bool> is_connected_{
false};
69 std::deque<std::string> send_queue_;
70 std::atomic<bool> sending_{
false};
73 std::array<char, 1024> read_buffer_;
74 std::string message_buffer_;