42 = std::function<
void(std::optional<Response>)>;
53 [[nodiscard]] auto
call(Request request_payload,
54 std::chrono::milliseconds timeout
55 = std::chrono::milliseconds::zero())
56 -> std::optional<Response> {
57 auto [request_buf, request_id]
58 = make_request(std::move(request_payload));
59 auto resp = call_raw(std::move(request_buf), request_id, timeout);
60 if(!resp.has_value()) {
63 assert(resp.value().m_header.m_request_id == request_id);
64 return resp.value().m_payload;
74 auto call(Request request_payload,
76 auto [request_buf, request_id]
77 = make_request(std::move(request_payload));
78 auto ret = call_raw(std::move(request_buf),
80 [resp_cb = std::move(response_callback)](
81 std::optional<response_type> resp) {
82 if(!resp.has_value()) {
85 resp_cb(std::move(resp.value().m_payload));
95 -> std::optional<response_type> {
101 = std::function<void(std::optional<response_type>)>;
104 std::atomic<uint64_t> m_current_request_id{};
117 std::chrono::milliseconds timeout)
118 -> std::optional<response_type> = 0;
125 auto make_request(Request request_payload)
126 -> std::pair<cbdc::buffer, request_id_type> {
127 auto request_id = m_current_request_id++;
128 auto req =
request_type{{request_id}, std::move(request_payload)};
auto call(Request request_payload, std::chrono::milliseconds timeout=std::chrono::milliseconds::zero()) -> std::optional< Response >
Issues the given request with an optional timeout, then waits for and returns the response.
auto make_buffer(const T &obj) -> std::enable_if_t< std::is_same_v< B, nuraft::ptr< nuraft::buffer > >, nuraft::ptr< nuraft::buffer > >
Serialize object into nuraft::buffer using a cbdc::nuraft_serializer.