asio-grpc v3.1.0
Asynchronous gRPC with Asio/unified executors
|
I/O object for server-side, server-streaming rpcs. More...
#include <agrpc/server_rpc.hpp>
Classes | |
struct | rebind_executor |
Rebind the ServerRPC to another executor. More... | |
Public Types | |
using | Request = RequestT |
The response message type. | |
using | Response = ResponseT |
The request message type. | |
using | Traits = TraitsT |
The traits type. | |
using | Ptr = agrpc::ServerRPCPtr< ServerRPC > |
ServerRPCPtr specialized on this type. | |
using | executor_type = Executor |
The executor type. | |
Public Member Functions | |
ServerRPC ()=delete | |
Deleted default constructor. | |
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>> | |
auto | write (const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) |
Send a message to the client. More... | |
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>> | |
auto | write (const ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) |
Send a message to the client (default WriteOptions) | |
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>> | |
auto | write_and_finish (const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) |
Coalesce write and finish of this rpc. More... | |
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>> | |
auto | write_and_finish (const ResponseT &response, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) |
Coalesce write and finish of this rpc (default WriteOptions) | |
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>> | |
auto | finish (const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) |
Finish this rpc. More... | |
auto | send_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) |
Send initial metadata. More... | |
bool | is_done () const noexcept |
Is this rpc done? More... | |
auto | wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) |
Wait for done. More... | |
const executor_type & | get_executor () const noexcept |
Get the executor. More... | |
const executor_type & | get_scheduler () const noexcept |
Get the scheduler. More... | |
auto & | context () |
Get the underlying ServerContext | |
const auto & | context () const |
Get the underlying ServerContext (const overload) | |
void | cancel () noexcept |
Cancel this RPC. More... | |
Static Public Member Functions | |
static constexpr std::string_view | service_name () noexcept |
Name of the gRPC service. More... | |
static constexpr std::string_view | method_name () noexcept |
Name of the gRPC method. More... | |
Static Public Attributes | |
static constexpr agrpc::ServerRPCType | TYPE = agrpc::ServerRPCType::SERVER_STREAMING |
The rpc type. | |
I/O object for server-side, server-streaming rpcs.
Use one of the agrpc::register_
functions to set up request handling.
Example:
Based on .proto
file:
RequestUnary | A pointer to the generated gRPC method. |
Traits | A type used to customize this rpc. See agrpc::DefaultServerRPCTraits . |
Executor | The executor type, must be capable of referring to a agrpc::GrpcContext . |
Per-Operation Cancellation
(except wait_for_done
) Terminal and partial. Cancellation is performed by invoking grpc::ServerContext::TryCancel. After successful cancellation no further operations should be started on the rpc. Operations are also cancelled when the deadline of the rpc has been reached.
|
inlinestaticconstexprnoexcept |
Name of the gRPC service.
Equal to the generated Service::service_full_name()
.
E.g. for the .proto
schema
the return value would be "example.v1.Example"
.
|
inlinestaticconstexprnoexcept |
Name of the gRPC method.
E.g. for agrpc::ServerRPC<&example::Example::AsyncService::RequestMyMethod>
the return value would be "MyMethod"
.
|
inline |
Send a message to the client.
Only one write may be outstanding at any given time.
GRPC does not take ownership or a reference to response
, so it is safe to to deallocate once write returns, unless a deferred completion token like agrpc::use_sender
or asio::deferred
is used.
token | A completion token like asio::yield_context or agrpc::use_sender . The completion signature is void(bool) . true means that the data/metadata/status/etc is going to go to the wire. If it is false , it is not going to the wire because the call is already dead (i.e., canceled, deadline expired, other side dropped the channel, etc). |
|
inline |
Coalesce write and finish of this rpc.
Write response and coalesce it with trailing metadata which contains status, using WriteOptions options.
write_and_finish is equivalent of performing write with WriteOptions.set_last_message()
and finish in a single step.
GRPC does not take ownership or a reference to response and status, so it is safe to deallocate once write_and_finish returns, unless a deferred completion token like agrpc::use_sender
or asio::deferred
is used.
Implicit input parameter:
token | A completion token like asio::yield_context or agrpc::use_sender . The completion signature is void(bool) . true means that the data/metadata/status/etc is going to go to the wire. If it is false , it is not going to the wire because the call is already dead (i.e., canceled, deadline expired, other side dropped the channel, etc). |
|
inline |
Finish this rpc.
Indicate that the stream is to be finished with a certain status code.
Should not be used concurrently with other operations and may only be called once.
This operation will end when the server has finished sending out initial metadata (if not sent already) and status, or if some failure occurred when trying to do so.
GRPC does not take ownership or a reference to status, so it is safe to to deallocate once finish returns, unless a deferred completion token like agrpc::use_sender
or asio::deferred
is used.
token | A completion token like asio::yield_context or agrpc::use_sender . The completion signature is void(bool) . true means that the data/metadata/status/etc is going to go to the wire. If it is false , it is not going to the wire because the call is already dead (i.e., canceled, deadline expired, other side dropped the channel, etc). |
|
inlineinherited |
Send initial metadata.
Request notification of the sending of initial metadata to the client.
This call is optional, but if it is used, it cannot be used concurrently with or after the finish
/finish_with_error
method.
token | A completion token like asio::yield_context or agrpc::use_sender . The completion signature is void(bool) . true means that the data/metadata/status/etc is going to go to the wire. If it is false , it is not going to the wire because the call is already dead (i.e., canceled, deadline expired, other side dropped the channel, etc). |
|
inlinenoexceptinherited |
Is this rpc done?
Only available if Traits
contain NOTIFY_WHEN_DONE = true
.
Returns true if NotifyWhenDone has fired which indicates the finish
has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).
Thread-safe
|
inlineinherited |
Wait for done.
Only available if Traits
contain NOTIFY_WHEN_DONE = true
.
Request notification of the completion of this rpc, either due to calling finish
or because the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc). rpc.context().IsCancelled() may only be called after this operation completes.
Cancelling this operation does not invoke grpc::ServerContext::TryCancel.
token | A completion token like asio::yield_context or agrpc::use_sender . The completion signature is void() . |
|
inlinenoexceptinherited |
Get the executor.
Thread-safe
|
inlinenoexceptinherited |
Get the scheduler.
Thread-safe
|
inlinenoexceptinherited |