5#include "roo_collections.h"
6#include "roo_collections/flat_small_hash_map.h"
7#include "roo_threads.h"
8#include "roo_threads/latch.h"
9#include "roo_threads/mutex.h"
20 const roo::byte* data,
size_t data_size,
RpcStatus status)>;
28 const roo::byte* payload,
29 size_t payload_size, uint32_t timeout_ms,
40 explicit Dispatcher(
RpcClient& rpc_client) : rpc_client_(rpc_client) {}
43 size_t len)
override {
44 rpc_client_.handleResponse(connection_id, data, len);
48 rpc_client_.connectionReset(connection_id);
52 RpcClient& rpc_client_;
56 roo_collections::FlatSmallHashMap<RpcStreamId, UnaryCompletionCb>;
61 const roo::byte* data,
size_t len);
69 Messaging& messaging_;
70 Dispatcher dispatcher_;
75 uint32_t next_stream_id_ = 1;
77 OutgoingCalls outgoing_calls_;
81template <
typename Request,
typename Response,
82 typename RequestSerializer = Serializer<Request>,
83 typename ResponseDeserializer = Deserializer<Response>>
103 ResponseDeserializer deserializer;
104 if (resp_status == kOk) {
105 resp_status = deserializer.deserialize((const roo_io::byte*)data,
127 return client_.sendUnaryRpc(
131 ResponseDeserializer deserializer;
133 if (resp_status == kOk) {
135 deserializer.deserialize((const roo_io::byte*)data, len, resp);
143 RpcFunctionId function_id_;
Abstract interface for message exchange over a reliable channel.
RpcStatus sendUnaryRpcWithTimeout(RpcFunctionId function_id, const roo::byte *payload, size_t payload_size, uint32_t timeout_ms, UnaryCompletionCb cb)
std::function< void(const roo::byte *data, size_t data_size, RpcStatus status)> UnaryCompletionCb
RpcStatus sendUnaryRpc(RpcFunctionId function_id, const roo::byte *payload, size_t payload_size, UnaryCompletionCb cb)
RpcStatus callAsync(const Request &request, std::function< void(RpcStatus, Response)> completion_cb)
UnaryStub(RpcClient &client, RpcFunctionId function_id)
RpcStatus call(const Request &request, Response &response)