OpenCBDC Transaction Processor
Loading...
Searching...
No Matches
cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer > Class Template Reference

Generic asynchronous RPC server. More...

#include <async_server.hpp>

Inheritance diagram for cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >:
Collaboration diagram for cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >:

Public Types

using response_callback_type = std::function<void(std::optional<Response>)>
 Response callback function type.
 
using callback_type = std::function<bool(Request, response_callback_type)>
 Request handler callback function.
 
- Public Types inherited from cbdc::rpc::server< Request, Response, buffer, buffer >
using request_type
 
using response_type
 

Public Member Functions

 async_server ()=default
 
 async_server (async_server &&) noexcept=default
 
auto operator= (async_server &&) noexcept -> async_server &=default
 
 async_server (const async_server &)=default
 
auto operator= (const async_server &) -> async_server &=default
 
 ~async_server () override=default
 
void register_handler_callback (callback_type callback)
 Register a request handler callback function for processing requests, generating responses, and passing those responses to a response callback.
 
- Public Member Functions inherited from cbdc::rpc::server< Request, Response, buffer, buffer >
 server ()=default
 
 server (server &&) noexcept=default
 
 server (const server &)=default
 
auto operator= (server &&) noexcept -> server &=default
 
auto operator= (const server &) -> server &=default
 
virtual ~server ()=default
 

Static Public Attributes

static constexpr handler_type handler = handler_type::async
 

Protected Member Functions

auto async_call (InBuffer request_buf, std::function< void(cbdc::buffer)> response_callback) -> std::optional< OutBuffer >
 Deserializes an RPC request, then calls the registered request handler function.
 
- Protected Member Functions inherited from cbdc::rpc::server< Request, Response, buffer, buffer >
auto deserialize_request (BufType &request_buf) -> std::optional< request_type >
 Deserializes a request from a buffer.
 
auto serialize_response (header request_header, std::optional< R > response_payload) -> buffer
 Serialize a response into a buffer.
 
auto make_failure_response (cbdc::buffer &request_buf) -> std::optional< cbdc::buffer >
 Serialize a failure response buffer from the given request buffer.
 

Detailed Description

template<typename Request, typename Response, typename InBuffer = buffer, typename OutBuffer = buffer>
class cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >

Generic asynchronous RPC server.

Handles serialization of requests and responses. Dispatches incoming requests to a handler callback for processing and returns the response using a response callback. Subclass to define specific remote communication logic.

Template Parameters
Requesttype for requests.
Responsetype for responses.
InBuffertype of buffer for serialized requests, defaults to cbdc::buffer
OutBuffertype of buffer for serialized responses, defaults to cbdc::buffer

Definition at line 27 of file async_server.hpp.

Member Typedef Documentation

◆ callback_type

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
using cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::callback_type = std::function<bool(Request, response_callback_type)>

Request handler callback function.

Defines a function that processes an inbound request, attempts to generate a response, and passes that response to a callback for transmission. Should return false if processing the request failed and the server should return a general error.

Definition at line 50 of file async_server.hpp.

◆ response_callback_type

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
using cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::response_callback_type = std::function<void(std::optional<Response>)>

Response callback function type.

Used to return responses generated by the request handler function before serialization.

Definition at line 43 of file async_server.hpp.

Constructor & Destructor Documentation

◆ async_server() [1/3]

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::async_server ( )
default

◆ async_server() [2/3]

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::async_server ( async_server< Request, Response, InBuffer, OutBuffer > && )
defaultnoexcept

◆ async_server() [3/3]

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::async_server ( const async_server< Request, Response, InBuffer, OutBuffer > & )
default

◆ ~async_server()

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::~async_server ( )
overridedefault

Member Function Documentation

◆ async_call()

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
auto cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::async_call ( InBuffer request_buf,
std::function< void(cbdc::buffer)> response_callback ) -> std::optional<OutBuffer>
inlineprotected

Deserializes an RPC request, then calls the registered request handler function.

Provides the request handler function with a callback which serializes the response. That callback passes the serialized data buffer to the callback provided here for transmission.

Parameters
request_bufbuffer holding an RPC request.
response_callbackcallback which transmits the serialized response buffer.
Returns
std::nullopt if the request handler reported that the request started successfully. Also returns std::nullopt if deserializing the request failed. Returns a serialized error response if the request handler returns a failure.

Definition at line 74 of file async_server.hpp.

◆ operator=() [1/2]

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
auto cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::operator= ( async_server< Request, Response, InBuffer, OutBuffer > && ) -> async_server &=default
defaultnoexcept

◆ operator=() [2/2]

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
auto cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::operator= ( const async_server< Request, Response, InBuffer, OutBuffer > & ) -> async_server &=default
default

◆ register_handler_callback()

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
void cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::register_handler_callback ( callback_type callback)
inline

Register a request handler callback function for processing requests, generating responses, and passing those responses to a response callback.

Parameters
callbackfunction to register to process client requests and call the response callback with the response.

Definition at line 57 of file async_server.hpp.

Referenced by cbdc::raft::rpc::server::register_raft_node().

Field Documentation

◆ handler

template<typename Request , typename Response , typename InBuffer = buffer, typename OutBuffer = buffer>
handler_type cbdc::rpc::async_server< Request, Response, InBuffer, OutBuffer >::handler = handler_type::async
staticconstexpr

Definition at line 38 of file async_server.hpp.


The documentation for this class was generated from the following file: