asio-grpc v3.4.3
Asynchronous gRPC with Asio/unified executors
Loading...
Searching...
No Matches
agrpc::BasicClientReadReactor< Response, Executor > Class Template Reference

I/O object for client-side, server-streaming rpcs. More...

#include <agrpc/client_callback.hpp>

+ Inheritance diagram for agrpc::BasicClientReadReactor< Response, Executor >:
+ Collaboration diagram for agrpc::BasicClientReadReactor< Response, Executor >:

Classes

struct  rebind_executor
 Rebind the BasicClientReadReactor to another executor. More...
 

Public Types

using executor_type = Executor
 The executor type.
 

Public Member Functions

template<class StubAsync , class Request >
void start (detail::AsyncServerStreamingReactorFn< StubAsync, Request, Response > fn, StubAsync *stub, const Request &request)
 Start a codegen-ed rpc.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto wait_for_initial_metadata (CompletionToken &&token=CompletionToken{})
 Wait for initial metadata.
 
void initiate_read (Response &response)
 Read message.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto wait_for_read (CompletionToken &&token=CompletionToken{})
 Wait for write.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto wait_for_finish (CompletionToken &&token=CompletionToken{})
 Wait for finish.
 
const Executor & get_executor () const noexcept
 Get the executor.
 
grpc::ClientContext & context () noexcept
 Get the underlying grpc::ClientContext
 
const grpc::ClientContext & context () const noexcept
 Get the underlying grpc::ClientContext (const overload)
 

Detailed Description

template<class Response, class Executor>
class agrpc::BasicClientReadReactor< Response, Executor >

I/O object for client-side, server-streaming rpcs.

Create an object of this type using agrpc::make_reactor/agrpc::allocate_reactor.

Example:

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
ExecutorThe executor type.

Per-Operation Cancellation

All. Cancellation will merely interrupt the act of waiting and does not cancel the underlying rpc.

Since
3.5.0

Member Function Documentation

◆ start()

template<class Response , class Executor >
template<class StubAsync , class Request >
void agrpc::BasicClientReadReactor< Response, Executor >::start ( detail::AsyncServerStreamingReactorFn< StubAsync, Request, Response > fn,
StubAsync * stub,
const Request & request )
inline

Start a codegen-ed rpc.

The response object must remain valid until the rpc is finished. May only be called once.

  • fn Pointer to the protoc generated Stub::async::Method.

◆ wait_for_initial_metadata()

template<class Response , class Executor >
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto agrpc::BasicClientReadReactor< Response, Executor >::wait_for_initial_metadata ( CompletionToken && token = CompletionToken{})
inline

Wait for initial metadata.

Only one wait for initial metadata may be outstanding at any time.

Completion signature is void(error_code, bool). If the bool is false then the rpc failed (cancelled, disconnected, deadline reached, ...).

◆ initiate_read()

template<class Response , class Executor >
void agrpc::BasicClientReadReactor< Response, Executor >::initiate_read ( Response & response)
inline

Read message.

Initiate the read of a message. The argument must remain valid until the write completes (wait_for_read).

◆ wait_for_read()

template<class Response , class Executor >
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto agrpc::BasicClientReadReactor< Response, Executor >::wait_for_read ( CompletionToken && token = CompletionToken{})
inline

Wait for write.

Waits for the completion of a read. Only one wait for write may be outstanding at any time.

Completion signature is void(error_code, bool). If the bool is false then the rpc failed (cancelled, disconnected, deadline reached, ...).

◆ wait_for_finish()

template<class Response , class Executor >
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto agrpc::BasicClientReadReactor< Response, Executor >::wait_for_finish ( CompletionToken && token = CompletionToken{})
inline

Wait for finish.

Wait until all operations associated with this rpc have completed. No more reads may be initiated on this rpc after this function has been called. Only one wait for finish may be outstanding at any time.

Completion signature is void(error_code, grpc::Status). Once this operation completes the response passed to start() will have been be populated if grpc::Status::ok() is true.

◆ get_executor()

template<class Executor >
const Executor & agrpc::detail::ReactorExecutorBase< Executor >::get_executor ( ) const
inlinenodiscardnoexceptinherited

Get the executor.

Thread-safe