|
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>> |
static auto | request (agrpc::GrpcContext &grpc_context, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=CompletionToken{}) |
| Start a generic unary request.
|
|
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>> |
static auto | request (const Executor &executor, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=CompletionToken{}) |
| Start a generic unary request (executor overload)
|
|
template<class Executor>
class agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >
I/O object for client-side, generic, unary rpcs.
Example:
asio::awaitable<void> client_rpc_generic_unary(
agrpc::GrpcContext& grpc_context, grpc::GenericStub& stub)
{
grpc::ClientContext client_context;
client_context.set_deadline(std::chrono::system_clock::now() + std::chrono::seconds(5));
example::v1::Request request;
grpc::ByteBuffer request_buffer;
bool own_buffer;
grpc::GenericSerialize<grpc::ProtoBufferWriter, example::v1::Request>(request, &request_buffer, &own_buffer);
(void)own_buffer;
grpc::ByteBuffer response_buffer;
if (const grpc::Status status =
co_await RPC::request(grpc_context, "/example.v1.Example/Unary", stub, client_context, request_buffer,
response_buffer, asio::use_awaitable);
!status.ok())
{
std::cerr << "Rpc failed: " << status.error_message();
co_return;
}
example::v1::Response response;
if (const grpc::Status status =
grpc::GenericDeserialize<grpc::ProtoBufferReader, example::v1::Response>(&response_buffer, &response);
!status.ok())
{
std::cerr << "Rpc failed: unexpected response type";
co_return;
}
std::cout << "Response: " << response.integer();
}
Based on .proto
file:
syntax = "proto3";
package example.v1;
service Example {
rpc ServerStreaming(Request) returns (stream Response) {}
rpc ClientStreaming(stream Request) returns (Response) {}
rpc BidirectionalStreaming(stream Request) returns (stream Response) {}
rpc Unary(Request) returns (Response) {}
}
message Request {
int32 integer = 1;
}
message Response {
int32 integer = 1;
}
- Template Parameters
-
Executor | The executor type, must be capable of referring to a GrpcContext. |
Per-Operation Cancellation
Terminal and partial. Cancellation is performed by invoking grpc::ClientContext::TryCancel. Operations are also cancelled when the deadline of the rpc has been reached (see grpc::ClientContext::set_deadline).
- Since
- 2.6.0