OpenCBDC Transaction Processor
Loading...
Searching...
No Matches
util/rpc/server.hpp
Go to the documentation of this file.
1// Copyright (c) 2021 MIT Digital Currency Initiative,
2// Federal Reserve Bank of Boston
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#ifndef OPENCBDC_TX_SRC_RPC_SERVER_H_
7#define OPENCBDC_TX_SRC_RPC_SERVER_H_
8
9#include "header.hpp"
10#include "messages.hpp"
11#include "util/raft/util.hpp"
13
14#include <functional>
15#include <optional>
16
17namespace cbdc::rpc {
20 enum class handler_type {
22 async
23 };
24
33 template<typename Request,
34 typename Response,
35 typename InBuffer = buffer,
36 typename OutBuffer = buffer>
37 class server {
38 public:
39 server() = default;
40 server(server&&) noexcept = default;
41 auto operator=(server&&) noexcept -> server& = default;
42 server(const server&) = default;
43 auto operator=(const server&) -> server& = default;
44
45 virtual ~server() = default;
46
47 using request_type = request<Request>;
48 using response_type = response<Response>;
49
50 protected:
56 template<typename BufType = InBuffer>
57 auto deserialize_request(BufType& request_buf)
58 -> std::optional<request_type> {
59 return from_buffer<request_type>(request_buf);
60 }
61
68 template<typename R = Response>
69 auto serialize_response(header request_header,
70 std::optional<R> response_payload)
71 -> OutBuffer {
72 return make_buffer<response<R>, OutBuffer>(
73 {request_header, response_payload});
74 }
75
81 -> std::optional<cbdc::buffer> {
82 auto hdr = from_buffer<header>(request_buf);
83 if(!hdr.has_value()) {
84 return std::nullopt;
85 }
87 std::nullopt);
88 }
89
90 private:
91 struct null_response_type {};
92 };
93}
94
95#endif
Buffer to store and retrieve byte data.
Definition buffer.hpp:15
Generic RPC server.
auto make_failure_response(cbdc::buffer &request_buf) -> std::optional< cbdc::buffer >
Serialize a failure response buffer from the given request buffer.
auto serialize_response(header request_header, std::optional< R > response_payload) -> OutBuffer
Serialize a response into a buffer.
auto deserialize_request(BufType &request_buf) -> std::optional< request_type >
Deserializes a request from a buffer.
server(server &&) noexcept=default
handler_type
Type to distinguish between servers that implement synchronous versus asynchronous request handling.
auto from_buffer(nuraft::buffer &buf) -> std::optional< T >
Deserialize object of given type from a nuraft::buffer.
@ buffer
A singular RLP value (byte array)
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.
RPC request and response header.
Definition header.hpp:15
RPC request message.
RPC response message.