JSON-RPC 2.0
JSON-RPC 2.0 Modern C++ Library
Loading...
Searching...
No Matches
transport.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <expected>
4#include <string>
5
6#include <asio.hpp>
7#include <spdlog/spdlog.h>
8
10
11namespace jsonrpc::transport {
12
13class Transport {
14 public:
15 explicit Transport(
16 asio::any_io_executor executor,
17 std::shared_ptr<spdlog::logger> logger = nullptr)
18 : logger_(logger ? logger : spdlog::default_logger()),
19 executor_(std::move(executor)),
20 strand_(asio::make_strand(executor_)) {
21 }
22
23 Transport(const Transport &) = delete;
24 Transport(Transport &&) = delete;
25
26 auto operator=(const Transport &) -> Transport & = delete;
27 auto operator=(Transport &&) -> Transport & = delete;
28
29 virtual ~Transport() = default;
30
31 virtual auto Start()
32 -> asio::awaitable<std::expected<void, error::RpcError>> = 0;
33
34 virtual auto Close()
35 -> asio::awaitable<std::expected<void, error::RpcError>> = 0;
36
37 virtual auto CloseNow() -> void = 0;
38
39 virtual auto SendMessage(std::string message)
40 -> asio::awaitable<std::expected<void, error::RpcError>> = 0;
41
42 virtual auto ReceiveMessage()
43 -> asio::awaitable<std::expected<std::string, error::RpcError>> = 0;
44
45 [[nodiscard]] auto GetExecutor() const -> asio::any_io_executor {
46 return executor_;
47 }
48
49 [[nodiscard]] auto GetStrand() -> asio::strand<asio::any_io_executor> & {
50 return strand_;
51 }
52
53 protected:
54 auto Logger() -> std::shared_ptr<spdlog::logger> {
55 return logger_;
56 }
57
58 private:
59 std::shared_ptr<spdlog::logger> logger_;
60 asio::any_io_executor executor_;
61 asio::strand<asio::any_io_executor> strand_;
62};
63
64} // namespace jsonrpc::transport
virtual auto Start() -> asio::awaitable< std::expected< void, error::RpcError > >=0
virtual ~Transport()=default
auto operator=(const Transport &) -> Transport &=delete
virtual auto ReceiveMessage() -> asio::awaitable< std::expected< std::string, error::RpcError > >=0
Transport(asio::any_io_executor executor, std::shared_ptr< spdlog::logger > logger=nullptr)
Definition transport.hpp:15
auto Logger() -> std::shared_ptr< spdlog::logger >
Definition transport.hpp:54
Transport(const Transport &)=delete
Transport(Transport &&)=delete
virtual auto CloseNow() -> void=0
auto operator=(Transport &&) -> Transport &=delete
auto GetExecutor() const -> asio::any_io_executor
Definition transport.hpp:45
virtual auto SendMessage(std::string message) -> asio::awaitable< std::expected< void, error::RpcError > >=0
virtual auto Close() -> asio::awaitable< std::expected< void, error::RpcError > >=0
auto GetStrand() -> asio::strand< asio::any_io_executor > &
Definition transport.hpp:49