diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docs/annotated.html b/docs/annotated.html new file mode 100644 index 00000000..dd91fa32 --- /dev/null +++ b/docs/annotated.html @@ -0,0 +1,173 @@ + + + + + + + + +asio-grpc: Class List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NagrpcPublic namespace
 Ndetail
 CClientRPCBaseServerRPC base
 CClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >Bidirectional-streaming ClientRPC base
 CClientRPCContextBaseClientRPC grpc::ClientContext base
 CClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >Server-streaming ClientRPC base
 Crebind_executorRebind the ClientRPC to another executor
 CClientRPCUnaryBase< PrepareAsyncUnary, Executor >Unary ClientRPC base
 Crebind_executorRebind the ClientRPC to another executor
 CNotifyOnStateChangeFnFunction to set notification for a grpc::Channel state change
 CReadFnServer/ClientRPC.read in form of a function object
 CRPCExecutorBaseRPC's executor base
 CServerRPCBaseServerRPC base
 CServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >ServerRPC bidirectional-streaming base
 CServerRPCContextBaseServerRPC ServerContext base
 CServerRPCNotifyWhenDoneMixinServerRPC NotifyWhenDone base
 CBasicAlarmI/O object for grpc::Alarm
 CBasicGrpcExecutorGrpcContext's executor
 CClientRPCPrimary ClientRPC template
 CClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >I/O object for client-side, generic, streaming rpcs
 Crebind_executorRebind the ClientRPC to another executor
 CClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >I/O object for client-side, generic, unary rpcs
 Crebind_executorRebind the ClientRPC to another executor
 CClientRPC< PrepareAsyncBidiStreaming, Executor >I/O object for client-side, bidirectional-streaming rpcs
 Crebind_executorRebind the ClientRPC to another executor
 CClientRPC< PrepareAsyncClientStreaming, Executor >I/O object for client-side, client-streaming rpcs
 Crebind_executorRebind the ClientRPC to another executor
 CClientRPC< PrepareAsyncServerStreaming, Executor >I/O object for client-side, server-streaming rpcs
 CClientRPC< PrepareAsyncUnary, Executor >I/O object for client-side, unary rpcs
 CDefaultRunTraits(experimental) Default run traits
 CDefaultServerRPCTraitsDefault ServerRPC traits
 CGrpcContextExecution context based on grpc::CompletionQueue
 CHealthCheckServiceCompletionQueue-based implementation of grpc::HealthCheckServiceInterface
 CServerRPCPrimary ServerRPC template
 CServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >I/O object for server-side, generic rpcs
 Crebind_executorRebind the ServerRPC to another executor
 CServerRPC< RequestBidiStreaming, TraitsT, Executor >I/O object for server-side, bidirectional-streaming rpcs
 Crebind_executorRebind the ServerRPC to another executor
 CServerRPC< RequestClientStreaming, TraitsT, Executor >I/O object for server-side, client-streaming rpcs
 Crebind_executorRebind the ServerRPC to another executor
 CServerRPC< RequestServerStreaming, TraitsT, Executor >I/O object for server-side, server-streaming rpcs
 Crebind_executorRebind the ServerRPC to another executor
 CServerRPC< RequestUnary, TraitsT, Executor >I/O object for server-side, unary rpcs
 Crebind_executorRebind the ServerRPC to another executor
 CServerRPCPtrAllocated ServerRPC created by register_callback_rpc_handler
 CUseSenderSender completion token
 CWaiter(experimental) Utility class for uncancelable operations
 Crebind_executorRebind the Waiter to another executor
+
+
+
+ + + + diff --git a/docs/annotated_dup.js b/docs/annotated_dup.js new file mode 100644 index 00000000..a54f5c70 --- /dev/null +++ b/docs/annotated_dup.js @@ -0,0 +1,41 @@ +var annotated_dup = +[ + [ "agrpc", "namespaceagrpc.html", [ + [ "detail", null, [ + [ "ClientRPCBase", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", "classagrpc_1_1detail_1_1_client_r_p_c_base" ], + [ "ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf" ], + [ "ClientRPCContextBase", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html", "classagrpc_1_1detail_1_1_client_r_p_c_context_base" ], + [ "ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4" ], + [ "ClientRPCUnaryBase< PrepareAsyncUnary, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4" ], + [ "NotifyOnStateChangeFn", "structagrpc_1_1detail_1_1_notify_on_state_change_fn.html", "structagrpc_1_1detail_1_1_notify_on_state_change_fn" ], + [ "ReadFn", "structagrpc_1_1detail_1_1_read_fn.html", "structagrpc_1_1detail_1_1_read_fn" ], + [ "RPCExecutorBase", "classagrpc_1_1detail_1_1_r_p_c_executor_base.html", "classagrpc_1_1detail_1_1_r_p_c_executor_base" ], + [ "ServerRPCBase", "classagrpc_1_1detail_1_1_server_r_p_c_base.html", "classagrpc_1_1detail_1_1_server_r_p_c_base" ], + [ "ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b" ], + [ "ServerRPCContextBase", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html", "classagrpc_1_1detail_1_1_server_r_p_c_context_base" ], + [ "ServerRPCNotifyWhenDoneMixin", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin" ] + ] ], + [ "BasicAlarm", "classagrpc_1_1_basic_alarm.html", "classagrpc_1_1_basic_alarm" ], + [ "BasicGrpcExecutor", "classagrpc_1_1_basic_grpc_executor.html", "classagrpc_1_1_basic_grpc_executor" ], + [ "ClientRPC", "classagrpc_1_1_client_r_p_c.html", null ], + [ "ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4" ], + [ "ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4" ], + [ "ClientRPC< PrepareAsyncBidiStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4" ], + [ "ClientRPC< PrepareAsyncClientStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4" ], + [ "ClientRPC< PrepareAsyncServerStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4" ], + [ "ClientRPC< PrepareAsyncUnary, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4" ], + [ "DefaultRunTraits", "structagrpc_1_1_default_run_traits.html", "structagrpc_1_1_default_run_traits" ], + [ "DefaultServerRPCTraits", "structagrpc_1_1_default_server_r_p_c_traits.html", "structagrpc_1_1_default_server_r_p_c_traits" ], + [ "GrpcContext", "classagrpc_1_1_grpc_context.html", "classagrpc_1_1_grpc_context" ], + [ "HealthCheckService", "classagrpc_1_1_health_check_service.html", "classagrpc_1_1_health_check_service" ], + [ "ServerRPC", "classagrpc_1_1_server_r_p_c.html", null ], + [ "ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPC< RequestBidiStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPC< RequestClientStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPC< RequestServerStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPC< RequestUnary, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPCPtr", "classagrpc_1_1_server_r_p_c_ptr.html", "classagrpc_1_1_server_r_p_c_ptr" ], + [ "UseSender", "structagrpc_1_1_use_sender.html", "structagrpc_1_1_use_sender" ], + [ "Waiter", "classagrpc_1_1_waiter.html", "classagrpc_1_1_waiter" ] + ] ] +]; \ No newline at end of file diff --git a/docs/bc_s.png b/docs/bc_s.png new file mode 100644 index 00000000..5d3c4cb9 Binary files /dev/null and b/docs/bc_s.png differ diff --git a/docs/bc_sd.png b/docs/bc_sd.png new file mode 100644 index 00000000..7c691d4e Binary files /dev/null and b/docs/bc_sd.png differ diff --git a/docs/classagrpc_1_1_basic_alarm-members.html b/docs/classagrpc_1_1_basic_alarm-members.html new file mode 100644 index 00000000..d3146ffd --- /dev/null +++ b/docs/classagrpc_1_1_basic_alarm-members.html @@ -0,0 +1,132 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::BasicAlarm< Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::BasicAlarm< Executor >, including all inherited members.

+ + + + + + + + + +
BasicAlarm(const Executor &executor)agrpc::BasicAlarm< Executor >inlineexplicit
BasicAlarm(agrpc::GrpcContext &grpc_context)agrpc::BasicAlarm< Executor >inlineexplicit
cancel()agrpc::BasicAlarm< Executor >inline
executor_type typedefagrpc::BasicAlarm< Executor >
get_executor() const noexceptagrpc::BasicAlarm< Executor >inline
get_scheduler() const noexceptagrpc::BasicAlarm< Executor >inline
wait(const Deadline &deadline, CompletionToken &&token=CompletionToken{}) &agrpc::BasicAlarm< Executor >inline
wait(const Deadline &deadline, CompletionToken &&token=CompletionToken{}) &&agrpc::BasicAlarm< Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_basic_alarm.html b/docs/classagrpc_1_1_basic_alarm.html new file mode 100644 index 00000000..7ec819d1 --- /dev/null +++ b/docs/classagrpc_1_1_basic_alarm.html @@ -0,0 +1,365 @@ + + + + + + + + +asio-grpc: agrpc::BasicAlarm< Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::BasicAlarm< Executor > Class Template Reference
+
+
+ +

I/O object for grpc::Alarm + More...

+ +

#include <agrpc/alarm.hpp>

+ + + + + +

+Public Types

+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BasicAlarm (const Executor &executor)
 Construct a BasicAlarm from an executor.
 
BasicAlarm (agrpc::GrpcContext &grpc_context)
 Construct a BasicAlarm from a GrpcContext.
 
template<class Deadline , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto wait (const Deadline &deadline, CompletionToken &&token=CompletionToken{}) &
 Wait until a specified deadline has been reached (lvalue overload)
 
template<class Deadline , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto wait (const Deadline &deadline, CompletionToken &&token=CompletionToken{}) &&
 Wait until a specified deadline has been reached (rvalue overload)
 
void cancel ()
 Cancel an outstanding wait.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+

Detailed Description

+
template<class Executor>
+class agrpc::BasicAlarm< Executor >

I/O object for grpc::Alarm

+

Wraps a grpc::Alarm as an I/O object.

+
Template Parameters
+ + +
ExecutorThe executor type, must be capable of referring to a GrpcContext.
+
+
+

Per-Operation Cancellation

+

All. Effectively calls grpc::Alarm::Cancel which will cause the operation to complete with false.

+
Since
2.2.0
+

Member Function Documentation

+ +

◆ wait() [1/2]

+ +
+
+
+template<class Executor >
+
+template<class Deadline , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::BasicAlarm< Executor >::wait (const Deadline & deadline,
CompletionToken && token = CompletionToken{} ) &
+
+inline
+
+ +

Wait until a specified deadline has been reached (lvalue overload)

+

The operation finishes once the alarm expires (at deadline) or is cancelled. If the alarm expired, the result will be true, false otherwise (i.e. upon cancellation).

+
Attention
Only one wait may be outstanding at a time.
+

Example:

+
agrpc::Alarm alarm{grpc_context};
+
bool wait_ok = co_await alarm.wait(std::chrono::system_clock::now() + std::chrono::seconds(1), asio::use_awaitable);
+
Parameters
+ + + +
deadlineBy default gRPC supports two types of deadlines: gpr_timespec and std::chrono::system_clock::time_point. More types can be added by specializing grpc::TimePoint.
tokenA completion token like asio::yield_context or the one created by agrpc::use_sender. The completion signature is void(bool). true if it expired, false if it was canceled.
+
+
+ +
+
+ +

◆ wait() [2/2]

+ +
+
+
+template<class Executor >
+
+template<class Deadline , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::BasicAlarm< Executor >::wait (const Deadline & deadline,
CompletionToken && token = CompletionToken{} ) &&
+
+inline
+
+ +

Wait until a specified deadline has been reached (rvalue overload)

+

Extends the lifetime of the Alarm until the end of the wait. Otherwise, equivalent to the lvalue overload.

+

Example:

+
auto [alarm, wait_ok] = co_await agrpc::Alarm(grpc_context)
+
.wait(std::chrono::system_clock::now() + std::chrono::seconds(1), asio::use_awaitable);
+
Parameters
+ + +
tokenA completion token like asio::yield_context or the one created by agrpc::use_sender. The completion signature is void(bool, BasicAlarm). true if it expired, false if it was canceled.
+
+
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
void agrpc::BasicAlarm< Executor >::cancel ()
+
+inline
+
+ +

Cancel an outstanding wait.

+

The outstanding wait will complete with false if the Alarm did not fire yet, otherwise this function has no effect.

+

Thread-safe

+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::BasicAlarm< Executor >::get_executor () const
+
+inlinenodiscardnoexcept
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::BasicAlarm< Executor >::get_scheduler () const
+
+inlinenodiscardnoexcept
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_basic_alarm.js b/docs/classagrpc_1_1_basic_alarm.js new file mode 100644 index 00000000..eb066009 --- /dev/null +++ b/docs/classagrpc_1_1_basic_alarm.js @@ -0,0 +1,11 @@ +var classagrpc_1_1_basic_alarm = +[ + [ "executor_type", "classagrpc_1_1_basic_alarm.html#a27f0463bacb42bca624f6c3a5dbc010f", null ], + [ "BasicAlarm", "classagrpc_1_1_basic_alarm.html#a1c2856cde4299fab6033f44785b39a91", null ], + [ "BasicAlarm", "classagrpc_1_1_basic_alarm.html#a729216cc77694f2a829d6bade9e0c695", null ], + [ "wait", "classagrpc_1_1_basic_alarm.html#a1871721d802eb738999ba0628846ed82", null ], + [ "wait", "classagrpc_1_1_basic_alarm.html#a8d721ba08b4b170732dc8bea1580e61f", null ], + [ "cancel", "classagrpc_1_1_basic_alarm.html#a0b1a1d2755efc3e05862e597100af241", null ], + [ "get_executor", "classagrpc_1_1_basic_alarm.html#ac364d2b1f047e589fc67c428c2c12947", null ], + [ "get_scheduler", "classagrpc_1_1_basic_alarm.html#ac4ab630cb9294c470fc6d1d3acf2aa5c", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_basic_grpc_executor-members.html b/docs/classagrpc_1_1_basic_grpc_executor-members.html new file mode 100644 index 00000000..afc75063 --- /dev/null +++ b/docs/classagrpc_1_1_basic_grpc_executor-members.html @@ -0,0 +1,152 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::BasicGrpcExecutor< Allocator, Options > Member List
+
+
+ +

This is the complete list of members for agrpc::BasicGrpcExecutor< Allocator, Options >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedefagrpc::BasicGrpcExecutor< Allocator, Options >
BasicGrpcExecutor()=defaultagrpc::BasicGrpcExecutor< Allocator, Options >
context() const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
defer(Function &&function, const OtherAllocator &other_allocator) constagrpc::BasicGrpcExecutor< Allocator, Options >inline
dispatch(Function &&function, const OtherAllocator &other_allocator) constagrpc::BasicGrpcExecutor< Allocator, Options >inline
execute(Function &&function) constagrpc::BasicGrpcExecutor< Allocator, Options >inline
get_allocator() const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
on_work_finished() const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
on_work_started() const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
operator!=(const BasicGrpcExecutor &lhs, const agrpc::BasicGrpcExecutor< Allocator, OtherOptions > &rhs) noexceptagrpc::BasicGrpcExecutor< Allocator, Options >friend
operator==(const BasicGrpcExecutor &lhs, const agrpc::BasicGrpcExecutor< Allocator, OtherOptions > &rhs) noexceptagrpc::BasicGrpcExecutor< Allocator, Options >friend
post(Function &&function, const OtherAllocator &other_allocator) constagrpc::BasicGrpcExecutor< Allocator, Options >inline
prefer(asio::execution::relationship_t::fork_t) const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
prefer(asio::execution::relationship_t::continuation_t) const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
query(asio::execution::blocking_t) noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inlinestatic
query(asio::execution::mapping_t) noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inlinestatic
query(asio::execution::context_t) const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
query(asio::execution::relationship_t) noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inlinestatic
query(asio::execution::outstanding_work_t) noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inlinestatic
query(asio::execution::allocator_t< OtherAllocator >) const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
require(asio::execution::blocking_t::possibly_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, false)>agrpc::BasicGrpcExecutor< Allocator, Options >inline
require(asio::execution::blocking_t::never_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, true)>agrpc::BasicGrpcExecutor< Allocator, Options >inline
require(asio::execution::outstanding_work_t::tracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, true)>agrpc::BasicGrpcExecutor< Allocator, Options >inline
require(asio::execution::outstanding_work_t::untracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, false)>agrpc::BasicGrpcExecutor< Allocator, Options >inline
require(asio::execution::allocator_t< OtherAllocator > other_allocator) const noexcept -> agrpc::BasicGrpcExecutor< OtherAllocator, Options >agrpc::BasicGrpcExecutor< Allocator, Options >inline
require(asio::execution::allocator_t< void >) const noexcept -> agrpc::BasicGrpcExecutor< std::allocator< void >, Options >agrpc::BasicGrpcExecutor< Allocator, Options >inline
running_in_this_thread() const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
schedule() const noexceptagrpc::BasicGrpcExecutor< Allocator, Options >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_basic_grpc_executor.html b/docs/classagrpc_1_1_basic_grpc_executor.html new file mode 100644 index 00000000..326232a7 --- /dev/null +++ b/docs/classagrpc_1_1_basic_grpc_executor.html @@ -0,0 +1,1128 @@ + + + + + + + + +asio-grpc: agrpc::BasicGrpcExecutor< Allocator, Options > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::BasicGrpcExecutor< Allocator, Options > Class Template Reference
+
+
+ +

GrpcContext's executor. + More...

+ +

#include <agrpc/grpc_executor.hpp>

+ + + + + +

+Public Types

+using allocator_type = Allocator
 The associated allocator type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BasicGrpcExecutor ()=default
 Default construct an executor.
 
constexpr agrpc::GrpcContextcontext () const noexcept
 Get the underlying GrpcContext.
 
constexpr allocator_type get_allocator () const noexcept
 Get the associated allocator.
 
bool running_in_this_thread () const noexcept
 Determine whether the GrpcContext is running in the current thread.
 
void on_work_started () const noexcept
 Signal the GrpcContext that an asynchronous operation is in progress.
 
void on_work_finished () const noexcept
 Signal the GrpcContext that an asynchronous operation has completed.
 
template<class Function , class OtherAllocator >
void dispatch (Function &&function, const OtherAllocator &other_allocator) const
 Request the GrpcContext to invoke the given function object.
 
template<class Function , class OtherAllocator >
void post (Function &&function, const OtherAllocator &other_allocator) const
 Request the GrpcContext to invoke the given function object.
 
template<class Function , class OtherAllocator >
void defer (Function &&function, const OtherAllocator &other_allocator) const
 Request the GrpcContext to invoke the given function object.
 
template<class Function >
void execute (Function &&function) const
 Request the GrpcContext to invoke the given function object.
 
detail::ScheduleSender schedule () const noexcept
 Create a Sender that completes on the GrpcContext.
 
constexpr auto require (asio::execution::blocking_t::possibly_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, false)>
 Obtain an executor with the blocking.possibly property.
 
constexpr auto require (asio::execution::blocking_t::never_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, true)>
 Obtain an executor with the blocking.never property.
 
constexpr auto prefer (asio::execution::relationship_t::fork_t) const noexcept
 Obtain an executor with the relationship.fork property.
 
constexpr auto prefer (asio::execution::relationship_t::continuation_t) const noexcept
 Obtain an executor with the relationship.continuation property.
 
constexpr auto require (asio::execution::outstanding_work_t::tracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, true)>
 Obtain an executor with the outstanding_work.tracked property.
 
constexpr auto require (asio::execution::outstanding_work_t::untracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, false)>
 Obtain an executor with the outstanding_work.untracked property.
 
template<class OtherAllocator >
constexpr auto require (asio::execution::allocator_t< OtherAllocator > other_allocator) const noexcept -> agrpc::BasicGrpcExecutor< OtherAllocator, Options >
 Obtain an executor with the specified allocator property.
 
constexpr auto require (asio::execution::allocator_t< void >) const noexcept -> agrpc::BasicGrpcExecutor< std::allocator< void >, Options >
 Obtain an executor with the default allocator property.
 
constexpr agrpc::GrpcContextquery (asio::execution::context_t) const noexcept
 Query the current value of the context property.
 
template<class OtherAllocator >
constexpr allocator_type query (asio::execution::allocator_t< OtherAllocator >) const noexcept
 Query the current value of the allocator property.
 
+ + + + + + + + + + + + + +

+Static Public Member Functions

static constexpr auto query (asio::execution::blocking_t) noexcept
 Query the current value of the blocking property.
 
static constexpr detail::QueryStaticMapping::result_type query (asio::execution::mapping_t) noexcept
 Query the current value of the mapping property.
 
static constexpr detail::QueryStaticRelationship::result_type query (asio::execution::relationship_t) noexcept
 Query the current value of the relationship property.
 
static constexpr auto query (asio::execution::outstanding_work_t) noexcept
 Query the current value of the outstanding_work property.
 
+ + + + + + + + + +

+Friends

template<std::uint32_t OtherOptions>
constexpr bool operator== (const BasicGrpcExecutor &lhs, const agrpc::BasicGrpcExecutor< Allocator, OtherOptions > &rhs) noexcept
 Compare two GrpcExecutor for equality.
 
template<std::uint32_t OtherOptions>
constexpr bool operator!= (const BasicGrpcExecutor &lhs, const agrpc::BasicGrpcExecutor< Allocator, OtherOptions > &rhs) noexcept
 Compare two GrpcExecutor for inequality.
 
+

Detailed Description

+
template<class Allocator, std::uint32_t Options>
+class agrpc::BasicGrpcExecutor< Allocator, Options >

GrpcContext's executor.

+

A lightweight handle to a GrpcContext. Trivially copyable if it is not tracking outstanding work.

+

Satisfies the Executor and Networking TS and Scheduler requirements and can therefore be used in places where Asio/libunifex expects an Executor or Scheduler.

+

Constructor & Destructor Documentation

+ +

◆ BasicGrpcExecutor()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
agrpc::BasicGrpcExecutor< Allocator, Options >::BasicGrpcExecutor ()
+
+default
+
+ +

Default construct an executor.

+

The constructed object may not be used until it is assigned a valid executor, for example through GrpcContext::get_executor.

+ +
+
+

Member Function Documentation

+ +

◆ context()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
agrpc::GrpcContext & agrpc::BasicGrpcExecutor< Allocator, Options >::context () const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Get the underlying GrpcContext.

+

Thread-safe

+

Since 1.6.0 this function is hidden when (BOOST_)ASIO_NO_TS_EXECUTORS is defined.

+ +
+
+ +

◆ get_allocator()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
allocator_type agrpc::BasicGrpcExecutor< Allocator, Options >::get_allocator () const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Get the associated allocator.

+

Thread-safe

+ +
+
+ +

◆ running_in_this_thread()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
bool agrpc::BasicGrpcExecutor< Allocator, Options >::running_in_this_thread () const
+
+inlinenodiscardnoexcept
+
+ +

Determine whether the GrpcContext is running in the current thread.

+

Thread-safe

+ +
+
+ +

◆ on_work_started()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
void agrpc::BasicGrpcExecutor< Allocator, Options >::on_work_started () const
+
+inlinenoexcept
+
+ +

Signal the GrpcContext that an asynchronous operation is in progress.

+

Thread-safe

+

Since 1.6.0 this function is hidden when (BOOST_)ASIO_NO_TS_EXECUTORS is defined.

+ +
+
+ +

◆ on_work_finished()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
void agrpc::BasicGrpcExecutor< Allocator, Options >::on_work_finished () const
+
+inlinenoexcept
+
+ +

Signal the GrpcContext that an asynchronous operation has completed.

+

Once all outstanding asynchronous operations have completed the GrpcContext will go into the stopped state.

+

Thread-safe

+

Since 1.6.0 this function is hidden when (BOOST_)ASIO_NO_TS_EXECUTORS is defined.

+ +
+
+ +

◆ dispatch()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+
+template<class Function , class OtherAllocator >
+ + + + + +
+ + + + + + + + + + + +
void agrpc::BasicGrpcExecutor< Allocator, Options >::dispatch (Function && function,
const OtherAllocator & other_allocator ) const
+
+inline
+
+ +

Request the GrpcContext to invoke the given function object.

+

Do not call this function directly, it is intended to be used by the asio::dispatch free function.

+

Thread-safe

+

Since 1.6.0 this function is hidden when (BOOST_)ASIO_NO_TS_EXECUTORS is defined.

+ +
+
+ +

◆ post()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+
+template<class Function , class OtherAllocator >
+ + + + + +
+ + + + + + + + + + + +
void agrpc::BasicGrpcExecutor< Allocator, Options >::post (Function && function,
const OtherAllocator & other_allocator ) const
+
+inline
+
+ +

Request the GrpcContext to invoke the given function object.

+

Do not call this function directly, it is intended to be used by the asio::post free function.

+

Thread-safe

+

Since 1.6.0 this function is hidden when (BOOST_)ASIO_NO_TS_EXECUTORS is defined.

+ +
+
+ +

◆ defer()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+
+template<class Function , class OtherAllocator >
+ + + + + +
+ + + + + + + + + + + +
void agrpc::BasicGrpcExecutor< Allocator, Options >::defer (Function && function,
const OtherAllocator & other_allocator ) const
+
+inline
+
+ +

Request the GrpcContext to invoke the given function object.

+

Do not call this function directly, it is intended to be used by the asio::defer free function.

+

Thread-safe

+

Since 1.6.0 this function is hidden when (BOOST_)ASIO_NO_TS_EXECUTORS is defined.

+ +
+
+ +

◆ execute()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+
+template<class Function >
+ + + + + +
+ + + + + + + +
void agrpc::BasicGrpcExecutor< Allocator, Options >::execute (Function && function) const
+
+inline
+
+ +

Request the GrpcContext to invoke the given function object.

+

Thread-safe

+ +
+
+ +

◆ schedule()

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
detail::ScheduleSender agrpc::BasicGrpcExecutor< Allocator, Options >::schedule () const
+
+inlinenodiscardnoexcept
+
+ +

Create a Sender that completes on the GrpcContext.

+

Do not call this function directly. It is intended to be used by the unifex::schedule customisation point.

+

Thread-safe

+ +
+
+ +

◆ require() [1/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
auto agrpc::BasicGrpcExecutor< Allocator, Options >::require (asio::execution::blocking_t::possibly_t ) const -> agrpc::BasicGrpcExecutor<Allocator, detail::set_blocking_never(Options, false)> +
+
+inlinenodiscardconstexprnoexcept
+
+ +

Obtain an executor with the blocking.possibly property.

+

Do not call this function directly. It is intended to be used by the asio::require customisation point.

+

Thread-safe

+ +
+
+ +

◆ require() [2/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
auto agrpc::BasicGrpcExecutor< Allocator, Options >::require (asio::execution::blocking_t::never_t ) const -> agrpc::BasicGrpcExecutor<Allocator, detail::set_blocking_never(Options, true)> +
+
+inlinenodiscardconstexprnoexcept
+
+ +

Obtain an executor with the blocking.never property.

+

Do not call this function directly. It is intended to be used by the asio::require customisation point.

+

Thread-safe

+ +
+
+ +

◆ prefer() [1/2]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
auto agrpc::BasicGrpcExecutor< Allocator, Options >::prefer (asio::execution::relationship_t::fork_t ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Obtain an executor with the relationship.fork property.

+

The GrpcExecutor always forks.

+

Do not call this function directly. It is intended to be used by the asio::prefer customisation point.

+

Thread-safe

+ +
+
+ +

◆ prefer() [2/2]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
auto agrpc::BasicGrpcExecutor< Allocator, Options >::prefer (asio::execution::relationship_t::continuation_t ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Obtain an executor with the relationship.continuation property.

+

The GrpcExecutor does not support continuation.

+

Do not call this function directly. It is intended to be used by the asio::prefer customisation point.

+

Thread-safe

+ +
+
+ +

◆ require() [3/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
auto agrpc::BasicGrpcExecutor< Allocator, Options >::require (asio::execution::outstanding_work_t::tracked_t ) const -> agrpc::BasicGrpcExecutor<Allocator, detail::set_outstanding_work_tracked(Options, true)> +
+
+inlinenodiscardconstexprnoexcept
+
+ +

Obtain an executor with the outstanding_work.tracked property.

+

Do not call this function directly. It is intended to be used by the asio::require customisation point.

+

Thread-safe

+ +
+
+ +

◆ require() [4/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
auto agrpc::BasicGrpcExecutor< Allocator, Options >::require (asio::execution::outstanding_work_t::untracked_t ) const -> agrpc::BasicGrpcExecutor<Allocator, detail::set_outstanding_work_tracked(Options, false)> +
+
+inlinenodiscardconstexprnoexcept
+
+ +

Obtain an executor with the outstanding_work.untracked property.

+

Do not call this function directly. It is intended to be used by the asio::require customisation point.

+

Thread-safe

+ +
+
+ +

◆ require() [5/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+
+template<class OtherAllocator >
+ + + + + +
+ + + + + + + +
auto agrpc::BasicGrpcExecutor< Allocator, Options >::require (asio::execution::allocator_t< OtherAllocator > other_allocator) const -> agrpc::BasicGrpcExecutor<OtherAllocator, Options> +
+
+inlinenodiscardconstexprnoexcept
+
+ +

Obtain an executor with the specified allocator property.

+

Do not call this function directly. It is intended to be used by the asio::require customisation point.

+

Thread-safe

+ +
+
+ +

◆ require() [6/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
auto agrpc::BasicGrpcExecutor< Allocator, Options >::require (asio::execution::allocator_t< void > ) const -> agrpc::BasicGrpcExecutor<std::allocator<void>, Options> +
+
+inlinenodiscardconstexprnoexcept
+
+ +

Obtain an executor with the default allocator property.

+

Do not call this function directly. It is intended to be used by the asio::require customisation point.

+

Thread-safe

+ +
+
+ +

◆ query() [1/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
static constexpr auto agrpc::BasicGrpcExecutor< Allocator, Options >::query (asio::execution::blocking_t )
+
+inlinestaticnodiscardconstexprnoexcept
+
+ +

Query the current value of the blocking property.

+

Do not call this function directly. It is intended to be used by the asio::query customisation point.

+

Thread-safe

+ +
+
+ +

◆ query() [2/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
static constexpr detail::QueryStaticMapping::result_type agrpc::BasicGrpcExecutor< Allocator, Options >::query (asio::execution::mapping_t )
+
+inlinestaticnodiscardconstexprnoexcept
+
+ +

Query the current value of the mapping property.

+

Do not call this function directly. It is intended to be used by the asio::query customisation point.

+

Thread-safe

+ +
+
+ +

◆ query() [3/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
agrpc::GrpcContext & agrpc::BasicGrpcExecutor< Allocator, Options >::query (asio::execution::context_t ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Query the current value of the context property.

+

Do not call this function directly. It is intended to be used by the asio::query customisation point.

+

Thread-safe

+ +
+
+ +

◆ query() [4/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
static constexpr detail::QueryStaticRelationship::result_type agrpc::BasicGrpcExecutor< Allocator, Options >::query (asio::execution::relationship_t )
+
+inlinestaticnodiscardconstexprnoexcept
+
+ +

Query the current value of the relationship property.

+

Do not call this function directly. It is intended to be used by the asio::query customisation point.

+

Thread-safe

+ +
+
+ +

◆ query() [5/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+ + + + + +
+ + + + + + + +
static constexpr auto agrpc::BasicGrpcExecutor< Allocator, Options >::query (asio::execution::outstanding_work_t )
+
+inlinestaticnodiscardconstexprnoexcept
+
+ +

Query the current value of the outstanding_work property.

+

Do not call this function directly. It is intended to be used by the asio::query customisation point.

+

Thread-safe

+ +
+
+ +

◆ query() [6/6]

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+
+template<class OtherAllocator >
+ + + + + +
+ + + + + + + +
allocator_type agrpc::BasicGrpcExecutor< Allocator, Options >::query (asio::execution::allocator_t< OtherAllocator > ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Query the current value of the allocator property.

+

Do not call this function directly. It is intended to be used by the asio::query customisation point.

+

Thread-safe

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ operator==

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+
+template<std::uint32_t OtherOptions>
+ + + + + +
+ + + + + + + + + + + +
bool operator== (const BasicGrpcExecutor< Allocator, Options > & lhs,
const agrpc::BasicGrpcExecutor< Allocator, OtherOptions > & rhs )
+
+friend
+
+ +

Compare two GrpcExecutor for equality.

+

Returns true if the two executors can be interchanged with identical effects.

+

Thread-safe

+ +
+
+ +

◆ operator!=

+ +
+
+
+template<class Allocator , std::uint32_t Options>
+
+template<std::uint32_t OtherOptions>
+ + + + + +
+ + + + + + + + + + + +
bool operator!= (const BasicGrpcExecutor< Allocator, Options > & lhs,
const agrpc::BasicGrpcExecutor< Allocator, OtherOptions > & rhs )
+
+friend
+
+ +

Compare two GrpcExecutor for inequality.

+

Returns true if interchanging the two executors may not lead to identical effects.

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_basic_grpc_executor.js b/docs/classagrpc_1_1_basic_grpc_executor.js new file mode 100644 index 00000000..10d32059 --- /dev/null +++ b/docs/classagrpc_1_1_basic_grpc_executor.js @@ -0,0 +1,31 @@ +var classagrpc_1_1_basic_grpc_executor = +[ + [ "allocator_type", "classagrpc_1_1_basic_grpc_executor.html#a658f9dcfd92c049d9b8961bbb67eab13", null ], + [ "BasicGrpcExecutor", "classagrpc_1_1_basic_grpc_executor.html#af1f14c7ef02e44b330c245394dfebfa6", null ], + [ "context", "classagrpc_1_1_basic_grpc_executor.html#ae03cda766d1198fa9fa135fccc02232a", null ], + [ "get_allocator", "classagrpc_1_1_basic_grpc_executor.html#aead17d041c9509d3b5074375cd2eee6e", null ], + [ "running_in_this_thread", "classagrpc_1_1_basic_grpc_executor.html#aa88fb5798dd945616262dc58258f48ec", null ], + [ "on_work_started", "classagrpc_1_1_basic_grpc_executor.html#ab2333c1d9f61b6469aeb6c84898e9a36", null ], + [ "on_work_finished", "classagrpc_1_1_basic_grpc_executor.html#a727afeb6438fe94ec105085ee9e00d56", null ], + [ "dispatch", "classagrpc_1_1_basic_grpc_executor.html#a97eda5ecec4b7066166e2f08eb1518be", null ], + [ "post", "classagrpc_1_1_basic_grpc_executor.html#aa55121002e69f6da4d193e2438556519", null ], + [ "defer", "classagrpc_1_1_basic_grpc_executor.html#a2c158f7d2dcad831b4930cf131e63f21", null ], + [ "execute", "classagrpc_1_1_basic_grpc_executor.html#a582b3391e4c1c383800284659707501c", null ], + [ "schedule", "classagrpc_1_1_basic_grpc_executor.html#ade38414f479671b271f191f3ee458408", null ], + [ "require", "classagrpc_1_1_basic_grpc_executor.html#a9fc995acce9263dbce34dcdfc76bcb75", null ], + [ "require", "classagrpc_1_1_basic_grpc_executor.html#ad7c8d60173fb17ccb20df74eba49c23a", null ], + [ "prefer", "classagrpc_1_1_basic_grpc_executor.html#ada9763f836d7e1af44a67ce09c8d6522", null ], + [ "prefer", "classagrpc_1_1_basic_grpc_executor.html#af81aa8e1195243f012aeab6f83653015", null ], + [ "require", "classagrpc_1_1_basic_grpc_executor.html#ab78813d4863b8e8175875dc9508db97f", null ], + [ "require", "classagrpc_1_1_basic_grpc_executor.html#a28a91c9fa313c1e764f036c4484611b2", null ], + [ "require", "classagrpc_1_1_basic_grpc_executor.html#a92d82315cfce4d130c7b001a9a2f86e3", null ], + [ "require", "classagrpc_1_1_basic_grpc_executor.html#a127e4d664d638ed7c6faf8e011108072", null ], + [ "query", "classagrpc_1_1_basic_grpc_executor.html#a6f12911ba642e59b224357f68a2abb51", null ], + [ "query", "classagrpc_1_1_basic_grpc_executor.html#ab26ea9b4a7825f78147c43ea084b2ff3", null ], + [ "query", "classagrpc_1_1_basic_grpc_executor.html#a41de4c176cc36e18949f590323cfbae1", null ], + [ "query", "classagrpc_1_1_basic_grpc_executor.html#a93ee7e38b61436d95c48f32ea978967d", null ], + [ "query", "classagrpc_1_1_basic_grpc_executor.html#a562182f5842ccd6c52e5cf6b8c4a24d0", null ], + [ "query", "classagrpc_1_1_basic_grpc_executor.html#a3864da8461ae1579a14bb20af274d8c5", null ], + [ "operator==", "classagrpc_1_1_basic_grpc_executor.html#a47785162ab9282e1afe21ca8617142eb", null ], + [ "operator!=", "classagrpc_1_1_basic_grpc_executor.html#a59d940966a2cbccb0905db9c4fe23e09", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c.html b/docs/classagrpc_1_1_client_r_p_c.html new file mode 100644 index 00000000..0957ae23 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c.html @@ -0,0 +1,137 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< PrepareAsync, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ClientRPC< PrepareAsync, Executor > Class Template Reference
+
+
+ +

Primary ClientRPC template. + More...

+

Detailed Description

+
template<auto PrepareAsync, class Executor = agrpc::BasicGrpcExecutor<>>
+class agrpc::ClientRPC< PrepareAsync, Executor >

Primary ClientRPC template.

+

This is the main entrypoint for implementing asynchronous gRPC clients.

+
See also
agrpc::ClientRPC<PrepareAsyncUnary,Executor>
+ agrpc::ClientRPC<agrpc::ClientRPCType::GENERIC_UNARY,Executor>
+ agrpc::ClientRPC<PrepareAsyncClientStreaming,Executor>
+ agrpc::ClientRPC<PrepareAsyncServerStreaming,Executor>
+ agrpc::ClientRPC<PrepareAsyncBidiStreaming,Executor>
+ agrpc::ClientRPC<agrpc::ClientRPCType::GENERIC_STREAMING,Executor>
+
+
Since
2.6.0
+
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4-members.html new file mode 100644 index 00000000..b36d8d15 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4-members.html @@ -0,0 +1,147 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inline
context()agrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
context() constagrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
method_name() noexceptagrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >inlinestatic
read(ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
read_initial_metadata(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
Request typedefagrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >
Response typedefagrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >
service_name() noexceptagrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >inlinestatic
start(StubT &stub, CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >inline
Stub typedefagrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >
TYPEagrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >static
write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
write(const RequestT &request, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
writes_done(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html new file mode 100644 index 00000000..8897ccf2 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html @@ -0,0 +1,758 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor > Class Template Reference
+
+
+ +

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

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >:
+
+
+ + + + + + +

+Classes

struct  rebind_executor
 Rebind the ClientRPC to another executor. More...
 
+ + + + + + + + + + + + + +

+Public Types

+using Stub = StubT
 The stub type.
 
+using Request = RequestT
 The request message type.
 
+using Response = ResponseT
 The response message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto start (StubT &stub, CompletionToken &&token=CompletionToken{})
 Start a bidirectional-streaming request.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read_initial_metadata (CompletionToken &&token=CompletionToken{})
 Read initial metadata.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read (ResponseT &response, CompletionToken &&token=CompletionToken{})
 Receive a message from the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})
 Send a message to the server.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const RequestT &request, CompletionToken &&token=CompletionToken{})
 Send a message to the server (default WriteOptions)
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto writes_done (CompletionToken &&token=CompletionToken{})
 Signal writes done to the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (CompletionToken &&token=CompletionToken{})
 Signal writes done and finish the rpc.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ClientRPCType TYPE = agrpc::ClientRPCType::BIDIRECTIONAL_STREAMING
 The rpc type.
 
+

Detailed Description

+
template<class StubT, class RequestT, class ResponseT, template< class, class > class ResponderT, detail::PrepareAsyncClientBidirectionalStreamingRequest< StubT, ResponderT< RequestT, ResponseT > > PrepareAsyncBidiStreaming, class Executor>
+class agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >

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

+

Example:

+
asio::awaitable<void> client_rpc_bidirectional_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<agrpc::ClientRPC<
+
&example::v1::Example::Stub::PrepareAsyncBidirectionalStreaming>>;
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
if (!co_await rpc.start(stub))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Request request;
+
request.set_integer(42);
+
+
bool write_ok{true};
+
RPC::Response response;
+
while (co_await rpc.read(response) && write_ok)
+
{
+
request.set_integer(response.integer() + 1);
+
write_ok = co_await rpc.write(request);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+

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
+ + + +
PrepareAsyncBidiStreamingA pointer to the generated, async version of the gRPC method. The async version starts with PrepareAsync.
ExecutorThe executor type, must be capable of referring to a GrpcContext.
+
+
+

Per-Operation Cancellation

+

Terminal and partial. Cancellation is performed by invoking grpc::ClientContext::TryCancel. After successful cancellation no further operations may be started on the rpc (except finish()). Operations are also cancelled when the deadline of the rpc has been reached (see grpc::ClientContext::set_deadline).

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class, class > class ResponderT, detail::PrepareAsyncClientBidirectionalStreamingRequest< StubT, ResponderT< RequestT, ResponseT > > PrepareAsyncBidiStreaming, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::service_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+
Since
2.6.0
+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class, class > class ResponderT, detail::PrepareAsyncClientBidirectionalStreamingRequest< StubT, ResponderT< RequestT, ResponseT > > PrepareAsyncBidiStreaming, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::method_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ClientRPC<&example::Example::Stub::PrepareAsyncMyMethod> the return value would be "MyMethod".

+
Since
2.6.0
+ +
+
+ +

◆ start()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class, class > class ResponderT, detail::PrepareAsyncClientBidirectionalStreamingRequest< StubT, ResponderT< RequestT, ResponseT > > PrepareAsyncBidiStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::start (StubT & stub,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Start a bidirectional-streaming request.

+
Parameters
+ + + +
stubThe Stub that corresponds to the gRPC method.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the rpc was started successfully. If it is false, then call finish() to obtain error details.
+
+
+ +
+
+ +

◆ read_initial_metadata()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read_initial_metadata (CompletionToken && token = CompletionToken{})
+
+inlineinherited
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Attention
If the server does not explicitly send initial metadata (e.g. by calling send_initial_metadata()) but waits for a message from the client instead then this function won't complete until write() is called.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ read()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read (ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Receive a message from the server.

+

This is thread-safe with respect to write() or writes_done() methods. It should not be called concurrently with other operations. It is not meaningful to call it concurrently with another read on the same stream since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other server is finished sending messages or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ write()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write (const RequestT & request,
grpc::WriteOptions options,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Send a message to the server.

+

Only one write may be outstanding at any given time. This is thread-safe with respect to read(). It should not be called concurrently with other operations.

+
Parameters
+ + + +
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the data 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).
+
+
+ +
+
+ +

◆ writes_done()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::writes_done (CompletionToken && token = CompletionToken{})
+
+inlineinherited
+
+ +

Signal writes done to the server.

+

May only be called once. Should not be called after performing a write with the set_last_message option.

+

Signal the client is done with the writes (half-close the client stream). Thread-safe with respect to read. May not be called concurrently with a write() that has the set_last_message option set.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the data 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).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::finish (CompletionToken && token = CompletionToken{})
+
+inlineinherited
+
+ +

Signal writes done and finish the rpc.

+

Indicate that the stream is to be finished and request notification for when the call has been ended.

+

May not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when:

+
    +
  • All messages from the server have been received (either known implictly, or explicitly because a previous read operation returned false).
  • +
+

The operation will finish when either:

+
    +
  • The server has returned a status.
  • +
  • The call failed for some reason and the library generated a status.
  • +
+

Note that implementations of this method attempt to receive initial metadata from the server if initial metadata has not been received yet.

+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata received from the server.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.js b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.js new file mode 100644 index 00000000..374bbec7 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.js @@ -0,0 +1,23 @@ +var classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor" ], + [ "Stub", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a4ad1384caca1951c4d7b4b68b1387bb9", null ], + [ "Request", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#ab17fb315d9316707b442296f9096519c", null ], + [ "Response", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a09949deac664f28273aa1b4f806759b1", null ], + [ "executor_type", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "service_name", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a07458f85b4281c361b16f652b6cda493", null ], + [ "method_name", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a36e96b31ad3ef1098a4c8c23e9dd94b7", null ], + [ "start", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#aa30e41480cbb07e971de447834423cdd", null ], + [ "read_initial_metadata", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#afb6a4be476b5cab862000ba87b70e289", null ], + [ "read", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#ad3830bd5b441d8b80c2a5dd33ae8ad2d", null ], + [ "write", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a613e43b75d508d451dac44e474256bf8", null ], + [ "write", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a7617653d30c2f57cdaeffcefed89793f", null ], + [ "writes_done", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a2d19b1441bd69861873989f76f5875e2", null ], + [ "finish", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a9a9b990891472214354e3425616f7b23", null ], + [ "get_executor", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#ade0c1cd5b69a524efbf92059fda88c1c", null ], + [ "TYPE", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a0b85df8344986b161b6223aa80595a6c", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..f36e4f0e --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..0ebff82d --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +5299787f29f4347ddb9b62a3bff77989 \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..916dd343 Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..f36e4f0e --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..0ebff82d --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +5299787f29f4347ddb9b62a3bff77989 \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..916dd343 Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4-members.html new file mode 100644 index 00000000..ec9c0090 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4-members.html @@ -0,0 +1,145 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< ResponderT< RequestT > >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< ResponderT< RequestT >, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< RequestT >, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< ResponderT< RequestT >, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< RequestT >, Executor >inline
context()agrpc::detail::ClientRPCContextBase< ResponderT< RequestT > >inline
context() constagrpc::detail::ClientRPCContextBase< ResponderT< RequestT > >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
method_name() noexceptagrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >inlinestatic
read_initial_metadata(CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >inline
Request typedefagrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >
Response typedefagrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >
service_name() noexceptagrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >inlinestatic
start(StubT &stub, ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >inline
Stub typedefagrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >
TYPEagrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >static
write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >inline
write(const RequestT &request, CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html new file mode 100644 index 00000000..30f15747 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html @@ -0,0 +1,703 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor > Class Template Reference
+
+
+ +

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

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >:
+
+
+ + + + + + +

+Classes

struct  rebind_executor
 Rebind the ClientRPC to another executor. More...
 
+ + + + + + + + + + + + + +

+Public Types

+using Stub = StubT
 The stub type.
 
+using Request = RequestT
 The request message type.
 
+using Response = ResponseT
 The response message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto start (StubT &stub, ResponseT &response, CompletionToken &&token=CompletionToken{})
 Start a client-streaming request.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read_initial_metadata (CompletionToken &&token=CompletionToken{})
 Read initial metadata.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})
 Send a message to the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const RequestT &request, CompletionToken &&token=CompletionToken{})
 Send a message to the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (CompletionToken &&token=CompletionToken{})
 Finish the rpc.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ClientRPCType TYPE = agrpc::ClientRPCType::CLIENT_STREAMING
 The rpc type.
 
+

Detailed Description

+
template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor>
+class agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >

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

+

Example:

+
asio::awaitable<void> client_rpc_client_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Response response;
+
if (!co_await rpc.start(stub, response))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Request request;
+
request.set_integer(1);
+
while (co_await rpc.write(request) && request.integer() < 42)
+
{
+
request.set_integer(request.integer() + 1);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
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
+ + + +
PrepareAsyncClientStreamingA pointer to the generated, async version of the gRPC method. The async version starts with PrepareAsync.
ExecutorThe executor type, must be capable of referring to a GrpcContext.
+
+
+

Per-Operation Cancellation

+

Terminal and partial. Cancellation is performed by invoking grpc::ClientContext::TryCancel. After successful cancellation no further operations may be started on the rpc (except finish()). Operations are also cancelled when the deadline of the rpc has been reached (see grpc::ClientContext::set_deadline).

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::service_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+
Since
2.6.0
+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::method_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ClientRPC<&example::Example::Stub::PrepareAsyncMyMethod> the return value would be "MyMethod".

+
Since
2.6.0
+ +
+
+ +

◆ start()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::start (StubT & stub,
ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Start a client-streaming request.

+
Attention
This function may not be used with the initial_metadata_corked option set.
+
Parameters
+ + + + +
stubThe Stub that corresponds to the gRPC method.
responseThe response message, will be filled by the server upon finishing this rpc. Must remain alive until this rpc is finished.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the rpc was started successfully. If it is false, then call finish() to obtain error details.
+
+
+ +
+
+ +

◆ read_initial_metadata()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::read_initial_metadata (CompletionToken && token = CompletionToken{})
+
+inline
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Attention
If the server does not explicitly send initial metadata (e.g. by calling send_initial_metadata()) but waits for a message from the client instead then this function won't complete until write() is called.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ write() [1/2]

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write (const RequestT & request,
grpc::WriteOptions options,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Send a message to the server.

+

WriteOptions options is used to set the write options of this message, otherwise identical to: write(request, token).

+ +
+
+ +

◆ write() [2/2]

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write (const RequestT & request,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Send a message to the server.

+

Only one write may be outstanding at any given time. May not be called concurrently with read_initial_metadata().

+
Parameters
+ + + +
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the data 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).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::finish (CompletionToken && token = CompletionToken{})
+
+inline
+
+ +

Finish the rpc.

+

Indicate that the stream is to be finished and request notification for when the call has been ended.

+

May not be used concurrently with other operations and may only be called once.

+

The operation will finish when either:

+
    +
  • The server has returned a status.
  • +
  • The call failed for some reason and the library generated a status.
  • +
+

Note that implementations of this method attempt to receive initial metadata from the server if initial metadata has not been received yet.

+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata received from the server.
  • +
  • Attempts to fill in the response parameter that was passed to start().
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< ResponderT< RequestT > >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.js b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.js new file mode 100644 index 00000000..bff33f33 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.js @@ -0,0 +1,21 @@ +var classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor" ], + [ "Stub", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aaa5fac7ed627fe95e1200d25633884b1", null ], + [ "Request", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aa4e18c75b6fb163a780408e2a118ec1d", null ], + [ "Response", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aad54ab42b4d0f7ec548fe527d7c4a9e5", null ], + [ "executor_type", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "service_name", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#ae2e44ea56d1c15036646e906939fbb11", null ], + [ "method_name", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a22b858db8af03d35bef7b60f7f389950", null ], + [ "start", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#af645e0dead95e4949f84971426536ed0", null ], + [ "read_initial_metadata", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a8de4c2a086f185be57765c0be380ca1b", null ], + [ "write", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a6fe42f409cebf57fbbf1faeedfc5dbdd", null ], + [ "write", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a8ae746c9baa2aadd2a7a9cbd0a94d365", null ], + [ "finish", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a0171335c8cded03fe915af5cb791bbdf", null ], + [ "get_executor", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#ade0c1cd5b69a524efbf92059fda88c1c", null ], + [ "TYPE", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a4a74888f2f96f5bb8b13218373aaa80c", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..74f60e3a --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..42e0f4ad --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +ea97031d7429e21b1a20e2192c80eb79 \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..cc0a5520 Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..74f60e3a --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..42e0f4ad --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +ea97031d7429e21b1a20e2192c80eb79 \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..cc0a5520 Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4-members.html new file mode 100644 index 00000000..f5220a87 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4-members.html @@ -0,0 +1,144 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
context()agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
context() constagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
method_name() noexceptagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inlinestatic
read(ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inline
read_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
Request typedefagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >
Response typedefagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >
service_name() noexceptagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inlinestatic
start(StubT &stub, const RequestT &request, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inline
Stub typedefagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >
TYPEagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >static
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html new file mode 100644 index 00000000..745e9580 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html @@ -0,0 +1,650 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor > Class Template Reference
+
+
+ +

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

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor >:
+
+
+ + + + + + + + + + + + + + + +

+Public Types

+using Stub = StubT
 The stub type.
 
+using Request = RequestT
 The request message type.
 
+using Response = ResponseT
 The response message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto start (StubT &stub, const RequestT &request, CompletionToken &&token=CompletionToken{})
 Start a server-streaming request.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read (ResponseT &response, CompletionToken &&token=CompletionToken{})
 Receive a message from the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (CompletionToken &&token=CompletionToken{})
 Finish the rpc.
 
auto read_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Read initial metadata.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ClientRPCType TYPE = agrpc::ClientRPCType::SERVER_STREAMING
 The rpc type.
 
+

Detailed Description

+
template<class StubT, class RequestT, class ResponseT, std::unique_ptr< grpc::ClientAsyncReaderInterface< ResponseT > >(StubT::*)(grpc::ClientContext *, const RequestT &, grpc::CompletionQueue *) PrepareAsyncServerStreaming, class Executor>
+class agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor >

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

+

Example:

+
asio::awaitable<void> client_rpc_server_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Request request;
+
request.set_integer(42);
+
if (!co_await rpc.start(stub, request))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Response response;
+
while (co_await rpc.read(response))
+
{
+
std::cout << "Response: " << response.integer() << '\n';
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+

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
+ + + +
PrepareAsyncServerStreamingA pointer to the generated, async version of the gRPC method. The async version starts with PrepareAsync.
ExecutorThe executor type, must be capable of referring to a GrpcContext.
+
+
+

Per-Operation Cancellation

+

Terminal and partial. Cancellation is performed by invoking grpc::ClientContext::TryCancel. After successful cancellation no further operations may be started on the rpc (except finish()). Operations are also cancelled when the deadline of the rpc has been reached (see grpc::ClientContext::set_deadline).

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::service_name ()
+
+inlinestaticconstexprnoexceptinherited
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+
Since
2.6.0
+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::method_name ()
+
+inlinestaticconstexprnoexceptinherited
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ClientRPC<&example::Example::Stub::PrepareAsyncMyMethod> the return value would be "MyMethod".

+
Since
2.6.0
+ +
+
+ +

◆ start()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::start (StubT & stub,
const RequestT & request,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Start a server-streaming request.

+
Parameters
+ + + + +
stubThe Stub that corresponds to the gRPC method.
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the rpc was started successfully. If it is false, then call finish() to obtain error details.
+
+
+ +
+
+ +

◆ read()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::read (ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Receive a message from the server.

+

May not be called concurrently with read_initial_metadata(). It is not meaningful to call it concurrently with another read on the same stream since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other server is finished sending messages or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::finish (CompletionToken && token = CompletionToken{})
+
+inlineinherited
+
+ +

Finish the rpc.

+

Indicate that the stream is to be finished and request notification for when the call has been ended.

+

May not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when:

+
    +
  • All messages from the server have been received (either known implictly, or explicitly because a previous read operation returned false).
  • +
+

The operation will finish when either:

+
    +
  • The server has returned a status.
  • +
  • The call failed for some reason and the library generated a status.
  • +
+

Note that implementations of this method attempt to receive initial metadata from the server if initial metadata has not been received yet.

+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata received from the server.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ read_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >::read_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+inlineinherited
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.js b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.js new file mode 100644 index 00000000..5f890a71 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.js @@ -0,0 +1,19 @@ +var classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4 = +[ + [ "Stub", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac81a92f73b6032ab5163473f8af67ec8", null ], + [ "Request", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ab8fe0d6e998dbb9c3dac45bb3ebea1fd", null ], + [ "Response", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a7f04ffe67672564e8fc084cea8186e9d", null ], + [ "executor_type", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "service_name", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#aeb82d28bcdb03ae6f757fe3574124b3f", null ], + [ "method_name", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ad0fbe938aa2186379c0115248e530310", null ], + [ "start", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac2a6ff58092fb44d7af8371f3e5835df", null ], + [ "read", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a05dbadc3c83ae568f787023074d91423", null ], + [ "finish", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac036fe983bdb3582a9c4ef549696cde8", null ], + [ "read_initial_metadata", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a1f3342f57017775ec75f7f3317949b05", null ], + [ "get_executor", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ade0c1cd5b69a524efbf92059fda88c1c", null ], + [ "TYPE", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a361598fd336c38e5f282457263865229", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..0f01472c --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..266270a2 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +cd926a3cf74ab86c00fd6685dddd16c3 \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..17da60cd Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..0f01472c --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..266270a2 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +cd926a3cf74ab86c00fd6685dddd16c3 \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..17da60cd Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4-members.html new file mode 100644 index 00000000..81a710c3 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4-members.html @@ -0,0 +1,145 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ClientRPC< PrepareAsyncUnary, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ClientRPC< PrepareAsyncUnary, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
context()agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
context() constagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
executor_type typedefagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >
finish(ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
method_name() noexceptagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inlinestatic
read_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
Request typedefagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >
request(agrpc::GrpcContext &grpc_context, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inlinestatic
request(const Executor &executor, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inlinestatic
Response typedefagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >
service_name() noexceptagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inlinestatic
start(StubT &stub, const RequestT &req)agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inline
Stub typedefagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >
TYPEagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >static
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html new file mode 100644 index 00000000..e8de6c03 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html @@ -0,0 +1,673 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< PrepareAsyncUnary, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ClientRPC< PrepareAsyncUnary, Executor > Class Template Reference
+
+
+ +

I/O object for client-side, unary rpcs. + More...

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ClientRPC< PrepareAsyncUnary, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ClientRPC< PrepareAsyncUnary, Executor >:
+
+
+ + + + + + + + + + + + + + + +

+Public Types

+using Stub = StubT
 The stub type.
 
+using Request = RequestT
 The response message type.
 
+using Response = ResponseT
 The request message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void start (StubT &stub, const RequestT &req)
 Start the rpc.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (ResponseT &response, CompletionToken &&token=CompletionToken{})
 Finish the rpc.
 
auto read_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Read initial metadata.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + + + + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
static auto request (agrpc::GrpcContext &grpc_context, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})
 Perform a request.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
static auto request (const Executor &executor, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})
 Start a generic unary request (executor overload)
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ClientRPCType TYPE = agrpc::ClientRPCType::UNARY
 The rpc type.
 
+

Detailed Description

+
template<class StubT, class RequestT, class ResponseT, std::unique_ptr< grpc::ClientAsyncResponseReaderInterface< ResponseT > >(StubT::*)(grpc::ClientContext *, const RequestT &, grpc::CompletionQueue *) PrepareAsyncUnary, class Executor>
+class agrpc::ClientRPC< PrepareAsyncUnary, Executor >

I/O object for client-side, unary rpcs.

+

Example:

+
asio::awaitable<void> client_rpc_unary(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
RPC::Request request;
+
RPC::Response response;
+
const grpc::Status status =
+
co_await RPC::request(grpc_context, stub, client_context, request, response);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
std::cout << "Response: " << response.integer();
+
}
+

Alternative version that waits the server's initial metadata first:

+
asio::awaitable<void> client_rpc_unary_initial_metadata(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC =
+
asio::use_awaitable_t<>::as_default_on_t<agrpc::ClientRPC<&example::v1::Example::Stub::PrepareAsyncUnary>>;
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() + std::chrono::seconds(5));
+
RPC::Request request;
+
rpc.start(stub, request);
+
co_await rpc.read_initial_metadata();
+
// Do something with:
+
// rpc.context().GetServerInitialMetadata();
+
RPC::Response response;
+
const grpc::Status status = co_await rpc.finish(response);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+

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
+ + + +
PrepareAsyncUnaryA pointer to the generated, async version of the gRPC method. The async version starts with PrepareAsync.
ExecutorThe 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
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::service_name ()
+
+inlinestaticconstexprnoexceptinherited
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+
Since
2.6.0
+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::method_name ()
+
+inlinestaticconstexprnoexceptinherited
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ClientRPC<&example::Example::Stub::PrepareAsyncMyMethod> the return value would be "MyMethod".

+
Since
2.6.0
+ +
+
+ +

◆ request()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static auto agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request (agrpc::GrpcContext & grpc_context,
StubT & stub,
grpc::ClientContext & context,
const RequestT & request,
ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inlinestaticinherited
+
+ +

Perform a request.

+
Parameters
+ + + + +
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
responseThe response message, will be filled by the server upon finishing this rpc. Must remain alive until this rpc is finished.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status). Use grpc::Status::ok() to check whether the request was successful.
+
+
+ +
+
+ +

◆ start()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+ + + + + +
+ + + + + + + + + + + +
void agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::start (StubT & stub,
const RequestT & req )
+
+inlineinherited
+
+ +

Start the rpc.

+
Parameters
+ + +
reqThe request message, save to delete when this function returns, unless a deferred completion token like agrpc::use_sender or asio::deferred is used.
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::finish (ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Finish the rpc.

+

Receive the server's response message and final status for the call.

+

This operation will finish when either:

+
    +
  • The server's response message and status have been received.
  • +
  • The server has returned a non-OK status (no message expected in this case).
  • +
  • The call failed for some reason and the library generated a non-OK status.
  • +
+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata sent from the server.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ read_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >::read_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+inlineinherited
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.js b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.js new file mode 100644 index 00000000..1ff5020a --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.js @@ -0,0 +1,20 @@ +var classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4 = +[ + [ "Stub", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#ae494858ba1fb77cc03a473d475f89fec", null ], + [ "Request", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a3cbcb0c2a8dea17a5f8e2031b5f0e135", null ], + [ "Response", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a42c626f687ccf2ac90c4f97c1428ba05", null ], + [ "executor_type", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a4bb04cc6b06744978476e7566c776c5c", null ], + [ "service_name", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a0d95b3e778fd04576727a180ced2ad49", null ], + [ "method_name", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#adca43de2480909300ee83f4e7d0fefe8", null ], + [ "request", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a53680b344c2176c7ddd5fd97e331517a", null ], + [ "request", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#adc02ff48c51bd547e52fe0b69f671dc2", null ], + [ "start", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a0cc8fb2b4fdbc30dfaa214b7faa16828", null ], + [ "finish", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a630c84662c7ffef3f82799c92b32d313", null ], + [ "read_initial_metadata", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a1f3342f57017775ec75f7f3317949b05", null ], + [ "get_executor", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#ade0c1cd5b69a524efbf92059fda88c1c", null ], + [ "TYPE", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html#aebbb738d826d482f508a01cd59fcd6b4", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..447ce1bb --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..64e4b0b2 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +89f479135b9cf816cc33fd74d9ad7300 \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..4302dd9e Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..447ce1bb --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..64e4b0b2 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +89f479135b9cf816cc33fd74d9ad7300 \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..4302dd9e Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.map b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.map new file mode 100644 index 00000000..7baad744 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.md5 new file mode 100644 index 00000000..e0ee7175 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.md5 @@ -0,0 +1 @@ +a1214ed427e254724134501867f0e60a \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.png b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.png new file mode 100644 index 00000000..46449bb2 Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_5be979306263a9411a518530be4de1fb.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.map b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.map new file mode 100644 index 00000000..7baad744 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.md5 new file mode 100644 index 00000000..e0ee7175 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.md5 @@ -0,0 +1 @@ +a1214ed427e254724134501867f0e60a \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.png b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.png new file mode 100644 index 00000000..46449bb2 Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_782469177b3a302f624f875517844517.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4-members.html new file mode 100644 index 00000000..8363877f --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4-members.html @@ -0,0 +1,145 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inline
context()agrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
context() constagrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
read(ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
read_initial_metadata(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
Request typedefagrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >
Response typedefagrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >
start(const std::string &method, grpc::GenericStub &stub, CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >inline
Stub typedefagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >
TYPEagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >static
write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
write(const RequestT &request, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
writes_done(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html new file mode 100644 index 00000000..f26c6e62 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html @@ -0,0 +1,626 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor > Class Template Reference
+
+
+ +

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

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >:
+
+
+ + + + + + +

+Classes

struct  rebind_executor
 Rebind the ClientRPC to another executor. More...
 
+ + + + + + + + + + + + + +

+Public Types

+using Stub = grpc::GenericStub
 The stub type.
 
+using Request = RequestT
 The request message type.
 
+using Response = ResponseT
 The response message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto start (const std::string &method, grpc::GenericStub &stub, CompletionToken &&token=CompletionToken{})
 Start a generic streaming request.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read_initial_metadata (CompletionToken &&token=CompletionToken{})
 Read initial metadata.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read (ResponseT &response, CompletionToken &&token=CompletionToken{})
 Receive a message from the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})
 Send a message to the server.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const RequestT &request, CompletionToken &&token=CompletionToken{})
 Send a message to the server (default WriteOptions)
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto writes_done (CompletionToken &&token=CompletionToken{})
 Signal writes done to the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (CompletionToken &&token=CompletionToken{})
 Signal writes done and finish the rpc.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ClientRPCType TYPE = agrpc::ClientRPCType::GENERIC_STREAMING
 The rpc type.
 
+

Detailed Description

+
template<class Executor>
+class agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >

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

+
Template Parameters
+ + +
ExecutorThe executor type, must be capable of referring to a GrpcContext.
+
+
+

Per-Operation Cancellation

+

Terminal and partial. Cancellation is performed by invoking grpc::ClientContext::TryCancel. After successful cancellation no further operations may be started on the rpc (except finish()). Operations are also cancelled when the deadline of the rpc has been reached (see grpc::ClientContext::set_deadline).

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ start()

+ +
+
+
+template<class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::start (const std::string & method,
grpc::GenericStub & stub,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Start a generic streaming request.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the rpc was started successfully. If it is false, then call finish() to obtain error details.
+
+
+ +
+
+ +

◆ read_initial_metadata()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read_initial_metadata (CompletionToken && token = CompletionToken{})
+
+inlineinherited
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Attention
If the server does not explicitly send initial metadata (e.g. by calling send_initial_metadata()) but waits for a message from the client instead then this function won't complete until write() is called.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ read()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read (ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Receive a message from the server.

+

This is thread-safe with respect to write() or writes_done() methods. It should not be called concurrently with other operations. It is not meaningful to call it concurrently with another read on the same stream since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other server is finished sending messages or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ write()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write (const RequestT & request,
grpc::WriteOptions options,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Send a message to the server.

+

Only one write may be outstanding at any given time. This is thread-safe with respect to read(). It should not be called concurrently with other operations.

+
Parameters
+ + + +
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the data 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).
+
+
+ +
+
+ +

◆ writes_done()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::writes_done (CompletionToken && token = CompletionToken{})
+
+inlineinherited
+
+ +

Signal writes done to the server.

+

May only be called once. Should not be called after performing a write with the set_last_message option.

+

Signal the client is done with the writes (half-close the client stream). Thread-safe with respect to read. May not be called concurrently with a write() that has the set_last_message option set.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the data 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).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::finish (CompletionToken && token = CompletionToken{})
+
+inlineinherited
+
+ +

Signal writes done and finish the rpc.

+

Indicate that the stream is to be finished and request notification for when the call has been ended.

+

May not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when:

+
    +
  • All messages from the server have been received (either known implictly, or explicitly because a previous read operation returned false).
  • +
+

The operation will finish when either:

+
    +
  • The server has returned a status.
  • +
  • The call failed for some reason and the library generated a status.
  • +
+

Note that implementations of this method attempt to receive initial metadata from the server if initial metadata has not been received yet.

+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata received from the server.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.js b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.js new file mode 100644 index 00000000..8032480e --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.js @@ -0,0 +1,21 @@ +var classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf" ], + [ "Stub", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ad20cfa0db0604367ac06d132cc5568cc", null ], + [ "Request", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ab17fb315d9316707b442296f9096519c", null ], + [ "Response", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#a09949deac664f28273aa1b4f806759b1", null ], + [ "executor_type", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "start", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ae6c73a1a9effe4787d9581cd620dad31", null ], + [ "read_initial_metadata", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#afb6a4be476b5cab862000ba87b70e289", null ], + [ "read", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ad3830bd5b441d8b80c2a5dd33ae8ad2d", null ], + [ "write", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#a613e43b75d508d451dac44e474256bf8", null ], + [ "write", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#a7617653d30c2f57cdaeffcefed89793f", null ], + [ "writes_done", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#a2d19b1441bd69861873989f76f5875e2", null ], + [ "finish", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#a9a9b990891472214354e3425616f7b23", null ], + [ "get_executor", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ade0c1cd5b69a524efbf92059fda88c1c", null ], + [ "TYPE", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#abfcfaefdbf807291d880efafd9436d64", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4-members.html new file mode 100644 index 00000000..6a4debb1 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4-members.html @@ -0,0 +1,143 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >inline
context()agrpc::detail::ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >inline
context() constagrpc::detail::ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >inline
executor_type typedefagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >
finish(grpc::ByteBuffer &response, CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
read_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >inline
Request typedefagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >
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{})agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >inlinestatic
request(const Executor &executor, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=CompletionToken{})agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >inlinestatic
Response typedefagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >
start(const std::string &method, grpc::GenericStub &stub, const grpc::ByteBuffer &req)agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >inline
Stub typedefagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >
TYPEagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >static
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html new file mode 100644 index 00000000..f98d16b8 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html @@ -0,0 +1,606 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor > Class Template Reference
+
+
+ +

I/O object for client-side, generic, unary rpcs. + More...

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >:
+
+
+ + + + + + +

+Classes

struct  rebind_executor
 Rebind the ClientRPC to another executor. More...
 
+ + + + + + + + + + + + + +

+Public Types

+using Stub = grpc::GenericStub
 The stub type.
 
+using Request = grpc::ByteBuffer
 The response message type.
 
+using Response = grpc::ByteBuffer
 The request message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void start (const std::string &method, grpc::GenericStub &stub, const grpc::ByteBuffer &req)
 Start the rpc.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (grpc::ByteBuffer &response, CompletionToken &&token=CompletionToken{})
 Finish the rpc.
 
auto read_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Read initial metadata.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + + + +

+Static Public Member Functions

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)
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ClientRPCType TYPE = agrpc::ClientRPCType::GENERIC_UNARY
 The rpc type.
 
+

Detailed Description

+
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
+ + +
ExecutorThe 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
+

Member Function Documentation

+ +

◆ request()

+ +
+
+
+template<class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static auto agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::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{} )
+
+inlinestatic
+
+ +

Start a generic unary request.

+
Parameters
+ + + + + +
methodThe gRPC method to call, e.g. "/test.v1.Test/Unary"
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
responseThe response message, will be filled by the server upon finishing this rpc. Must remain alive until this rpc is finished.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status). Use grpc::Status::ok() to check whether the request was successful.
+
+
+ +
+
+ +

◆ start()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + + + + + + + + + + +
void agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::start (const std::string & method,
grpc::GenericStub & stub,
const grpc::ByteBuffer & req )
+
+inline
+
+ +

Start the rpc.

+
Parameters
+ + + +
reqThe request message, save to delete when this function returns, unless a deferred completion token like agrpc::use_sender or asio::deferred is used.
methodThe RPC method to call, e.g. "/test.v1.Test/Unary"
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::finish (grpc::ByteBuffer & response,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Finish the rpc.

+

Receive the server's response message and final status for the call.

+

This operation will finish when either:

+
    +
  • The server's response message and status have been received.
  • +
  • The server has returned a non-OK status (no message expected in this case).
  • +
  • The call failed for some reason and the library generated a non-OK status.
  • +
+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata sent from the server.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ read_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >::read_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+inlineinherited
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.js b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.js new file mode 100644 index 00000000..32f8ad2e --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.js @@ -0,0 +1,19 @@ +var classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e" ], + [ "Stub", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a8cec6132a63b51481847db130de97d12", null ], + [ "Request", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a313126cc0eadd7c4dbbfc8aa8a45bc10", null ], + [ "Response", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a3729ec552aaf715925391a9596cc5b15", null ], + [ "executor_type", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a7b8c6b2cbac09f6f60e2495a13cffe75", null ], + [ "request", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#ad2344b88476b5a2c07448939c9edabcb", null ], + [ "request", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a71bc3a05a7738b9b87bc4ad657f189e0", null ], + [ "start", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a1ec544b72d885bd8997f071c48136862", null ], + [ "finish", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a15449f5b95e72c3df40201356f7e1c6c", null ], + [ "read_initial_metadata", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a1f3342f57017775ec75f7f3317949b05", null ], + [ "get_executor", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#ade0c1cd5b69a524efbf92059fda88c1c", null ], + [ "TYPE", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#abb156a59d90304904f66098612ed7d75", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..4221df4f --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..981f8c63 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +fc78dfd6137898e9dbbda5ce4345edcf \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..4d1fce33 Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..4221df4f --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..981f8c63 --- /dev/null +++ b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +fc78dfd6137898e9dbbda5ce4345edcf \ No newline at end of file diff --git a/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..4d1fce33 Binary files /dev/null and b/docs/classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_grpc_context-members.html b/docs/classagrpc_1_1_grpc_context-members.html new file mode 100644 index 00000000..b1258922 --- /dev/null +++ b/docs/classagrpc_1_1_grpc_context-members.html @@ -0,0 +1,147 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::GrpcContext Member List
+
+
+ +

This is the complete list of members for agrpc::GrpcContext, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedefagrpc::GrpcContext
executor_type typedefagrpc::GrpcContext
get_allocator() noexceptagrpc::GrpcContextinline
get_completion_queue() noexceptagrpc::GrpcContextinline
get_executor() noexceptagrpc::GrpcContextinline
get_scheduler() noexceptagrpc::GrpcContextinline
get_server_completion_queue() noexceptagrpc::GrpcContextinline
GrpcContext()agrpc::GrpcContextinline
GrpcContext(std::size_t concurrency_hint)agrpc::GrpcContextinlineexplicit
GrpcContext(std::unique_ptr< grpc::ServerCompletionQueue > completion_queue)agrpc::GrpcContextinlineexplicit
GrpcContext(std::unique_ptr< grpc::ServerCompletionQueue > completion_queue, std::size_t concurrency_hint)agrpc::GrpcContextinline
is_stopped() const noexceptagrpc::GrpcContextinline
poll()agrpc::GrpcContextinline
poll_completion_queue()agrpc::GrpcContextinline
reset() noexceptagrpc::GrpcContextinline
run()agrpc::GrpcContextinline
run_completion_queue()agrpc::GrpcContextinline
run_until(const Deadline &deadline)agrpc::GrpcContextinline
run_while(Condition &&condition)agrpc::GrpcContextinline
stop()agrpc::GrpcContextinline
work_finished() noexceptagrpc::GrpcContextinline
work_started() noexceptagrpc::GrpcContextinline
~GrpcContext()agrpc::GrpcContextinline
+
+ + + + diff --git a/docs/classagrpc_1_1_grpc_context.html b/docs/classagrpc_1_1_grpc_context.html new file mode 100644 index 00000000..66ae8c44 --- /dev/null +++ b/docs/classagrpc_1_1_grpc_context.html @@ -0,0 +1,879 @@ + + + + + + + + +asio-grpc: agrpc::GrpcContext Class Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::GrpcContext Class Reference
+
+
+ +

Execution context based on grpc::CompletionQueue + More...

+ +

#include <agrpc/grpc_context.hpp>

+ + + + + + + + +

+Public Types

+using executor_type = agrpc::BasicGrpcExecutor<>
 The associated executor type.
 
+using allocator_type = detail::GrpcContextLocalAllocator
 The associated allocator type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GrpcContext ()
 Construct a GrpcContext for gRPC clients.
 
 GrpcContext (std::size_t concurrency_hint)
 Construct a GrpcContext for multi-threaded gRPC clients.
 
 GrpcContext (std::unique_ptr< grpc::ServerCompletionQueue > completion_queue)
 Construct a GrpcContext for gRPC servers.
 
 GrpcContext (std::unique_ptr< grpc::ServerCompletionQueue > completion_queue, std::size_t concurrency_hint)
 Construct a GrpcContext for multi-threaded gRPC servers.
 
 ~GrpcContext ()
 Destruct the GrpcContext.
 
bool run ()
 Run ready completion handlers and grpc::CompletionQueue
 
template<class Deadline >
bool run_until (const Deadline &deadline)
 Run ready completion handlers and grpc::CompletionQueue until deadline.
 
template<class Condition >
bool run_while (Condition &&condition)
 Run ready completion handlers and grpc::CompletionQueue while a condition holds.
 
bool run_completion_queue ()
 Run the grpc::CompletionQueue
 
bool poll ()
 Poll ready completion handlers and grpc::CompletionQueue
 
bool poll_completion_queue ()
 Poll the grpc::CompletionQueue
 
void stop ()
 Signal the GrpcContext to stop.
 
void reset () noexcept
 Bring a stopped GrpcContext back into the ready state.
 
bool is_stopped () const noexcept
 Is the GrpcContext in the stopped state?
 
executor_type get_executor () noexcept
 Get the associated executor.
 
executor_type get_scheduler () noexcept
 Get the associated scheduler.
 
allocator_type get_allocator () noexcept
 Get the associated allocator.
 
void work_started () noexcept
 Signal that work has started.
 
void work_finished () noexcept
 Signal that work has finished.
 
grpc::CompletionQueue * get_completion_queue () noexcept
 Get the underlying grpc::CompletionQueue
 
grpc::ServerCompletionQueue * get_server_completion_queue () noexcept
 Get the underlying grpc::CompletionQueue
 
+

Detailed Description

+

Execution context based on grpc::CompletionQueue

+

Satisfies the ExecutionContext requirements and can therefore be used in all places where Asio expects an ExecutionContext.

+

Performance recommendation: Use exactly one GrpcContext per thread.

+

Constructor & Destructor Documentation

+ +

◆ GrpcContext() [1/4]

+ +
+
+ + + + + +
+ + + + + + + +
agrpc::GrpcContext::GrpcContext ()
+
+inline
+
+ +

Construct a GrpcContext for gRPC clients.

+
Since
2.4.0
+ +
+
+ +

◆ GrpcContext() [2/4]

+ +
+
+ + + + + +
+ + + + + + + +
agrpc::GrpcContext::GrpcContext (std::size_t concurrency_hint)
+
+inlineexplicit
+
+ +

Construct a GrpcContext for multi-threaded gRPC clients.

+
    +
  • concurrency_hint If greater than one then this GrpcContext's run*()/poll*() functions may be called from multiple threads
  • +
+
Since
3.2.0
+ +
+
+ +

◆ GrpcContext() [3/4]

+ +
+
+ + + + + +
+ + + + + + + +
agrpc::GrpcContext::GrpcContext (std::unique_ptr< grpc::ServerCompletionQueue > completion_queue)
+
+inlineexplicit
+
+ +

Construct a GrpcContext for gRPC servers.

+

The resulting GrpcContext can also be used for clients.

+

Example:

+
grpc::ServerBuilder builder;
+
agrpc::GrpcContext grpc_context{builder.AddCompletionQueue()};
+
+
+
+ +

◆ GrpcContext() [4/4]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
agrpc::GrpcContext::GrpcContext (std::unique_ptr< grpc::ServerCompletionQueue > completion_queue,
std::size_t concurrency_hint )
+
+inline
+
+ +

Construct a GrpcContext for multi-threaded gRPC servers.

+

The resulting GrpcContext can also be used for clients.

+

Example:

+
const auto concurrency = std::thread::hardware_concurrency();
+
grpc::ServerBuilder builder;
+
agrpc::GrpcContext grpc_context{builder.AddCompletionQueue(), concurrency};
+
// ... register services, start server
+
std::vector<std::thread> threads(concurrency);
+
for (auto& thread : threads)
+
{
+
thread = std::thread{[&]
+
{
+
// ... register rpc handlers
+
grpc_context.run();
+
}};
+
}
+
for (auto& thread : threads)
+
{
+
thread.join();
+
}
+
    +
  • concurrency_hint If greater than one then this GrpcContext's run*()/poll*() functions may be called from multiple threads
  • +
+
Since
3.2.0
+ +
+
+ +

◆ ~GrpcContext()

+ +
+
+ + + + + +
+ + + + + + + +
agrpc::GrpcContext::~GrpcContext ()
+
+inline
+
+ +

Destruct the GrpcContext.

+

Calls Shutdown() on the grpc::CompletionQueue and drains it. Pending completion handlers will not be invoked.

+
Attention
Make sure to destruct the GrpcContext before destructing the grpc::Server.
+ +
+
+

Member Function Documentation

+ +

◆ run()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::GrpcContext::run ()
+
+inline
+
+ +

Run ready completion handlers and grpc::CompletionQueue

+

Runs the main event loop logic until the GrpcContext runs out of work or is stopped. The GrpcContext will be brought into the ready state when this function is invoked. Upon return, the GrpcContext will be in the stopped state.

+
Attention
Only one thread may call run(), run_until(), run_while() or poll() at a time [unless this context has been constructed with a concurrency_hint greater than one. Even then it may not be called concurrently with run_completion_queue() or poll_completion_queue() (since 3.2.0)].
+
Returns
True if at least one operation has been processed.
+ +
+
+ +

◆ run_until()

+ +
+
+
+template<class Deadline >
+ + + + + +
+ + + + + + + +
bool agrpc::GrpcContext::run_until (const Deadline & deadline)
+
+inline
+
+ +

Run ready completion handlers and grpc::CompletionQueue until deadline.

+

Runs the main event loop logic until the GrpcContext runs out of work, is stopped or the specified deadline has been reached. The GrpcContext will be brought into the ready state when this function is invoked.

+
Attention
Only one thread may call run(), run_until(), run_while() or poll() at a time [unless this context has been constructed with a concurrency_hint greater than one. Even then it may not be called concurrently with run_completion_queue() or poll_completion_queue() (since 3.2.0)].
+
Template Parameters
+ + +
DeadlineA type that is compatible with grpc::TimePoint<Deadline>.
+
+
+
Returns
True if at least one operation has been processed.
+
Since
2.0.0
+ +
+
+ +

◆ run_while()

+ +
+
+
+template<class Condition >
+ + + + + +
+ + + + + + + +
bool agrpc::GrpcContext::run_while (Condition && condition)
+
+inline
+
+ +

Run ready completion handlers and grpc::CompletionQueue while a condition holds.

+

Runs the main event loop logic until the GrpcContext runs out of work, is stopped or the specified condition returns false. The GrpcContext will be brought into the ready state when this function is invoked.

+
Attention
Only one thread may call run(), run_until(), run_while() or poll() at a time [unless this context has been constructed with a concurrency_hint greater than one. Even then it may not be called concurrently with run_completion_queue() or poll_completion_queue() (since 3.2.0)].
+
Template Parameters
+ + +
ConditionA callable that returns false when the GrpcContext should stop.
+
+
+
Returns
True if at least one operation has been processed.
+
Since
2.2.0
+ +
+
+ +

◆ run_completion_queue()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::GrpcContext::run_completion_queue ()
+
+inline
+
+ +

Run the grpc::CompletionQueue

+

Runs the main event loop logic until the GrpcContext runs out of work or is stopped. Only events from the grpc::CompletionQueue will be handled. That means that completion handler that were e.g. created using asio::post(grpc_context, ...) will not be processed. The GrpcContext will be brought into the ready state when this function is invoked. Upon return, the GrpcContext will be in the stopped state.

+
Attention
Only one thread may call run_completion_queue() or poll_completion_queue() at a time [unless this context has been constructed with a concurrency_hint greater than one. Even then it may not be called concurrently with run, run_until, run_while and poll (since 3.2.0)].
+
Returns
True if at least one event has been processed.
+ +
+
+ +

◆ poll()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::GrpcContext::poll ()
+
+inline
+
+ +

Poll ready completion handlers and grpc::CompletionQueue

+

Processes all ready completion handlers and ready events of the grpc::CompletionQueue. The GrpcContext will be brought into the ready state when this function is invoked.

+
Attention
Only one thread may call run(), run_until(), run_while() or poll() at a time [unless this context has been constructed with a concurrency_hint greater than one. Even then it may not be called concurrently with run_completion_queue() or poll_completion_queue() (since 3.2.0)].
+
Returns
True if at least one operation has been processed.
+ +
+
+ +

◆ poll_completion_queue()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::GrpcContext::poll_completion_queue ()
+
+inline
+
+ +

Poll the grpc::CompletionQueue

+

Processes only ready events of the grpc::CompletionQueue. That means that completion handler that were e.g. created using asio::post(grpc_context, ...) will not be processed. The GrpcContext will be brought into the ready state when this function is invoked.

+
Attention
Only one thread may call run_completion_queue() or poll_completion_queue() at a time [unless this context has been constructed with a concurrency_hint greater than one. Even then it may not be called concurrently with run, run_until, run_while and poll (since 3.2.0)].
+
Returns
True if at least one operation has been processed.
+ +
+
+ +

◆ stop()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::GrpcContext::stop ()
+
+inline
+
+ +

Signal the GrpcContext to stop.

+

Causes a call to run() to return as soon as possible.

+

Thread-safe with regards to other functions except the destructor.

+ +
+
+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::GrpcContext::reset ()
+
+inlinenoexcept
+
+ +

Bring a stopped GrpcContext back into the ready state.

+

When a call to run() or stop() returns, the GrpcContext will be in a stopped state. This function brings the GrpcContext back into the ready state.

+

Thread-safe with regards to other functions except the destructor.

+ +
+
+ +

◆ is_stopped()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::GrpcContext::is_stopped () const
+
+inlinenodiscardnoexcept
+
+ +

Is the GrpcContext in the stopped state?

+

Thread-safe

+ +
+
+ +

◆ get_executor()

+ +
+
+ + + + + +
+ + + + + + + +
GrpcContext::executor_type agrpc::GrpcContext::get_executor ()
+
+inlinenodiscardnoexcept
+
+ +

Get the associated executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+ + + + + +
+ + + + + + + +
GrpcContext::executor_type agrpc::GrpcContext::get_scheduler ()
+
+inlinenodiscardnoexcept
+
+ +

Get the associated scheduler.

+

Thread-safe

+ +
+
+ +

◆ get_allocator()

+ +
+
+ + + + + +
+ + + + + + + +
GrpcContext::allocator_type agrpc::GrpcContext::get_allocator ()
+
+inlinenodiscardnoexcept
+
+ +

Get the associated allocator.

+
Attention
The returned allocator may only be used for allocations/deallocations within the same thread(s) that calls run*()/poll*().
+

Thread-safe

+ +
+
+ +

◆ work_started()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::GrpcContext::work_started ()
+
+inlinenoexcept
+
+ +

Signal that work has started.

+

The GrpcContext maintains an internal counter on how many operations have been started. Once that counter reaches zero it will go into the stopped state. Every call to work_started() should be matched to a call of work_finished().

+

Thread-safe

+ +
+
+ +

◆ work_finished()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::GrpcContext::work_finished ()
+
+inlinenoexcept
+
+ +

Signal that work has finished.

+

Thread-safe

+ +
+
+ +

◆ get_completion_queue()

+ +
+
+ + + + + +
+ + + + + + + +
grpc::CompletionQueue * agrpc::GrpcContext::get_completion_queue ()
+
+inlinenodiscardnoexcept
+
+ +

Get the underlying grpc::CompletionQueue

+

Do not use any functions of the returned CompletionQueue that might interfere with the GrpcContext, like Next().

+

Do not delete the returned pointer.

+

Thread-safe, never nullptr

+ +
+
+ +

◆ get_server_completion_queue()

+ +
+
+ + + + + +
+ + + + + + + +
grpc::ServerCompletionQueue * agrpc::GrpcContext::get_server_completion_queue ()
+
+inlinenodiscardnoexcept
+
+ +

Get the underlying grpc::CompletionQueue

+

Do not use any functions of the returned CompletionQueue that might interfere with the GrpcContext, like Next().

+

Do not delete the returned pointer.

+
Attention
Only valid if the GrpcContext has been constructed with a ServerCompletionQueue:
grpc::ServerBuilder builder;
+
agrpc::GrpcContext grpc_context{builder.AddCompletionQueue()};
+
+

Thread-safe, never nullptr

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_grpc_context.js b/docs/classagrpc_1_1_grpc_context.js new file mode 100644 index 00000000..83627daf --- /dev/null +++ b/docs/classagrpc_1_1_grpc_context.js @@ -0,0 +1,26 @@ +var classagrpc_1_1_grpc_context = +[ + [ "executor_type", "classagrpc_1_1_grpc_context.html#a72c65827092d85b2ce6376524e35141c", null ], + [ "allocator_type", "classagrpc_1_1_grpc_context.html#a3445ceeb54e332eabf163cc6afdc1e3d", null ], + [ "GrpcContext", "classagrpc_1_1_grpc_context.html#a1a957251b8d9b75795e0669039176301", null ], + [ "GrpcContext", "classagrpc_1_1_grpc_context.html#ab52eca52fa3fce99a8a688f3e3ed561e", null ], + [ "GrpcContext", "classagrpc_1_1_grpc_context.html#a2d955d0f205cf08dd3d0b84867702c9d", null ], + [ "GrpcContext", "classagrpc_1_1_grpc_context.html#a8944c1140241c842dd29c9e691820c10", null ], + [ "~GrpcContext", "classagrpc_1_1_grpc_context.html#ad54076bc77ee6db3f167b2ad073db171", null ], + [ "run", "classagrpc_1_1_grpc_context.html#acb1dae170b054aba4c83e266c456fee0", null ], + [ "run_until", "classagrpc_1_1_grpc_context.html#af6615f2abd46956145dcfe88e69f4004", null ], + [ "run_while", "classagrpc_1_1_grpc_context.html#a21dc3e81f8d5c11969add93a7a24e363", null ], + [ "run_completion_queue", "classagrpc_1_1_grpc_context.html#a627dcc6bc3401d204d976b6fea6e00a3", null ], + [ "poll", "classagrpc_1_1_grpc_context.html#a4eb77d4c7fe553bc7b8aa7bc0c73fc22", null ], + [ "poll_completion_queue", "classagrpc_1_1_grpc_context.html#af35c5d430df1d778320a2fe51ec40102", null ], + [ "stop", "classagrpc_1_1_grpc_context.html#aee29d403f03ef487d22efdf2079c46bc", null ], + [ "reset", "classagrpc_1_1_grpc_context.html#a9da2b2b94e92a9d46e1309209002784b", null ], + [ "is_stopped", "classagrpc_1_1_grpc_context.html#af71bfc1a827acb00e275161f189ea151", null ], + [ "get_executor", "classagrpc_1_1_grpc_context.html#ab82f48f7e09542f242b683cda49aa6a9", null ], + [ "get_scheduler", "classagrpc_1_1_grpc_context.html#add171728b45fddd5740e4a3c9549bd3b", null ], + [ "get_allocator", "classagrpc_1_1_grpc_context.html#ab38d929d30e72aface90b3d429727d33", null ], + [ "work_started", "classagrpc_1_1_grpc_context.html#ada19710c265c3a1e9cbffb696d079fbb", null ], + [ "work_finished", "classagrpc_1_1_grpc_context.html#a9f89631518b2d38dbe0be11f7d5a4cc6", null ], + [ "get_completion_queue", "classagrpc_1_1_grpc_context.html#a897a9de9af8a2b81bbeef2f7fe0d0c63", null ], + [ "get_server_completion_queue", "classagrpc_1_1_grpc_context.html#a43be219d02581b5959b120bc9f869fce", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_health_check_service-members.html b/docs/classagrpc_1_1_health_check_service-members.html new file mode 100644 index 00000000..f75ad6be --- /dev/null +++ b/docs/classagrpc_1_1_health_check_service-members.html @@ -0,0 +1,130 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::HealthCheckService Member List
+
+
+ +

This is the complete list of members for agrpc::HealthCheckService, including all inherited members.

+ + + + + + + +
add_health_check_service(grpc::ServerBuilder &builder)agrpc::HealthCheckServicerelated
SetServingStatus(const std::string &service_name, bool serving)agrpc::HealthCheckServiceinline
SetServingStatus(bool serving)agrpc::HealthCheckServiceinline
Shutdown()agrpc::HealthCheckServiceinline
start_health_check_service(agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)agrpc::HealthCheckServicerelated
start_health_check_service(grpc::Server &server, agrpc::GrpcContext &grpc_context)agrpc::HealthCheckServicerelated
+
+ + + + diff --git a/docs/classagrpc_1_1_health_check_service.html b/docs/classagrpc_1_1_health_check_service.html new file mode 100644 index 00000000..6e02cd78 --- /dev/null +++ b/docs/classagrpc_1_1_health_check_service.html @@ -0,0 +1,363 @@ + + + + + + + + +asio-grpc: agrpc::HealthCheckService Class Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::HealthCheckService Class Referencefinal
+
+
+ +

CompletionQueue-based implementation of grpc::HealthCheckServiceInterface. + More...

+ +

#include <agrpc/health_check_service.hpp>

+ + + + + + + + + + + +

+Public Member Functions

void SetServingStatus (const std::string &service_name, bool serving)
 Set or change the serving status of the given service_name.
 
void SetServingStatus (bool serving)
 Apply a serving status to all registered service names.
 
void Shutdown ()
 Set all registered service names to not serving and prevent future state changes.
 
+ + + + + + + + + + + +

+Related Symbols

(Note that these are not member symbols.)

+
grpc::ServerBuilder & add_health_check_service (grpc::ServerBuilder &builder)
 Add a HealthCheckService to a grpc::Server
 
void start_health_check_service (agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)
 Start a previously added HealthCheckService.
 
void start_health_check_service (grpc::Server &server, agrpc::GrpcContext &grpc_context)
 Start a previously added HealthCheckService (grpc::Server overload)
 
+

Detailed Description

+

CompletionQueue-based implementation of grpc::HealthCheckServiceInterface.

+

This class is a drop-in replacement for the grpc::DefaultHealthCheckService. It should be added to a grpc::ServerBuilder using add_health_check_service().

+

Motivation: grpc::DefaultHealthCheckService is implemented in terms of gRPC's generic callback API. Mixing callback services and CompletionQueue-based services in one grpc::Server significantly degrades performance.

+
Note
In order to use this class you must compile and link with health.proto. If your compiler does not support __has_include then you must also include health.grpc.pb.h before including agrpc/health_check_service.hpp.
+
Since
2.3.0
+

Member Function Documentation

+ +

◆ SetServingStatus() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
void agrpc::HealthCheckService::SetServingStatus (const std::string & service_name,
bool serving )
+
+inline
+
+ +

Set or change the serving status of the given service_name.

+

Thread-safe

+ +
+
+ +

◆ SetServingStatus() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::HealthCheckService::SetServingStatus (bool serving)
+
+inline
+
+ +

Apply a serving status to all registered service names.

+

Thread-safe

+ +
+
+ +

◆ Shutdown()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::HealthCheckService::Shutdown ()
+
+inline
+
+ +

Set all registered service names to not serving and prevent future state changes.

+

Thread-safe

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ add_health_check_service()

+ +
+
+ + + + + +
+ + + + + + + +
grpc::ServerBuilder & add_health_check_service (grpc::ServerBuilder & builder)
+
+related
+
+ +

Add a HealthCheckService to a grpc::Server

+

Must be called before grpc::ServerBuilder.BuildAndStart() and the service must be started using start_health_check_service() afterwards. May only be called once for a given ServerBuilder.

+

Example:

+
std::unique_ptr<grpc::Server> server;
+
grpc::ServerBuilder builder;
+
agrpc::GrpcContext grpc_context{builder.AddCompletionQueue()};
+
agrpc::add_health_check_service(builder);
+
server = builder.BuildAndStart();
+
agrpc::start_health_check_service(*server, grpc_context);
+
Since
2.3.0
+ +
+
+ +

◆ start_health_check_service() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
void start_health_check_service (agrpc::HealthCheckService & service,
agrpc::GrpcContext & grpc_context )
+
+related
+
+ +

Start a previously added HealthCheckService.

+

Must be called after grpc::ServerBuilder.BuildAndStart(). The service must have been added using add_health_check_service(). May only be called once for a given HealthCheckService.

+

Does not contribute to the work tracking of the GrpcContext.

+
Attention
May not be called concurrently with GrpcContext::run/poll. May not be used with a multi-threaded GrpcContext.
+
Note
When using GrpcContext::run/poll_completion_queue then none of the member functions of the service may be used.
+
Since
2.3.0
+ +
+
+ +

◆ start_health_check_service() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
void start_health_check_service (grpc::Server & server,
agrpc::GrpcContext & grpc_context )
+
+related
+
+ +

Start a previously added HealthCheckService (grpc::Server overload)

+

The service must have been added using add_health_check_service(). May only be called once for a given HealthCheckService.

+

Effectively performs:

+
auto* service = static_cast<agrpc::HealthCheckService*>(server.GetHealthCheckService());
+
agrpc::start_health_check_service(*service, grpc_context);
+
CompletionQueue-based implementation of grpc::HealthCheckServiceInterface.
Definition health_check_service.hpp:56
+
Since
2.3.0
+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_health_check_service.js b/docs/classagrpc_1_1_health_check_service.js new file mode 100644 index 00000000..a5454802 --- /dev/null +++ b/docs/classagrpc_1_1_health_check_service.js @@ -0,0 +1,9 @@ +var classagrpc_1_1_health_check_service = +[ + [ "SetServingStatus", "classagrpc_1_1_health_check_service.html#a38397dcd756e5356973bddabe68b8ef7", null ], + [ "SetServingStatus", "classagrpc_1_1_health_check_service.html#a326d63fafa352ab8b2457545c46c5a34", null ], + [ "Shutdown", "classagrpc_1_1_health_check_service.html#aa48421a22334257415189455ce4200b7", null ], + [ "add_health_check_service", "classagrpc_1_1_health_check_service.html#a886bd0e1412d8fc13ca2a5959aab07fb", null ], + [ "start_health_check_service", "classagrpc_1_1_health_check_service.html#a7a1da8eae5be01bec3a8f6a8be75932f", null ], + [ "start_health_check_service", "classagrpc_1_1_health_check_service.html#a55f352e270845728106e5dd3da20e668", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c.html b/docs/classagrpc_1_1_server_r_p_c.html new file mode 100644 index 00000000..3f265e88 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c.html @@ -0,0 +1,136 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestRPC, Traits, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ServerRPC< RequestRPC, Traits, Executor > Class Template Reference
+
+
+ +

Primary ServerRPC template. + More...

+

Detailed Description

+
template<auto RequestRPC, class Traits = agrpc::DefaultServerRPCTraits, class Executor = agrpc::BasicGrpcExecutor<>>
+class agrpc::ServerRPC< RequestRPC, Traits, Executor >

Primary ServerRPC template.

+

This is the main entrypoint for implementing asynchronous gRPC servers.

+
See also
agrpc::ServerRPC<RequestUnary,TraitsT,Executor>
+ agrpc::ServerRPC<RequestClientStreaming,TraitsT,Executor>
+ agrpc::ServerRPC<RequestServerStreaming,TraitsT,Executor>
+ agrpc::ServerRPC<RequestBidiStreaming,TraitsT,Executor>
+ agrpc::ServerRPC<agrpc::ServerRPCType::GENERIC,TraitsT,Executor>
+
+
Since
2.7.0
+
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4-members.html new file mode 100644 index 00000000..ad4436d6 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4-members.html @@ -0,0 +1,147 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
is_done() const noexceptagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >inline
method_name() noexceptagrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >inlinestatic
Ptr typedefagrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >
read(RequestT &req, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
Request typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
Response typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
send_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
ServerRPC()=deleteagrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >
service_name() noexceptagrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >inlinestatic
Traits typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
TYPEagrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >static
wait_for_done(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >inline
write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write(const ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html new file mode 100644 index 00000000..1795cefa --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html @@ -0,0 +1,799 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor > Class Template Reference
+
+
+ +

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

+ +

#include <agrpc/server_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >:
+
+
+ + + + + + +

+Classes

struct  rebind_executor
 Rebind the ServerRPC to another executor. More...
 
+ + + + + + + + + + + + + + + + +

+Public Types

+using Ptr = agrpc::ServerRPCPtr<ServerRPC>
 ServerRPCPtr specialized on this type.
 
+using Request = RequestT
 The response message type.
 
+using Response = ResponseT
 The request message type.
 
+using Traits = TraitsT
 The traits type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ServerRPC ()=delete
 Deleted default constructor.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read (RequestT &req, CompletionToken &&token=CompletionToken{})
 Receive a message from the client.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})
 Send a message to the client.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const ResponseT &response, CompletionToken &&token=CompletionToken{})
 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=CompletionToken{})
 Coalesce write and finish of this rpc.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write_and_finish (const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Coalesce write and finish of this rpc (default WriteOptions)
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Finish this rpc.
 
auto send_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Send initial metadata.
 
bool is_done () const noexcept
 Is this rpc done?
 
auto wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Wait for done.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ServerRPCType TYPE = agrpc::ServerRPCType::BIDIRECTIONAL_STREAMING
 The rpc type.
 
+

Detailed Description

+
template<class ServiceT, class RequestT, class ResponseT, detail::ServerBidiStreamingRequest< ServiceT, RequestT, ResponseT > RequestBidiStreaming, class TraitsT, class Executor>
+class agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >

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

+

Use one of the agrpc::register_ functions to set up request handling.

+

Example:

+
void server_rpc_bidirectional_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<agrpc::ServerRPC<
+
&example::v1::Example::AsyncService::RequestBidirectionalStreaming>>;
+ +
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
RPC::Response response;
+
while (co_await rpc.read(request))
+
{
+
response.set_integer(request.integer());
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
response.set_integer(42);
+
co_await rpc.write(response, grpc::WriteOptions{}.set_last_message());
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+

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
+ + + + +
RequestUnaryA pointer to the generated gRPC method.
TraitsA type used to customize this rpc. See agrpc::DefaultServerRPCTraits.
ExecutorThe executor type, must be capable of referring to a 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.

+
Since
2.7.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerBidiStreamingRequest< ServiceT, RequestT, ResponseT > RequestBidiStreaming, class TraitsT , class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::service_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerBidiStreamingRequest< ServiceT, RequestT, ResponseT > RequestBidiStreaming, class TraitsT , class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::method_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ServerRPC<&example::Example::AsyncService::RequestMyMethod> the return value would be "MyMethod".

+ +
+
+ +

◆ read()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::read (RequestT & req,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Receive a message from the client.

+

May not be called currently with finish()/write_and_finish(). It is not meaningful to call it concurrently with another read on the same rpc since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other side has called WritesDone() or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ write()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write (const ResponseT & response,
grpc::WriteOptions options,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Send a message to the client.

+

Only one write may be outstanding at any given time. It may not be called concurrently with operations other than read().

+

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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ write_and_finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish (const ResponseT & response,
grpc::WriteOptions options,
const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Coalesce write and finish of this rpc.

+

Write response and coalesce it with trailing metadata which contains status, using WriteOptions options. May not be used concurrently with other operations.

+

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:

+
    +
  • The ServerContext associated with the call is used for sending trailing (and initial) metadata to the client.
  • +
+
Note
Status must have an OK code.
+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::finish (const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Finish this rpc.

+

Indicate that the stream is to be finished with a certain status code.

+

Completes when the server has sent the appropriate signals to the client to end the call.

+

Should not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when either:

+
    +
  • all messages from the client have been received (either known implicitly, or explicitly because a previous read operation completed with false).
  • +
  • it is desired to end the call early with some non-OK status code.
  • +
+

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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ send_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::send_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ is_done()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, ResponderT< ResponseT, RequestT >, Executor >::is_done () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Is this rpc done?

+

Only available if Traits contain NOTIFY_WHEN_DONE = true.

+

Returns true if NotifyWhenDone has fired which indicates that finish() has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).

+

Thread-safe

+ +
+
+ +

◆ wait_for_done()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, ResponderT< ResponseT, RequestT >, Executor >::wait_for_done (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+

Internally, this operation uses grpc::ServerContext::AsyncNotifyWhenDone.

+
Attention
Only one call to wait_for_done() may be outstanding at a time.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void().
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.js b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.js new file mode 100644 index 00000000..77b9c507 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.js @@ -0,0 +1,27 @@ +var classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html", "structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor" ], + [ "Ptr", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a482df6736133eb6cfabf930cc8e7db49", null ], + [ "Request", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#af85c5d0f47f0b6e6244efd65a2dedbd6", null ], + [ "Response", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ab8caf2b42da62017857e5f8d3b830353", null ], + [ "Traits", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a6497720ecb8d23c3b31fccee67f51a10", null ], + [ "executor_type", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "ServerRPC", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a5b78d65f5628c9eaf4a521399a7ab0ba", null ], + [ "service_name", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ab0c6dea77cb83891df6a5be872075877", null ], + [ "method_name", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a91d048483317e75723c7edf507011245", null ], + [ "read", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a150a96890cdc34ca0ea8980ee33df2ec", null ], + [ "write", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a078d5b4d7735cb5557cdeadb52fd8c02", null ], + [ "write", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a24a943e21a084ebb38c1e3f42810d145", null ], + [ "write_and_finish", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#adeecd7e5bda6de28ad8e09933c8cd8b8", null ], + [ "write_and_finish", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a333763a4595ed96f57915d8ba8c747d5", null ], + [ "finish", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a06bd50403d88fa57b48a7e25f6ffdaf1", null ], + [ "send_initial_metadata", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a2476f3477572b896d89f6ac21cb59928", null ], + [ "is_done", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a42255cc87cf854a4d2bc04315f7647d5", null ], + [ "wait_for_done", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a8ac96d7413a2fd8465136d9815acca24", null ], + [ "get_executor", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ad8085a81b22c9af295c206f2f8c3af26", null ], + [ "TYPE", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a54e3bd847fd4509a223660588413c69f", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..a1556da2 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..96dc26db --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +82d9914188d69815ff38f20a4fee06c0 \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..79a013a1 Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..a1556da2 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..96dc26db --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +82d9914188d69815ff38f20a4fee06c0 \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..79a013a1 Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4-members.html new file mode 100644 index 00000000..7ffe1c12 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4-members.html @@ -0,0 +1,144 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >inline
finish_with_error(const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
is_done() const noexceptagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >inline
method_name() noexceptagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >inlinestatic
Ptr typedefagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >
read(RequestT &req, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >inline
Request typedefagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >
Response typedefagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >
send_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCBase< grpc::ServerAsyncReader< ResponseT, RequestT >, TraitsT, Executor >inline
ServerRPC()=deleteagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >
service_name() noexceptagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >inlinestatic
Traits typedefagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >
TYPEagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >static
wait_for_done(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html new file mode 100644 index 00000000..702e728c --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html @@ -0,0 +1,722 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor > Class Template Reference
+
+
+ +

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

+ +

#include <agrpc/server_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >:
+
+
+ + + + + + +

+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 read (RequestT &req, CompletionToken &&token=CompletionToken{})
 Receive a message from the client.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Finish the rpc.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish_with_error (const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Finish the rpc with an error.
 
auto send_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Send initial metadata.
 
bool is_done () const noexcept
 Is this rpc done?
 
auto wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Wait for done.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ServerRPCType TYPE = agrpc::ServerRPCType::CLIENT_STREAMING
 The rpc type.
 
+

Detailed Description

+
template<class ServiceT, class RequestT, class ResponseT, detail::ServerClientStreamingRequest< ServiceT, RequestT, ResponseT > RequestClientStreaming, class TraitsT, class Executor>
+class agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >

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

+

Use one of the agrpc::register_ functions to set up request handling.

+

Example:

+
void server_rpc_client_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
while (co_await rpc.read(request))
+
{
+
std::cout << "Request: " << request.integer() << std::endl;
+
}
+
RPC::Response response;
+
response.set_integer(42);
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
// Alternatively finish with an error:
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+

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
+ + + + +
RequestUnaryA pointer to the generated gRPC method.
TraitsA type used to customize this rpc. See agrpc::DefaultServerRPCTraits.
ExecutorThe executor type, must be capable of referring to a 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.

+
Since
2.7.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerClientStreamingRequest< ServiceT, RequestT, ResponseT > RequestClientStreaming, class TraitsT , class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::service_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerClientStreamingRequest< ServiceT, RequestT, ResponseT > RequestClientStreaming, class TraitsT , class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::method_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ServerRPC<&example::Example::AsyncService::RequestMyMethod> the return value would be "MyMethod".

+ +
+
+ +

◆ read()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerClientStreamingRequest< ServiceT, RequestT, ResponseT > RequestClientStreaming, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::read (RequestT & req,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Receive a message from the client.

+

May not be called currently with finish()/finish_with_error(). It is not meaningful to call it concurrently with another read on the same rpc since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other side has called WritesDone() or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerClientStreamingRequest< ServiceT, RequestT, ResponseT > RequestClientStreaming, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish (const ResponseT & response,
const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Finish the rpc.

+

Indicate that the stream is to be finished with a certain status code and also send out a response to the client.

+

Should not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when:

+
    +
  • all messages from the client have been received (either known implicitly, or explicitly because a previous read operation completed with false).
  • +
+

This operation will end when the server has finished sending out initial and trailing metadata, response message, and status, or if some failure occurred when trying to do so.

+
Note
Response is not sent if status has a non-OK code.
+

GRPC does not take ownership or a reference to response or status, so it is safe to deallocate once finish() returns, unless a deferred completion token like agrpc::use_sender or asio::deferred is used.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ finish_with_error()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerClientStreamingRequest< ServiceT, RequestT, ResponseT > RequestClientStreaming, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish_with_error (const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Finish the rpc with an error.

+

Indicate that the stream is to be finished with a certain non-OK status code.

+

Should not be used concurrently with other operations and may only be called once.

+

This call is meant to end the call with some error, and can be called at any point that the server would like to "fail" the call (except during send_initial_metadata).

+

This operation will end when the server has finished sending out initial and trailing metadata 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_with_error() returns, unless a deferred completion token like agrpc::use_sender or asio::deferred is used.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ send_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCBase< grpc::ServerAsyncReader< ResponseT, RequestT >, TraitsT, Executor >::send_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ is_done()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >::is_done () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Is this rpc done?

+

Only available if Traits contain NOTIFY_WHEN_DONE = true.

+

Returns true if NotifyWhenDone has fired which indicates that finish() has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).

+

Thread-safe

+ +
+
+ +

◆ wait_for_done()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >::wait_for_done (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+

Internally, this operation uses grpc::ServerContext::AsyncNotifyWhenDone.

+
Attention
Only one call to wait_for_done() may be outstanding at a time.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void().
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.js b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.js new file mode 100644 index 00000000..3942797b --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.js @@ -0,0 +1,24 @@ +var classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html", "structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor" ], + [ "Request", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a8574c668f8b1c3ea7af13fcbfe5c6eed", null ], + [ "Response", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac7c7485017b9601a6070a8df3999b2ae", null ], + [ "Traits", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a687d30c3fb955b30cd9faa415ac31304", null ], + [ "Ptr", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a932e38d5ef3fa85fe3671981b0baf157", null ], + [ "executor_type", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "ServerRPC", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a698de8d72aa58e56b689869cb36906e9", null ], + [ "service_name", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#acd6a9daff41e97b6fa89e3d3960004cf", null ], + [ "method_name", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ab43a75cf63b59377a1a5c3e6620f8f62", null ], + [ "read", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a720d458d8ef3d94744ac11b1c761c207", null ], + [ "finish", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ae915630877540d3ab6b37fb245a0158b", null ], + [ "finish_with_error", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac174e0b37b341946fca06848d2d65ead", null ], + [ "send_initial_metadata", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a2476f3477572b896d89f6ac21cb59928", null ], + [ "is_done", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a42255cc87cf854a4d2bc04315f7647d5", null ], + [ "wait_for_done", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a8ac96d7413a2fd8465136d9815acca24", null ], + [ "get_executor", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ad8085a81b22c9af295c206f2f8c3af26", null ], + [ "TYPE", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a6594380528bd6c1ad91f93e51c3db97a", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..c76fa9a4 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..8a32272c --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +0dca7ae3103f900e3deab852e68fec1f \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..163e7e7c Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..c76fa9a4 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..8a32272c --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +0dca7ae3103f900e3deab852e68fec1f \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..163e7e7c Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4-members.html new file mode 100644 index 00000000..83ec0faa --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4-members.html @@ -0,0 +1,146 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
is_done() const noexceptagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncWriter< ResponseT >, Executor >inline
method_name() noexceptagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >inlinestatic
Ptr typedefagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >
Request typedefagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >
Response typedefagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >
send_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCBase< grpc::ServerAsyncWriter< ResponseT >, TraitsT, Executor >inline
ServerRPC()=deleteagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >
service_name() noexceptagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >inlinestatic
Traits typedefagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >
TYPEagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >static
wait_for_done(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncWriter< ResponseT >, Executor >inline
write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >inline
write(const ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >inline
write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >inline
write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html new file mode 100644 index 00000000..6fc20a70 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html @@ -0,0 +1,740 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor > Class Template Reference
+
+
+ +

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

+ +

#include <agrpc/server_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >:
+
+
+ + + + + + +

+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=CompletionToken{})
 Send a message to the client.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const ResponseT &response, CompletionToken &&token=CompletionToken{})
 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=CompletionToken{})
 Coalesce write and finish of this rpc.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write_and_finish (const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Coalesce write and finish of this rpc (default WriteOptions)
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Finish this rpc.
 
auto send_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Send initial metadata.
 
bool is_done () const noexcept
 Is this rpc done?
 
auto wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Wait for done.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ServerRPCType TYPE = agrpc::ServerRPCType::SERVER_STREAMING
 The rpc type.
 
+

Detailed Description

+
template<class ServiceT, class RequestT, class ResponseT, detail::ServerServerStreamingRequest< ServiceT, RequestT, ResponseT > RequestServerStreaming, class TraitsT, class Executor>
+class agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >

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

+

Use one of the agrpc::register_ functions to set up request handling.

+

Example:

+
void server_rpc_server_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
for (int i{}; i != request.integer(); ++i)
+
{
+
response.set_integer(i);
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+

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
+ + + + +
RequestUnaryA pointer to the generated gRPC method.
TraitsA type used to customize this rpc. See agrpc::DefaultServerRPCTraits.
ExecutorThe executor type, must be capable of referring to a 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.

+
Since
2.7.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerServerStreamingRequest< ServiceT, RequestT, ResponseT > RequestServerStreaming, class TraitsT , class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::service_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerServerStreamingRequest< ServiceT, RequestT, ResponseT > RequestServerStreaming, class TraitsT , class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::method_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ServerRPC<&example::Example::AsyncService::RequestMyMethod> the return value would be "MyMethod".

+ +
+
+ +

◆ write()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerServerStreamingRequest< ServiceT, RequestT, ResponseT > RequestServerStreaming, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write (const ResponseT & response,
grpc::WriteOptions options,
CompletionToken && token = CompletionToken{} )
+
+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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ write_and_finish()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerServerStreamingRequest< ServiceT, RequestT, ResponseT > RequestServerStreaming, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
auto agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish (const ResponseT & response,
grpc::WriteOptions options,
const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+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:

+
    +
  • The ServerContext associated with the call is used for sending trailing (and initial) metadata to the client.
  • +
+
Note
Status must have an OK code.
+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerServerStreamingRequest< ServiceT, RequestT, ResponseT > RequestServerStreaming, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::finish (const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ send_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCBase< grpc::ServerAsyncWriter< ResponseT >, TraitsT, Executor >::send_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ is_done()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, grpc::ServerAsyncWriter< ResponseT >, Executor >::is_done () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Is this rpc done?

+

Only available if Traits contain NOTIFY_WHEN_DONE = true.

+

Returns true if NotifyWhenDone has fired which indicates that finish() has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).

+

Thread-safe

+ +
+
+ +

◆ wait_for_done()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, grpc::ServerAsyncWriter< ResponseT >, Executor >::wait_for_done (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+

Internally, this operation uses grpc::ServerContext::AsyncNotifyWhenDone.

+
Attention
Only one call to wait_for_done() may be outstanding at a time.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void().
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.js b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.js new file mode 100644 index 00000000..01eb3451 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.js @@ -0,0 +1,26 @@ +var classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html", "structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor" ], + [ "Request", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4890e4677616bb468f2254fc2e33d626", null ], + [ "Response", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#afd405ca5e8fb6126941bef62c78aa0de", null ], + [ "Traits", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4efa88efaadea9af27c4586f5388613d", null ], + [ "Ptr", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a558850727f602f2ffeee6fbdac1dfe67", null ], + [ "executor_type", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "ServerRPC", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#af44544ec93a0e434636e08f9b15e0517", null ], + [ "service_name", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a6057033b1bfcbc06250a742229fe2357", null ], + [ "method_name", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a12aba29fbd910034827e1c1fa63c98fb", null ], + [ "write", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#afabeae4521f21d32c3818aba6bc86b95", null ], + [ "write", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a1a44c44a2233463244d0c520067631af", null ], + [ "write_and_finish", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#af23fd4f5cd3520638508859955422fd3", null ], + [ "write_and_finish", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a27712fdf010df228fa4fba90874b93ee", null ], + [ "finish", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4513751b3b4dc0cd93d8d72d33b5fcdc", null ], + [ "send_initial_metadata", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a2476f3477572b896d89f6ac21cb59928", null ], + [ "is_done", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a42255cc87cf854a4d2bc04315f7647d5", null ], + [ "wait_for_done", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a8ac96d7413a2fd8465136d9815acca24", null ], + [ "get_executor", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#ad8085a81b22c9af295c206f2f8c3af26", null ], + [ "TYPE", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a159db6cacc50132ff946138097111d9a", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..84187c75 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..187c336d --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +4c63a8a31e560ad83f347243eaa25345 \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..e63cb633 Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..84187c75 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..187c336d --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +4c63a8a31e560ad83f347243eaa25345 \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..e63cb633 Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4-members.html new file mode 100644 index 00000000..5f7d4e93 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4-members.html @@ -0,0 +1,143 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ServerRPC< RequestUnary, TraitsT, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ServerRPC< RequestUnary, TraitsT, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestUnary, TraitsT, Executor >inline
finish_with_error(const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::ServerRPC< RequestUnary, TraitsT, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
is_done() const noexceptagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >inline
method_name() noexceptagrpc::ServerRPC< RequestUnary, TraitsT, Executor >inlinestatic
Ptr typedefagrpc::ServerRPC< RequestUnary, TraitsT, Executor >
Request typedefagrpc::ServerRPC< RequestUnary, TraitsT, Executor >
Response typedefagrpc::ServerRPC< RequestUnary, TraitsT, Executor >
send_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCBase< grpc::ServerAsyncResponseWriter< ResponseT >, TraitsT, Executor >inline
ServerRPC()=deleteagrpc::ServerRPC< RequestUnary, TraitsT, Executor >
service_name() noexceptagrpc::ServerRPC< RequestUnary, TraitsT, Executor >inlinestatic
Traits typedefagrpc::ServerRPC< RequestUnary, TraitsT, Executor >
TYPEagrpc::ServerRPC< RequestUnary, TraitsT, Executor >static
wait_for_done(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html new file mode 100644 index 00000000..19f4ac1a --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html @@ -0,0 +1,672 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestUnary, TraitsT, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ServerRPC< RequestUnary, TraitsT, Executor > Class Template Reference
+
+
+ +

I/O object for server-side, unary rpcs. + More...

+ +

#include <agrpc/server_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ServerRPC< RequestUnary, TraitsT, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ServerRPC< RequestUnary, TraitsT, Executor >:
+
+
+ + + + + + +

+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 finish (const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Finish the rpc.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish_with_error (const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Finish the rpc with an error.
 
auto send_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Send initial metadata.
 
bool is_done () const noexcept
 Is this rpc done?
 
auto wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Wait for done.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ServerRPCType TYPE = agrpc::ServerRPCType::UNARY
 The rpc type.
 
+

Detailed Description

+
template<class ServiceT, class RequestT, class ResponseT, detail::ServerUnaryRequest< ServiceT, RequestT, ResponseT > RequestUnary, class TraitsT, class Executor>
+class agrpc::ServerRPC< RequestUnary, TraitsT, Executor >

I/O object for server-side, unary rpcs.

+

Use one of the agrpc::register_ functions to set up request handling.

+

Example:

+
void server_rpc_unary(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
response.set_integer(request.integer());
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
// Alternatively finish with an error:
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+

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
+ + + + +
RequestUnaryA pointer to the generated gRPC method.
TraitsA type used to customize this rpc. See agrpc::DefaultServerRPCTraits.
ExecutorThe executor type, must be capable of referring to a 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.

+
Since
2.7.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerUnaryRequest< ServiceT, RequestT, ResponseT > RequestUnary, class TraitsT , class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::service_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerUnaryRequest< ServiceT, RequestT, ResponseT > RequestUnary, class TraitsT , class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::method_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ServerRPC<&example::Example::AsyncService::RequestMyMethod> the return value would be "MyMethod".

+ +
+
+ +

◆ finish()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerUnaryRequest< ServiceT, RequestT, ResponseT > RequestUnary, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish (const ResponseT & response,
const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Finish the rpc.

+

Indicate that the RPC is to be finished and request notification when the server has sent the appropriate signals to the client to end the call. Should not be used concurrently with other operations.

+

Side effect:

+
    +
  • Also sends initial metadata if not already sent (using the ServerContext associated with the call).
  • +
+
Note
If status has a non-OK code, then message will not be sent, and the client will receive only the status with possible trailing metadata.
+

GRPC does not take ownership or a reference to response and status, so it is safe to deallocate once finish() returns, unless a deferred completion token like agrpc::use_sender or asio::deferred is used.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ finish_with_error()

+ +
+
+
+template<class ServiceT , class RequestT , class ResponseT , detail::ServerUnaryRequest< ServiceT, RequestT, ResponseT > RequestUnary, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish_with_error (const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Finish the rpc with an error.

+

Indicate that the stream is to be finished with a non-OK status, and request notification for when the server has finished sending the appropriate signals to the client to end the call.

+

It should not be called concurrently with other streaming APIs on the same stream.

+

Side effect:

+
    +
  • Sends initial metadata if not already sent (using the ServerContext associated with this call).
  • +
+

GRPC does not take ownership or a reference to status, so it is safe to deallocate once finish_with_error() returns, unless a deferred completion token like agrpc::use_sender or asio::deferred is used.

+
Note
Status must have a non-OK code.
+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ send_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCBase< grpc::ServerAsyncResponseWriter< ResponseT >, TraitsT, Executor >::send_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ is_done()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >::is_done () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Is this rpc done?

+

Only available if Traits contain NOTIFY_WHEN_DONE = true.

+

Returns true if NotifyWhenDone has fired which indicates that finish() has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).

+

Thread-safe

+ +
+
+ +

◆ wait_for_done()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >::wait_for_done (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+

Internally, this operation uses grpc::ServerContext::AsyncNotifyWhenDone.

+
Attention
Only one call to wait_for_done() may be outstanding at a time.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void().
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.js b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.js new file mode 100644 index 00000000..226ba742 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.js @@ -0,0 +1,23 @@ +var classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html", "structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor" ], + [ "Request", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a35d5a54c0d5d64aabf433328327646f8", null ], + [ "Response", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a84678c4ada6372cefea2ea32aeb74fe9", null ], + [ "Traits", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a4d77bf4c5da303dcefa3425b4345ab17", null ], + [ "Ptr", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ad342db335d28b900bd34f9176ecd7375", null ], + [ "executor_type", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "ServerRPC", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a86a399b203ead3c545179330c6c88c5d", null ], + [ "service_name", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aa7bb65e6fc755d0f701fefd18fc59ba7", null ], + [ "method_name", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a972d0b1fe31b202d0cb400f2822cbd55", null ], + [ "finish", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a7c0197a93b56275d3d8e1318ca8993b0", null ], + [ "finish_with_error", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aae58a33c70a9ba0ceb014fbc4a650f05", null ], + [ "send_initial_metadata", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a2476f3477572b896d89f6ac21cb59928", null ], + [ "is_done", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a42255cc87cf854a4d2bc04315f7647d5", null ], + [ "wait_for_done", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a8ac96d7413a2fd8465136d9815acca24", null ], + [ "get_executor", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ad8085a81b22c9af295c206f2f8c3af26", null ], + [ "TYPE", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#abbf4b20cf13937e19ad04e23a63571d8", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..861139b2 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..f8f5003e --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +7d1f926cb5c56766d35ae410f0f2ecaf \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..55c9507b Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..861139b2 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..f8f5003e --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +7d1f926cb5c56766d35ae410f0f2ecaf \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..55c9507b Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4-members.html b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4-members.html new file mode 100644 index 00000000..e5170169 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4-members.html @@ -0,0 +1,145 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
is_done() const noexceptagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >inline
Ptr typedefagrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >
read(RequestT &req, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
Request typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
Response typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
send_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
ServerRPC()=deleteagrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >
Traits typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
TYPEagrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >static
wait_for_done(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >inline
write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write(const ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html new file mode 100644 index 00000000..870ab1f2 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html @@ -0,0 +1,738 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor > Class Template Reference
+
+
+ +

I/O object for server-side, generic rpcs. + More...

+ +

#include <agrpc/server_rpc.hpp>

+
+ + Inheritance diagram for agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >:
+
+
+ + + + + + +

+Classes

struct  rebind_executor
 Rebind the ServerRPC to another executor. More...
 
+ + + + + + + + + + + + + + + + +

+Public Types

+using Ptr = agrpc::ServerRPCPtr<ServerRPC>
 ServerRPCPtr specialized on this type.
 
+using Request = RequestT
 The response message type.
 
+using Response = ResponseT
 The request message type.
 
+using Traits = TraitsT
 The traits type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ServerRPC ()=delete
 Deleted default constructor.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read (RequestT &req, CompletionToken &&token=CompletionToken{})
 Receive a message from the client.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})
 Send a message to the client.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const ResponseT &response, CompletionToken &&token=CompletionToken{})
 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=CompletionToken{})
 Coalesce write and finish of this rpc.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write_and_finish (const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Coalesce write and finish of this rpc (default WriteOptions)
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Finish this rpc.
 
auto send_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Send initial metadata.
 
bool is_done () const noexcept
 Is this rpc done?
 
auto wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Wait for done.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ServerRPCType TYPE = agrpc::ServerRPCType::GENERIC
 The rpc type.
 
+

Detailed Description

+
template<class TraitsT, class Executor>
+class agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >

I/O object for server-side, generic rpcs.

+

Use one of the agrpc::register_ functions to set up request handling.

+

Example:

+
void server_rpc_generic(agrpc::GrpcContext& grpc_context, grpc::AsyncGenericService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<agrpc::GenericServerRPC>;
+ +
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request_buffer;
+
if (!co_await rpc.read(request_buffer))
+
{
+
co_return;
+
}
+
example::v1::Request request;
+
if (const auto status =
+
grpc::GenericDeserialize<grpc::ProtoBufferReader, example::v1::Request>(&request_buffer, &request);
+
!status.ok())
+
{
+
co_await rpc.finish(status);
+
co_return;
+
}
+
example::v1::Response response;
+
response.set_integer(request.integer());
+
RPC::Response response_buffer;
+
bool own_buffer;
+
if (const auto status = grpc::GenericSerialize<grpc::ProtoBufferWriter, example::v1::Response>(
+
response, &response_buffer, &own_buffer);
+
!status.ok())
+
{
+
co_await rpc.finish(status);
+
co_return;
+
}
+
if (!co_await rpc.write(response_buffer))
+
{
+
co_return;
+
}
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+

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
+ + + + +
RequestUnaryA pointer to the generated gRPC method.
TraitsA type used to customize this rpc. See agrpc::DefaultServerRPCTraits.
ExecutorThe executor type, must be capable of referring to a 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.

+
Since
2.7.0
+

Member Function Documentation

+ +

◆ read()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::read (RequestT & req,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Receive a message from the client.

+

May not be called currently with finish()/write_and_finish(). It is not meaningful to call it concurrently with another read on the same rpc since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other side has called WritesDone() or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ write()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write (const ResponseT & response,
grpc::WriteOptions options,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Send a message to the client.

+

Only one write may be outstanding at any given time. It may not be called concurrently with operations other than read().

+

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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ write_and_finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish (const ResponseT & response,
grpc::WriteOptions options,
const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Coalesce write and finish of this rpc.

+

Write response and coalesce it with trailing metadata which contains status, using WriteOptions options. May not be used concurrently with other operations.

+

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:

+
    +
  • The ServerContext associated with the call is used for sending trailing (and initial) metadata to the client.
  • +
+
Note
Status must have an OK code.
+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::finish (const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inlineinherited
+
+ +

Finish this rpc.

+

Indicate that the stream is to be finished with a certain status code.

+

Completes when the server has sent the appropriate signals to the client to end the call.

+

Should not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when either:

+
    +
  • all messages from the client have been received (either known implicitly, or explicitly because a previous read operation completed with false).
  • +
  • it is desired to end the call early with some non-OK status code.
  • +
+

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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ send_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::send_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ is_done()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, ResponderT< ResponseT, RequestT >, Executor >::is_done () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Is this rpc done?

+

Only available if Traits contain NOTIFY_WHEN_DONE = true.

+

Returns true if NotifyWhenDone has fired which indicates that finish() has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).

+

Thread-safe

+ +
+
+ +

◆ wait_for_done()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, ResponderT< ResponseT, RequestT >, Executor >::wait_for_done (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+

Internally, this operation uses grpc::ServerContext::AsyncNotifyWhenDone.

+
Attention
Only one call to wait_for_done() may be outstanding at a time.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void().
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.js b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.js new file mode 100644 index 00000000..da88b25b --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.js @@ -0,0 +1,25 @@ +var classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html", "structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4" ], + [ "Ptr", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a45a5f939ccf42750b5a63d9133211d08", null ], + [ "Request", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#af85c5d0f47f0b6e6244efd65a2dedbd6", null ], + [ "Response", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#ab8caf2b42da62017857e5f8d3b830353", null ], + [ "Traits", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a6497720ecb8d23c3b31fccee67f51a10", null ], + [ "executor_type", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "ServerRPC", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a15af4c2269b9cfd9416855cc5fe755a2", null ], + [ "read", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a150a96890cdc34ca0ea8980ee33df2ec", null ], + [ "write", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a078d5b4d7735cb5557cdeadb52fd8c02", null ], + [ "write", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a24a943e21a084ebb38c1e3f42810d145", null ], + [ "write_and_finish", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#adeecd7e5bda6de28ad8e09933c8cd8b8", null ], + [ "write_and_finish", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a333763a4595ed96f57915d8ba8c747d5", null ], + [ "finish", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a06bd50403d88fa57b48a7e25f6ffdaf1", null ], + [ "send_initial_metadata", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a2476f3477572b896d89f6ac21cb59928", null ], + [ "is_done", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a42255cc87cf854a4d2bc04315f7647d5", null ], + [ "wait_for_done", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a8ac96d7413a2fd8465136d9815acca24", null ], + [ "get_executor", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#ad8085a81b22c9af295c206f2f8c3af26", null ], + [ "TYPE", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a2600be35ff008044922937f2d8445cb4", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..820ff4dd --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..bdfa12e2 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +a492afc4654b4452bfa1d1086389c00a \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..fa450e4d Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.map b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.map new file mode 100644 index 00000000..820ff4dd --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.md5 b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.md5 new file mode 100644 index 00000000..bdfa12e2 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.md5 @@ -0,0 +1 @@ +a492afc4654b4452bfa1d1086389c00a \ No newline at end of file diff --git a/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.png b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.png new file mode 100644 index 00000000..fa450e4d Binary files /dev/null and b/docs/classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_39e5e05fecc96f2a46256611b354f74f.png differ diff --git a/docs/classagrpc_1_1_server_r_p_c_ptr-members.html b/docs/classagrpc_1_1_server_r_p_c_ptr-members.html new file mode 100644 index 00000000..1322d328 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_ptr-members.html @@ -0,0 +1,134 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::ServerRPCPtr< ServerRPCT > Member List
+
+
+ +

This is the complete list of members for agrpc::ServerRPCPtr< ServerRPCT >, including all inherited members.

+ + + + + + + + + + + +
operator bool() const noexceptagrpc::ServerRPCPtr< ServerRPCT >inlineexplicit
operator*() noexceptagrpc::ServerRPCPtr< ServerRPCT >inline
operator*() const noexceptagrpc::ServerRPCPtr< ServerRPCT >inline
operator->() noexceptagrpc::ServerRPCPtr< ServerRPCT >inline
operator->() const noexceptagrpc::ServerRPCPtr< ServerRPCT >inline
request() noexceptagrpc::ServerRPCPtr< ServerRPCT >inline
request() const noexceptagrpc::ServerRPCPtr< ServerRPCT >inline
ServerRPC typedefagrpc::ServerRPCPtr< ServerRPCT >
ServerRPCPtr()=defaultagrpc::ServerRPCPtr< ServerRPCT >
swap(ServerRPCPtr &lhs, ServerRPCPtr &rhs) noexceptagrpc::ServerRPCPtr< ServerRPCT >friend
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_ptr.html b/docs/classagrpc_1_1_server_r_p_c_ptr.html new file mode 100644 index 00000000..ed8e4d01 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_ptr.html @@ -0,0 +1,280 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPCPtr< ServerRPCT > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::ServerRPCPtr< ServerRPCT > Class Template Reference
+
+
+ +

Allocated ServerRPC created by register_callback_rpc_handler. + More...

+ +

#include <agrpc/server_rpc_ptr.hpp>

+ + + + + +

+Public Types

+using ServerRPC = ServerRPCT
 The ServerRPC type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ServerRPCPtr ()=default
 Default constructor.
 
+ServerRPCT & operator* () noexcept
 Get reference to underlying ServerRPC.
 
+const ServerRPCT & operator* () const noexcept
 Get reference to underlying ServerRPC (const overload)
 
+ServerRPCT * operator-> () noexcept
 Access underlying ServerRPC.
 
+const ServerRPCT * operator-> () const noexcept
 Access underlying ServerRPC (const overload)
 
 operator bool () const noexcept
 Check whether this pointer owns a ServerRPC.
 
+decltype(auto) request () noexcept
 Get client's initial request message.
 
+decltype(auto) request () const noexcept
 Get client's initial request message (const overload)
 
+ + + + +

+Friends

void swap (ServerRPCPtr &lhs, ServerRPCPtr &rhs) noexcept
 Swap the contents of two ServerRPCPtr.
 
+

Detailed Description

+
template<class ServerRPCT>
+class agrpc::ServerRPCPtr< ServerRPCT >

Allocated ServerRPC created by register_callback_rpc_handler.

+
Since
2.8.0
+

Constructor & Destructor Documentation

+ +

◆ ServerRPCPtr()

+ +
+
+
+template<class ServerRPCT >
+ + + + + +
+ + + + + + + +
agrpc::ServerRPCPtr< ServerRPCT >::ServerRPCPtr ()
+
+default
+
+ +

Default constructor.

+

The only valid operations after construction are move-assignment, operator bool, swap and destruction.

+ +
+
+

Member Function Documentation

+ +

◆ operator bool()

+ +
+
+
+template<class ServerRPCT >
+ + + + + +
+ + + + + + + +
agrpc::ServerRPCPtr< ServerRPCT >::operator bool () const
+
+inlineexplicitnoexcept
+
+ +

Check whether this pointer owns a ServerRPC.

+
Since
3.1.0
+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ swap

+ +
+
+
+template<class ServerRPCT >
+ + + + + +
+ + + + + + + + + + + +
void swap (ServerRPCPtr< ServerRPCT > & lhs,
ServerRPCPtr< ServerRPCT > & rhs )
+
+friend
+
+ +

Swap the contents of two ServerRPCPtr.

+
Since
3.1.0
+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_server_r_p_c_ptr.js b/docs/classagrpc_1_1_server_r_p_c_ptr.js new file mode 100644 index 00000000..86e9b0e3 --- /dev/null +++ b/docs/classagrpc_1_1_server_r_p_c_ptr.js @@ -0,0 +1,13 @@ +var classagrpc_1_1_server_r_p_c_ptr = +[ + [ "ServerRPC", "classagrpc_1_1_server_r_p_c_ptr.html#a87d2fc4455382fefafc93963a0d182b5", null ], + [ "ServerRPCPtr", "classagrpc_1_1_server_r_p_c_ptr.html#af9bd970c0f19dbee72d07924a733ef08", null ], + [ "operator*", "classagrpc_1_1_server_r_p_c_ptr.html#a96ce1bc483099cd80a37ead302ee76c8", null ], + [ "operator*", "classagrpc_1_1_server_r_p_c_ptr.html#a662d487613723349a8cc1ad7d250482d", null ], + [ "operator->", "classagrpc_1_1_server_r_p_c_ptr.html#afb74f4ac6254fbaddbea6a1d45b2cc71", null ], + [ "operator->", "classagrpc_1_1_server_r_p_c_ptr.html#abb8d870586f33095b19a9ac145476bc0", null ], + [ "operator bool", "classagrpc_1_1_server_r_p_c_ptr.html#aca263693d2fba2ba7b8c5ed7a43a38a9", null ], + [ "request", "classagrpc_1_1_server_r_p_c_ptr.html#a75171d6a69414d78fd8080a762831ec0", null ], + [ "request", "classagrpc_1_1_server_r_p_c_ptr.html#a7fc9aa2fff351417c0e2ba60c5b654a7", null ], + [ "swap", "classagrpc_1_1_server_r_p_c_ptr.html#a9dc4a96f02657009d5a1c27ff9c6a7fe", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1_waiter-members.html b/docs/classagrpc_1_1_waiter-members.html new file mode 100644 index 00000000..048d339a --- /dev/null +++ b/docs/classagrpc_1_1_waiter-members.html @@ -0,0 +1,130 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::Waiter< Signature, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::Waiter< Signature, Executor >, including all inherited members.

+ + + + + + + +
executor_type typedefagrpc::Waiter< Signature, Executor >
initiate(Function &&function, ExecutorOrIoObject &&executor_or_io_object, Args &&... args)agrpc::Waiter< Signature, Executor >inline
is_ready() const noexceptagrpc::Waiter< Signature, Executor >inline
wait(CompletionToken &&token=CompletionToken{})agrpc::Waiter< Signature, Executor >inline
Waiter() noexceptagrpc::Waiter< Signature, Executor >inline
~Waiter() noexceptagrpc::Waiter< Signature, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1_waiter.html b/docs/classagrpc_1_1_waiter.html new file mode 100644 index 00000000..bd19fd0a --- /dev/null +++ b/docs/classagrpc_1_1_waiter.html @@ -0,0 +1,362 @@ + + + + + + + + +asio-grpc: agrpc::Waiter< Signature, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::Waiter< Signature, Executor > Class Template Reference
+
+
+ +

(experimental) Utility class for uncancelable operations + More...

+ +

#include <agrpc/waiter.hpp>

+ + + + + +

+Classes

struct  rebind_executor
 Rebind the Waiter to another executor. More...
 
+ + + + +

+Public Types

+using executor_type = Executor
 The associated executor type.
 
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

Waiter () noexcept
 Default construct a Waiter.
 
 ~Waiter () noexcept
 Destruct the Waiter.
 
template<class Function , class ExecutorOrIoObject , class... Args>
auto initiate (Function &&function, ExecutorOrIoObject &&executor_or_io_object, Args &&... args)
 Initiate an operation.
 
bool is_ready () const noexcept
 Has the initiated operation finished?
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto wait (CompletionToken &&token=CompletionToken{})
 Wait for the initiated operation to complete.
 
+

Detailed Description

+
template<class Signature, class Executor>
+class agrpc::Waiter< Signature, Executor >

(experimental) Utility class for uncancelable operations

+

Provides cancellation support for otherwise uncancelable operations by canceling only the act of waiting for completion as opposed to the operation itself.

+
Template Parameters
+ + + +
SignatureCompletion signature of the operation. For example, for agrpc::Alarm::wait this would be void(bool).
ExecutorType of the I/O executor. For agrpc::Alarm this would be agrpc::GrpcExecutor or asio::any_io_executor. Default: agrpc::GrpcExecutor
+
+
+
Since
2.7.0 (and Boost.Asio 1.77.0)
+

Constructor & Destructor Documentation

+ +

◆ ~Waiter()

+ +
+
+
+template<class Signature , class Executor >
+ + + + + +
+ + + + + + + +
agrpc::Waiter< Signature, Executor >::~Waiter ()
+
+inlinenoexcept
+
+ +

Destruct the Waiter.

+

All initiated operations must have been wait()ed for, otherwise the behavior is undefined.

+ +
+
+

Member Function Documentation

+ +

◆ initiate()

+ +
+
+
+template<class Signature , class Executor >
+
+template<class Function , class ExecutorOrIoObject , class... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::Waiter< Signature, Executor >::initiate (Function && function,
ExecutorOrIoObject && executor_or_io_object,
Args &&... args )
+
+inline
+
+ +

Initiate an operation.

+

Only one operation may be running at a time.

+

All operations must complete before this object is destructed.

+

Example:

+
+
+
asio::awaitable<void> rpc_handler_using_waiter(ServerRPC& rpc)
+
{
+
ServerRPC::Request request;
+
ServerRPC::Response response;
+
+
agrpc::Alarm alarm{rpc.get_executor()};
+
+
agrpc::Waiter<void(bool)> waiter;
+
waiter.initiate(agrpc::read, rpc, request);
+
+
auto next_deadline = std::chrono::system_clock::now() + std::chrono::seconds(5);
+
+
// Read requests from the client and send a response back every five seconds
+
while (true)
+
{
+
auto [completion_order, read_error_code, read_ok, alarm_expired] =
+
co_await asio::experimental::make_parallel_group(waiter.wait(asio::deferred),
+
alarm.wait(next_deadline, asio::deferred))
+
.async_wait(asio::experimental::wait_for_one(), asio::use_awaitable);
+
if (0 == completion_order[0]) // read completed
+
{
+
if (!read_ok)
+
{
+
co_return;
+
}
+
waiter.initiate(agrpc::read, rpc, request);
+
}
+
else // alarm expired
+
{
+
co_await rpc.write(response, asio::use_awaitable);
+
next_deadline = std::chrono::system_clock::now() + std::chrono::seconds(5);
+
}
+
}
+
}
+
Attention
When using sender/receiver and function returns a sender then only the set_value channel is forwarded to the waiting operation.
+
Parameters
+ + + +
functionCallable that will be invoked with all subsequent arguments followed by the completion handler of this Waiter (Asio) or it returns a sender composed of the result of the call (unifex/stdexec only).
executor_or_io_objectEither an executor itself or an object that implements get_executor(). This will become the I/O executor of subsequent calls to wait().
+
+
+ +
+
+ +

◆ is_ready()

+ +
+
+
+template<class Signature , class Executor >
+ + + + + +
+ + + + + + + +
bool agrpc::Waiter< Signature, Executor >::is_ready () const
+
+inlinenodiscardnoexcept
+
+ +

Has the initiated operation finished?

+

Thread-safe

+ +
+
+ +

◆ wait()

+ +
+
+
+template<class Signature , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::Waiter< Signature, Executor >::wait (CompletionToken && token = CompletionToken{})
+
+inline
+
+ +

Wait for the initiated operation to complete.

+

Only one call to wait() may be outstanding at a time. May be called before an operation has been initiated. Care must be taken when invoking this function multiple times for an already completed operation as completion arguments are moved into the completion handler.

+

Per-Operation Cancellation

+

All. Upon cancellation, the initiated operation continues to run.

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1_waiter.js b/docs/classagrpc_1_1_waiter.js new file mode 100644 index 00000000..45a7b539 --- /dev/null +++ b/docs/classagrpc_1_1_waiter.js @@ -0,0 +1,10 @@ +var classagrpc_1_1_waiter = +[ + [ "rebind_executor", "structagrpc_1_1_waiter_1_1rebind__executor.html", "structagrpc_1_1_waiter_1_1rebind__executor" ], + [ "executor_type", "classagrpc_1_1_waiter.html#af957414c01d35b84cef8a6f459cacf46", null ], + [ "Waiter", "classagrpc_1_1_waiter.html#afd9e6e03d3e0f9da901a976b110a58a0", null ], + [ "~Waiter", "classagrpc_1_1_waiter.html#aa5ee9bb346765753e2a1087b3e2e3a3f", null ], + [ "initiate", "classagrpc_1_1_waiter.html#a50c80e064c5a1911d65d34e21f89df54", null ], + [ "is_ready", "classagrpc_1_1_waiter.html#a1f2d63e9aaa91fe141e30cb606c41580", null ], + [ "wait", "classagrpc_1_1_waiter.html#af5b5c1cd30d2d6d710b216df98c5b3ec", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base-members.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base-members.html new file mode 100644 index 00000000..e9e5fa6c --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base-members.html @@ -0,0 +1,135 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ClientRPCBase< Responder, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ClientRPCBase< Responder, Executor >, including all inherited members.

+ + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< Responder >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< Responder, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< Responder, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< Responder, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< Responder, Executor >inline
context()agrpc::detail::ClientRPCContextBase< Responder >inline
context() constagrpc::detail::ClientRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
read_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ClientRPCBase< Responder, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base.html new file mode 100644 index 00000000..1385f40f --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base.html @@ -0,0 +1,430 @@ + + + + + + + + +asio-grpc: agrpc::detail::ClientRPCBase< Responder, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ClientRPCBase< Responder, Executor > Class Template Reference
+
+
+ +

ServerRPC base. + More...

+ +

#include <agrpc/detail/client_rpc_base.hpp>

+
+ + Inheritance diagram for agrpc::detail::ClientRPCBase< Responder, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::detail::ClientRPCBase< Responder, Executor >:
+
+
+ + + + + + +

+Public Types

+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ClientRPCBase (agrpc::GrpcContext &grpc_context)
 Construct from a GrpcContext.
 
template<class ClientContextInitFunction >
 ClientRPCBase (agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)
 Construct from a GrpcContext and an init function.
 
ClientRPCBase (const Executor &executor)
 Construct from an executor.
 
template<class ClientContextInitFunction >
 ClientRPCBase (const Executor &executor, ClientContextInitFunction &&init_function)
 Construct from an executor and init function.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Read initial metadata.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+

Detailed Description

+
template<class Responder, class Executor>
+class agrpc::detail::ClientRPCBase< Responder, Executor >

ServerRPC base.

+
Since
2.7.0
+

Constructor & Destructor Documentation

+ +

◆ ClientRPCBase() [1/2]

+ +
+
+
+template<class Responder , class Executor >
+
+template<class ClientContextInitFunction >
+ + + + + +
+ + + + + + + + + + + +
agrpc::detail::ClientRPCBase< Responder, Executor >::ClientRPCBase (agrpc::GrpcContext & grpc_context,
ClientContextInitFunction && init_function )
+
+inline
+
+ +

Construct from a GrpcContext and an init function.

+
Template Parameters
+ + +
ClientContextInitFunctionA function with signature void(grpc::ClientContext&) which will be invoked during construction. It can, for example, be used to set this rpc's deadline.
+
+
+ +
+
+ +

◆ ClientRPCBase() [2/2]

+ +
+
+
+template<class Responder , class Executor >
+
+template<class ClientContextInitFunction >
+ + + + + +
+ + + + + + + + + + + +
agrpc::detail::ClientRPCBase< Responder, Executor >::ClientRPCBase (const Executor & executor,
ClientContextInitFunction && init_function )
+
+inline
+
+ +

Construct from an executor and init function.

+
Template Parameters
+ + +
ClientContextInitFunctionA function with signature void(grpc::ClientContext&) which will be invoked during construction. It can, for example, be used to set this rpc's deadline.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ read_initial_metadata()

+ +
+
+
+template<class Responder , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBase< Responder, Executor >::read_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+inline
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base.js b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base.js new file mode 100644 index 00000000..318ae8eb --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base.js @@ -0,0 +1,14 @@ +var classagrpc_1_1detail_1_1_client_r_p_c_base = +[ + [ "executor_type", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "ClientRPCBase", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#abdc479925e4d0cf2ee10d116a89e9b66", null ], + [ "ClientRPCBase", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#a733bf7ee87338570e8e1d85fc47405a6", null ], + [ "ClientRPCBase", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#a80593b7c183335a02dc27fc10cb228fd", null ], + [ "ClientRPCBase", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#abbd58f85ff2547e2c592ca1aa7a07ced", null ], + [ "read_initial_metadata", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#a1f3342f57017775ec75f7f3317949b05", null ], + [ "get_executor", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1detail_1_1_client_r_p_c_base.html#ade0c1cd5b69a524efbf92059fda88c1c", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.map new file mode 100644 index 00000000..b0f5b835 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.md5 new file mode 100644 index 00000000..e9a353e8 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.md5 @@ -0,0 +1 @@ +7bff611acfb44e1d145e89f61ba25a12 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.png new file mode 100644 index 00000000..7c293b25 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__coll__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.map new file mode 100644 index 00000000..b0f5b835 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.md5 new file mode 100644 index 00000000..e9a353e8 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.md5 @@ -0,0 +1 @@ +7bff611acfb44e1d145e89f61ba25a12 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.png new file mode 100644 index 00000000..7c293b25 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_base__inherit__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.map new file mode 100644 index 00000000..1c6074d1 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.md5 new file mode 100644 index 00000000..d2655e45 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.md5 @@ -0,0 +1 @@ +3970cf4913cc0a9bd9273a655f54a8ee \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.png new file mode 100644 index 00000000..375633ea Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_0aa44df362a645189e4ec90ad9553249.png differ diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_4db4c83fa101bbf483845e57c308c4ff.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_4db4c83fa101bbf483845e57c308c4ff.html new file mode 100644 index 00000000..c3d14020 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_4db4c83fa101bbf483845e57c308c4ff.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >inline
context()agrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
context() constagrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
read(ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
read_initial_metadata(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
Request typedefagrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >
Response typedefagrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >
write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
write(const RequestT &request, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
writes_done(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html new file mode 100644 index 00000000..aa47b623 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html @@ -0,0 +1,549 @@ + + + + + + + + +asio-grpc: agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor > Class Template Reference
+
+
+ +

Bidirectional-streaming ClientRPC base. + More...

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >:
+
+
+ + + + + + + + + + + + +

+Public Types

+using Request = RequestT
 The request message type.
 
+using Response = ResponseT
 The response message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read_initial_metadata (CompletionToken &&token=CompletionToken{})
 Read initial metadata.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read (ResponseT &response, CompletionToken &&token=CompletionToken{})
 Receive a message from the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})
 Send a message to the server.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const RequestT &request, CompletionToken &&token=CompletionToken{})
 Send a message to the server (default WriteOptions)
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto writes_done (CompletionToken &&token=CompletionToken{})
 Signal writes done to the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (CompletionToken &&token=CompletionToken{})
 Signal writes done and finish the rpc.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+

Detailed Description

+
template<class RequestT, class ResponseT, template< class, class > class ResponderT, class Executor>
+class agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >

Bidirectional-streaming ClientRPC base.

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ read_initial_metadata()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read_initial_metadata (CompletionToken && token = CompletionToken{})
+
+inline
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Attention
If the server does not explicitly send initial metadata (e.g. by calling send_initial_metadata()) but waits for a message from the client instead then this function won't complete until write() is called.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ read()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read (ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Receive a message from the server.

+

This is thread-safe with respect to write() or writes_done() methods. It should not be called concurrently with other operations. It is not meaningful to call it concurrently with another read on the same stream since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other server is finished sending messages or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ write()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write (const RequestT & request,
grpc::WriteOptions options,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Send a message to the server.

+

Only one write may be outstanding at any given time. This is thread-safe with respect to read(). It should not be called concurrently with other operations.

+
Parameters
+ + + +
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the data 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).
+
+
+ +
+
+ +

◆ writes_done()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::writes_done (CompletionToken && token = CompletionToken{})
+
+inline
+
+ +

Signal writes done to the server.

+

May only be called once. Should not be called after performing a write with the set_last_message option.

+

Signal the client is done with the writes (half-close the client stream). Thread-safe with respect to read. May not be called concurrently with a write() that has the set_last_message option set.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the data 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).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::finish (CompletionToken && token = CompletionToken{})
+
+inline
+
+ +

Signal writes done and finish the rpc.

+

Indicate that the stream is to be finished and request notification for when the call has been ended.

+

May not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when:

+
    +
  • All messages from the server have been received (either known implictly, or explicitly because a previous read operation returned false).
  • +
+

The operation will finish when either:

+
    +
  • The server has returned a status.
  • +
  • The call failed for some reason and the library generated a status.
  • +
+

Note that implementations of this method attempt to receive initial metadata from the server if initial metadata has not been received yet.

+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata received from the server.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.js b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.js new file mode 100644 index 00000000..05e1748f --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.js @@ -0,0 +1,17 @@ +var classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf = +[ + [ "Request", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ab17fb315d9316707b442296f9096519c", null ], + [ "Response", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a09949deac664f28273aa1b4f806759b1", null ], + [ "executor_type", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "read_initial_metadata", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#afb6a4be476b5cab862000ba87b70e289", null ], + [ "read", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ad3830bd5b441d8b80c2a5dd33ae8ad2d", null ], + [ "write", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a613e43b75d508d451dac44e474256bf8", null ], + [ "write", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a7617653d30c2f57cdaeffcefed89793f", null ], + [ "writes_done", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a2d19b1441bd69861873989f76f5875e2", null ], + [ "finish", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a9a9b990891472214354e3425616f7b23", null ], + [ "get_executor", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ade0c1cd5b69a524efbf92059fda88c1c", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.map new file mode 100644 index 00000000..fb63c671 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.md5 new file mode 100644 index 00000000..da4f3c40 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.md5 @@ -0,0 +1 @@ +5ce8e1fa1deee9d84f97c32e25381958 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.png new file mode 100644 index 00000000..5794af77 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_f59a61e51f0680ee0a37f32d03c3b6f8.png differ diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base-members.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base-members.html new file mode 100644 index 00000000..0c5858b7 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base-members.html @@ -0,0 +1,127 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ClientRPCContextBase< Responder > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ClientRPCContextBase< Responder >, including all inherited members.

+ + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< Responder >inline
context()agrpc::detail::ClientRPCContextBase< Responder >inline
context() constagrpc::detail::ClientRPCContextBase< Responder >inline
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base.html new file mode 100644 index 00000000..c6cb1172 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base.html @@ -0,0 +1,193 @@ + + + + + + + + +asio-grpc: agrpc::detail::ClientRPCContextBase< Responder > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ClientRPCContextBase< Responder > Class Template Reference
+
+
+ +

ClientRPC grpc::ClientContext base. + More...

+ +

#include <agrpc/detail/client_rpc_context_base.hpp>

+
+ + Inheritance diagram for agrpc::detail::ClientRPCContextBase< Responder >:
+
+
+ + + + + + + + + + + + +

+Public Member Functions

+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+

Detailed Description

+
template<class Responder>
+class agrpc::detail::ClientRPCContextBase< Responder >

ClientRPC grpc::ClientContext base.

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< Responder >::cancel ()
+
+inlinenoexcept
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base.js b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base.js new file mode 100644 index 00000000..fc826878 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base.js @@ -0,0 +1,6 @@ +var classagrpc_1_1detail_1_1_client_r_p_c_context_base = +[ + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#ade0c1cd5b69a524efbf92059fda88c1c", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.map new file mode 100644 index 00000000..bcd32778 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.md5 new file mode 100644 index 00000000..3fd68527 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.md5 @@ -0,0 +1 @@ +99a44c4abb572a09252c31a1fa79fd48 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.png new file mode 100644 index 00000000..dfd94f6e Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_context_base__inherit__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4-members.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4-members.html new file mode 100644 index 00000000..7cdf398f --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4-members.html @@ -0,0 +1,144 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
context()agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
context() constagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
method_name() noexceptagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inlinestatic
read(ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inline
read_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
Request typedefagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >
Response typedefagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >
service_name() noexceptagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inlinestatic
start(StubT &stub, const RequestT &request, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >inline
Stub typedefagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >
TYPEagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >static
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html new file mode 100644 index 00000000..1406e1c6 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html @@ -0,0 +1,590 @@ + + + + + + + + +asio-grpc: agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor > Class Template Reference
+
+
+ +

Server-streaming ClientRPC base. + More...

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >:
+
+
+ + + + + + +

+Classes

struct  rebind_executor
 Rebind the ClientRPC to another executor. More...
 
+ + + + + + + + + + + + + +

+Public Types

+using Stub = StubT
 The stub type.
 
+using Request = RequestT
 The request message type.
 
+using Response = ResponseT
 The response message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto start (StubT &stub, const RequestT &request, CompletionToken &&token=CompletionToken{})
 Start a server-streaming request.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read (ResponseT &response, CompletionToken &&token=CompletionToken{})
 Receive a message from the server.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (CompletionToken &&token=CompletionToken{})
 Finish the rpc.
 
auto read_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Read initial metadata.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ClientRPCType TYPE = agrpc::ClientRPCType::SERVER_STREAMING
 The rpc type.
 
+

Detailed Description

+
template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor>
+class agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >

Server-streaming ClientRPC base.

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::service_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+
Since
2.6.0
+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::method_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ClientRPC<&example::Example::Stub::PrepareAsyncMyMethod> the return value would be "MyMethod".

+
Since
2.6.0
+ +
+
+ +

◆ start()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::start (StubT & stub,
const RequestT & request,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Start a server-streaming request.

+
Parameters
+ + + + +
stubThe Stub that corresponds to the gRPC method.
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true means that the rpc was started successfully. If it is false, then call finish() to obtain error details.
+
+
+ +
+
+ +

◆ read()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::read (ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Receive a message from the server.

+

May not be called concurrently with read_initial_metadata(). It is not meaningful to call it concurrently with another read on the same stream since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other server is finished sending messages or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::finish (CompletionToken && token = CompletionToken{})
+
+inline
+
+ +

Finish the rpc.

+

Indicate that the stream is to be finished and request notification for when the call has been ended.

+

May not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when:

+
    +
  • All messages from the server have been received (either known implictly, or explicitly because a previous read operation returned false).
  • +
+

The operation will finish when either:

+
    +
  • The server has returned a status.
  • +
  • The call failed for some reason and the library generated a status.
  • +
+

Note that implementations of this method attempt to receive initial metadata from the server if initial metadata has not been received yet.

+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata received from the server.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ read_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >::read_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+inlineinherited
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.js b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.js new file mode 100644 index 00000000..cf357650 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.js @@ -0,0 +1,20 @@ +var classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html", "structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120" ], + [ "Stub", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac81a92f73b6032ab5163473f8af67ec8", null ], + [ "Request", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ab8fe0d6e998dbb9c3dac45bb3ebea1fd", null ], + [ "Response", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a7f04ffe67672564e8fc084cea8186e9d", null ], + [ "executor_type", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "service_name", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#aeb82d28bcdb03ae6f757fe3574124b3f", null ], + [ "method_name", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ad0fbe938aa2186379c0115248e530310", null ], + [ "start", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac2a6ff58092fb44d7af8371f3e5835df", null ], + [ "read", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a05dbadc3c83ae568f787023074d91423", null ], + [ "finish", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac036fe983bdb3582a9c4ef549696cde8", null ], + [ "read_initial_metadata", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a1f3342f57017775ec75f7f3317949b05", null ], + [ "get_executor", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ade0c1cd5b69a524efbf92059fda88c1c", null ], + [ "TYPE", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a361598fd336c38e5f282457263865229", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.map new file mode 100644 index 00000000..281626e2 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.md5 new file mode 100644 index 00000000..5825e570 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.md5 @@ -0,0 +1 @@ +5e6c19f0f218c3c1993b0ef6b0ce1af5 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.png new file mode 100644 index 00000000..62bf6f33 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_4db376ed54db82ad30522926beac1170.png differ diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.map new file mode 100644 index 00000000..dccb108f --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.md5 new file mode 100644 index 00000000..a2cfd943 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.md5 @@ -0,0 +1 @@ +c0b48bc815b8adbf7dc0695d8632f49c \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.png new file mode 100644 index 00000000..47ebfc9a Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_bf375514cde84171a746d864e0b471c2.png differ diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4-members.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4-members.html new file mode 100644 index 00000000..22d1ed07 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4-members.html @@ -0,0 +1,145 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
ClientRPCBase(agrpc::GrpcContext &grpc_context)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inlineexplicit
ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
ClientRPCBase(const Executor &executor)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inlineexplicit
ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
context()agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
context() constagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >inline
executor_type typedefagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >
finish(ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
method_name() noexceptagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inlinestatic
read_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >inline
Request typedefagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >
request(agrpc::GrpcContext &grpc_context, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inlinestatic
request(const Executor &executor, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inlinestatic
Response typedefagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >
service_name() noexceptagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inlinestatic
start(StubT &stub, const RequestT &req)agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >inline
Stub typedefagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >
TYPEagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >static
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html new file mode 100644 index 00000000..64d58017 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html @@ -0,0 +1,605 @@ + + + + + + + + +asio-grpc: agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor > Class Template Reference
+
+
+ +

Unary ClientRPC base. + More...

+ +

#include <agrpc/client_rpc.hpp>

+
+ + Inheritance diagram for agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >:
+
+
+ + + + + + +

+Classes

struct  rebind_executor
 Rebind the ClientRPC to another executor. More...
 
+ + + + + + + + + + + + + +

+Public Types

+using Stub = StubT
 The stub type.
 
+using Request = RequestT
 The response message type.
 
+using Response = ResponseT
 The request message type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void start (StubT &stub, const RequestT &req)
 Start the rpc.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (ResponseT &response, CompletionToken &&token=CompletionToken{})
 Finish the rpc.
 
auto read_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Read initial metadata.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+grpc::ClientContext & context ()
 Get the underlying grpc::ClientContext
 
+const grpc::ClientContext & context () const
 Get the underlying grpc::ClientContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+ + + + + + + + + + + + + + + +

+Static Public Member Functions

static constexpr std::string_view service_name () noexcept
 Name of the gRPC service.
 
static constexpr std::string_view method_name () noexcept
 Name of the gRPC method.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
static auto request (agrpc::GrpcContext &grpc_context, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})
 Perform a request.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
static auto request (const Executor &executor, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})
 Start a generic unary request (executor overload)
 
+ + + + +

+Static Public Attributes

+static constexpr agrpc::ClientRPCType TYPE = agrpc::ClientRPCType::UNARY
 The rpc type.
 
+

Detailed Description

+
template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor>
+class agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >

Unary ClientRPC base.

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ service_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::service_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC service.

+

Equal to the generated Service::service_full_name().

+

E.g. for the .proto schema

+
package example.v1;
+
+
service Example { ... }
+

the return value would be "example.v1.Example".

+
Since
2.6.0
+ +
+
+ +

◆ method_name()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+ + + + + +
+ + + + + + + +
static constexpr std::string_view agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::method_name ()
+
+inlinestaticconstexprnoexcept
+
+ +

Name of the gRPC method.

+

E.g. for agrpc::ClientRPC<&example::Example::Stub::PrepareAsyncMyMethod> the return value would be "MyMethod".

+
Since
2.6.0
+ +
+
+ +

◆ request()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static auto agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request (agrpc::GrpcContext & grpc_context,
StubT & stub,
grpc::ClientContext & context,
const RequestT & request,
ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inlinestatic
+
+ +

Perform a request.

+
Parameters
+ + + + +
requestThe request message, save to delete when this function returns, unless a deferred completion token is used like agrpc::use_sender or asio::deferred.
responseThe response message, will be filled by the server upon finishing this rpc. Must remain alive until this rpc is finished.
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status). Use grpc::Status::ok() to check whether the request was successful.
+
+
+ +
+
+ +

◆ start()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+ + + + + +
+ + + + + + + + + + + +
void agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::start (StubT & stub,
const RequestT & req )
+
+inline
+
+ +

Start the rpc.

+
Parameters
+ + +
reqThe request message, save to delete when this function returns, unless a deferred completion token like agrpc::use_sender or asio::deferred is used.
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class StubT , class RequestT , class ResponseT , template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::finish (ResponseT & response,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Finish the rpc.

+

Receive the server's response message and final status for the call.

+

This operation will finish when either:

+
    +
  • The server's response message and status have been received.
  • +
  • The server has returned a non-OK status (no message expected in this case).
  • +
  • The call failed for some reason and the library generated a non-OK status.
  • +
+

Side effect:

+
    +
  • The ClientContext associated with the call is updated with possible initial and trailing metadata sent from the server.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(grpc::Status).
+
+
+ +
+
+ +

◆ read_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >::read_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+inlineinherited
+
+ +

Read initial metadata.

+

Request notification of the reading of the initial metadata.

+

This call is optional.

+

Side effect:

+
    +
  • Upon receiving initial metadata from the server, the ClientContext associated with this call is updated, and the calling code can access the received metadata through the ClientContext.
  • +
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that the metadata was read. If it is false, then the call is dead.
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.js b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.js new file mode 100644 index 00000000..0f6ab35d --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.js @@ -0,0 +1,21 @@ +var classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4 = +[ + [ "rebind_executor", "structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html", "structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor" ], + [ "Stub", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ae494858ba1fb77cc03a473d475f89fec", null ], + [ "Request", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a3cbcb0c2a8dea17a5f8e2031b5f0e135", null ], + [ "Response", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a42c626f687ccf2ac90c4f97c1428ba05", null ], + [ "executor_type", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a4bb04cc6b06744978476e7566c776c5c", null ], + [ "service_name", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0d95b3e778fd04576727a180ced2ad49", null ], + [ "method_name", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#adca43de2480909300ee83f4e7d0fefe8", null ], + [ "request", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a53680b344c2176c7ddd5fd97e331517a", null ], + [ "request", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#adc02ff48c51bd547e52fe0b69f671dc2", null ], + [ "start", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0cc8fb2b4fdbc30dfaa214b7faa16828", null ], + [ "finish", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a630c84662c7ffef3f82799c92b32d313", null ], + [ "read_initial_metadata", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a1f3342f57017775ec75f7f3317949b05", null ], + [ "get_executor", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a056f94eadae189c43a6919d09e9f0031", null ], + [ "context", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a5602cbb3e4c886c89405ad0404626e64", null ], + [ "cancel", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ade0c1cd5b69a524efbf92059fda88c1c", null ], + [ "TYPE", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#aebbb738d826d482f508a01cd59fcd6b4", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.map new file mode 100644 index 00000000..74a7a19e --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.md5 new file mode 100644 index 00000000..0c092552 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.md5 @@ -0,0 +1 @@ +555148ece72e656ac260004c9a29874b \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.png new file mode 100644 index 00000000..fc426990 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__coll__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.map b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.map new file mode 100644 index 00000000..019922e5 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.md5 b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.md5 new file mode 100644 index 00000000..8a9c716b --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +4cf35d388d328f0a2bfe015c671137f3 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.png b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.png new file mode 100644 index 00000000..2097dfa8 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4__inherit__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base-members.html b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base-members.html new file mode 100644 index 00000000..7f814695 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base-members.html @@ -0,0 +1,127 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::RPCExecutorBase< Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::RPCExecutorBase< Executor >, including all inherited members.

+ + + + +
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base.html b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base.html new file mode 100644 index 00000000..47d8f501 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base.html @@ -0,0 +1,300 @@ + + + + + + + + +asio-grpc: agrpc::detail::RPCExecutorBase< Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::RPCExecutorBase< Executor > Class Template Reference
+
+
+ +

RPC's executor base. + More...

+ +

#include <agrpc/detail/rpc_executor_base.hpp>

+
+ + Inheritance diagram for agrpc::detail::RPCExecutorBase< Executor >:
+
+
+ + + + + + +

+Public Types

+using executor_type = Executor
 The executor type.
 
+ + + + + + + +

+Public Member Functions

const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+ + + + + + + +

+Friends

+template<auto , class >
class agrpc::ClientRPC
 
+template<auto , class , class >
class agrpc::ServerRPC
 
+

Detailed Description

+
template<class Executor>
+class agrpc::detail::RPCExecutorBase< Executor >

RPC's executor base.

+
Since
2.1.0
+

Member Function Documentation

+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexcept
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexcept
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base.js b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base.js new file mode 100644 index 00000000..618f4933 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base.js @@ -0,0 +1,6 @@ +var classagrpc_1_1detail_1_1_r_p_c_executor_base = +[ + [ "executor_type", "classagrpc_1_1detail_1_1_r_p_c_executor_base.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "get_executor", "classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.map b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.map new file mode 100644 index 00000000..4a590c99 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.map @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.md5 b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.md5 new file mode 100644 index 00000000..52bdfdd2 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.md5 @@ -0,0 +1 @@ +68c75a5de775445b23a20ca93bc8810d \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.png b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.png new file mode 100644 index 00000000..8356bac5 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_r_p_c_executor_base__inherit__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base-members.html b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base-members.html new file mode 100644 index 00000000..cd5fe19c --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base-members.html @@ -0,0 +1,133 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ServerRPCBase< Responder, Traits, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ServerRPCBase< Responder, Traits, Executor >, including all inherited members.

+ + + + + + + + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
is_done() const noexceptagrpc::detail::ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, Responder, Executor >inline
send_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCBase< Responder, Traits, Executor >inline
wait_for_done(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, Responder, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base.html b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base.html new file mode 100644 index 00000000..de000d25 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base.html @@ -0,0 +1,401 @@ + + + + + + + + +asio-grpc: agrpc::detail::ServerRPCBase< Responder, Traits, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ServerRPCBase< Responder, Traits, Executor > Class Template Reference
+
+
+ +

ServerRPC base. + More...

+ +

#include <agrpc/detail/server_rpc_base.hpp>

+
+ + Inheritance diagram for agrpc::detail::ServerRPCBase< Responder, Traits, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::detail::ServerRPCBase< Responder, Traits, Executor >:
+
+
+ + + + + + +

+Public Types

+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto send_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Send initial metadata.
 
bool is_done () const noexcept
 Is this rpc done?
 
auto wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Wait for done.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+

Detailed Description

+
template<class Responder, class Traits, class Executor>
+class agrpc::detail::ServerRPCBase< Responder, Traits, Executor >

ServerRPC base.

+
Since
2.7.0
+

Member Function Documentation

+ +

◆ send_initial_metadata()

+ +
+
+
+template<class Responder , class Traits , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCBase< Responder, Traits, Executor >::send_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+inline
+
+ +

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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ is_done()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >::is_done () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Is this rpc done?

+

Only available if Traits contain NOTIFY_WHEN_DONE = true.

+

Returns true if NotifyWhenDone has fired which indicates that finish() has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).

+

Thread-safe

+ +
+
+ +

◆ wait_for_done()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >::wait_for_done (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+

Internally, this operation uses grpc::ServerContext::AsyncNotifyWhenDone.

+
Attention
Only one call to wait_for_done() may be outstanding at a time.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void().
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base.js b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base.js new file mode 100644 index 00000000..28642c99 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base.js @@ -0,0 +1,12 @@ +var classagrpc_1_1detail_1_1_server_r_p_c_base = +[ + [ "executor_type", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "send_initial_metadata", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#a2476f3477572b896d89f6ac21cb59928", null ], + [ "is_done", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#a42255cc87cf854a4d2bc04315f7647d5", null ], + [ "wait_for_done", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#a8ac96d7413a2fd8465136d9815acca24", null ], + [ "get_executor", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1detail_1_1_server_r_p_c_base.html#ad8085a81b22c9af295c206f2f8c3af26", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.map b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.map new file mode 100644 index 00000000..8bdb05b7 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.md5 b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.md5 new file mode 100644 index 00000000..9ffa018c --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.md5 @@ -0,0 +1 @@ +8885e552c1e23824b66349043fcdb078 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.png b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.png new file mode 100644 index 00000000..ab4cdd01 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__coll__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.map b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.map new file mode 100644 index 00000000..8bdb05b7 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.md5 b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.md5 new file mode 100644 index 00000000..9ffa018c --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.md5 @@ -0,0 +1 @@ +8885e552c1e23824b66349043fcdb078 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.png b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.png new file mode 100644 index 00000000..ab4cdd01 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_server_r_p_c_base__inherit__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.map b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.map new file mode 100644 index 00000000..e8270ae0 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.md5 b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.md5 new file mode 100644 index 00000000..8bb827dd --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.md5 @@ -0,0 +1 @@ +664071b1ee49dcb23f110cf17f85add4 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.png b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.png new file mode 100644 index 00000000..54179eca Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01393f4ad9b473437a095a3fa231b922df.png differ diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_017ce51ae41bf8b69b48f5ce7a57b8b2b0.html b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_017ce51ae41bf8b69b48f5ce7a57b8b2b0.html new file mode 100644 index 00000000..3ecab731 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_017ce51ae41bf8b69b48f5ce7a57b8b2b0.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
finish(const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
is_done() const noexceptagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >inline
read(RequestT &req, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
Request typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
Response typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
send_initial_metadata(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
Traits typedefagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
wait_for_done(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >inline
write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write(const ResponseT &response, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html new file mode 100644 index 00000000..fa2c8236 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html @@ -0,0 +1,642 @@ + + + + + + + + +asio-grpc: agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor > Class Template Reference
+
+
+ +

ServerRPC bidirectional-streaming base. + More...

+ +

#include <agrpc/server_rpc.hpp>

+
+ + Inheritance diagram for agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >:
+
+
+ + + + + + + + + + + + + + + +

+Public Types

+using Request = RequestT
 The response message type.
 
+using Response = ResponseT
 The request message type.
 
+using Traits = TraitsT
 The traits type.
 
+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto read (RequestT &req, CompletionToken &&token=CompletionToken{})
 Receive a message from the client.
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})
 Send a message to the client.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write (const ResponseT &response, CompletionToken &&token=CompletionToken{})
 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=CompletionToken{})
 Coalesce write and finish of this rpc.
 
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto write_and_finish (const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Coalesce write and finish of this rpc (default WriteOptions)
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto finish (const grpc::Status &status, CompletionToken &&token=CompletionToken{})
 Finish this rpc.
 
auto send_initial_metadata (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Send initial metadata.
 
bool is_done () const noexcept
 Is this rpc done?
 
auto wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Wait for done.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+

Detailed Description

+
template<class RequestT, class ResponseT, template< class, class > class ResponderT, class TraitsT, class Executor>
+class agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >

ServerRPC bidirectional-streaming base.

+
Since
2.7.0
+

Member Function Documentation

+ +

◆ read()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::read (RequestT & req,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Receive a message from the client.

+

May not be called currently with finish()/write_and_finish(). It is not meaningful to call it concurrently with another read on the same rpc since reads on the same stream are delivered in order.

+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true indicates that a valid message was read. false when there will be no more incoming messages, either because the other side has called WritesDone() or the stream has failed (or been cancelled).
+
+
+ +
+
+ +

◆ write()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write (const ResponseT & response,
grpc::WriteOptions options,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Send a message to the client.

+

Only one write may be outstanding at any given time. It may not be called concurrently with operations other than read().

+

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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ write_and_finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish (const ResponseT & response,
grpc::WriteOptions options,
const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Coalesce write and finish of this rpc.

+

Write response and coalesce it with trailing metadata which contains status, using WriteOptions options. May not be used concurrently with other operations.

+

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:

+
    +
  • The ServerContext associated with the call is used for sending trailing (and initial) metadata to the client.
  • +
+
Note
Status must have an OK code.
+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ finish()

+ +
+
+
+template<class RequestT , class ResponseT , template< class, class > class ResponderT, class TraitsT , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + + + + + +
auto agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::finish (const grpc::Status & status,
CompletionToken && token = CompletionToken{} )
+
+inline
+
+ +

Finish this rpc.

+

Indicate that the stream is to be finished with a certain status code.

+

Completes when the server has sent the appropriate signals to the client to end the call.

+

Should not be used concurrently with other operations and may only be called once.

+

It is appropriate to call this method when either:

+
    +
  • all messages from the client have been received (either known implicitly, or explicitly because a previous read operation completed with false).
  • +
  • it is desired to end the call early with some non-OK status code.
  • +
+

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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ send_initial_metadata()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::send_initial_metadata (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+
Parameters
+ + +
tokenA 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).
+
+
+ +
+
+ +

◆ is_done()

+ +
+
+ + + + + +
+ + + + + + + +
bool agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, ResponderT< ResponseT, RequestT >, Executor >::is_done () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Is this rpc done?

+

Only available if Traits contain NOTIFY_WHEN_DONE = true.

+

Returns true if NotifyWhenDone has fired which indicates that finish() has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).

+

Thread-safe

+ +
+
+ +

◆ wait_for_done()

+ +
+
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, ResponderT< ResponseT, RequestT >, Executor >::wait_for_done (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+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.

+

Internally, this operation uses grpc::ServerContext::AsyncNotifyWhenDone.

+
Attention
Only one call to wait_for_done() may be outstanding at a time.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void().
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.js b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.js new file mode 100644 index 00000000..a3cfbf72 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.js @@ -0,0 +1,21 @@ +var classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b = +[ + [ "Request", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#af85c5d0f47f0b6e6244efd65a2dedbd6", null ], + [ "Response", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#ab8caf2b42da62017857e5f8d3b830353", null ], + [ "Traits", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a6497720ecb8d23c3b31fccee67f51a10", null ], + [ "executor_type", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "read", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a150a96890cdc34ca0ea8980ee33df2ec", null ], + [ "write", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a078d5b4d7735cb5557cdeadb52fd8c02", null ], + [ "write", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a24a943e21a084ebb38c1e3f42810d145", null ], + [ "write_and_finish", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#adeecd7e5bda6de28ad8e09933c8cd8b8", null ], + [ "write_and_finish", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a333763a4595ed96f57915d8ba8c747d5", null ], + [ "finish", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a06bd50403d88fa57b48a7e25f6ffdaf1", null ], + [ "send_initial_metadata", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a2476f3477572b896d89f6ac21cb59928", null ], + [ "is_done", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a42255cc87cf854a4d2bc04315f7647d5", null ], + [ "wait_for_done", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a8ac96d7413a2fd8465136d9815acca24", null ], + [ "get_executor", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#ad8085a81b22c9af295c206f2f8c3af26", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.map b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.map new file mode 100644 index 00000000..b220a6b7 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.md5 b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.md5 new file mode 100644 index 00000000..e2794fa4 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.md5 @@ -0,0 +1 @@ +79c6653810302f557177cc98847942b4 \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.png b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.png new file mode 100644 index 00000000..e16c74bb Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01f541bf3c55d25bf45b9183984d7c70f0.png differ diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base-members.html b/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base-members.html new file mode 100644 index 00000000..f643d3fb --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base-members.html @@ -0,0 +1,127 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ServerRPCContextBase< Responder > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ServerRPCContextBase< Responder >, including all inherited members.

+ + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base.html b/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base.html new file mode 100644 index 00000000..a53fe8a6 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base.html @@ -0,0 +1,181 @@ + + + + + + + + +asio-grpc: agrpc::detail::ServerRPCContextBase< Responder > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ServerRPCContextBase< Responder > Class Template Reference
+
+
+ +

ServerRPC ServerContext base. + More...

+ +

#include <agrpc/detail/server_rpc_context_base.hpp>

+ + + + + + + + + + + +

+Public Member Functions

+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+

Detailed Description

+
template<class Responder>
+class agrpc::detail::ServerRPCContextBase< Responder >

ServerRPC ServerContext base.

+
Since
2.6.0
+

Member Function Documentation

+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexcept
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base.js b/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base.js new file mode 100644 index 00000000..4b7b1f75 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_context_base.js @@ -0,0 +1,6 @@ +var classagrpc_1_1detail_1_1_server_r_p_c_context_base = +[ + [ "context", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#ad8085a81b22c9af295c206f2f8c3af26", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin-members.html b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin-members.html new file mode 100644 index 00000000..c0d38d4b --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin-members.html @@ -0,0 +1,132 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor > Member List
+
+
+ +

This is the complete list of members for agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >, including all inherited members.

+ + + + + + + + + +
cancel() noexceptagrpc::detail::ServerRPCContextBase< Responder >inline
context()agrpc::detail::ServerRPCContextBase< Responder >inline
context() constagrpc::detail::ServerRPCContextBase< Responder >inline
executor_type typedefagrpc::detail::RPCExecutorBase< Executor >
get_executor() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
get_scheduler() const noexceptagrpc::detail::RPCExecutorBase< Executor >inline
is_done() const noexceptagrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >inline
wait_for_done(CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >inline
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html new file mode 100644 index 00000000..3828b00f --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html @@ -0,0 +1,361 @@ + + + + + + + + +asio-grpc: agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor > Class Template Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor > Class Template Reference
+
+
+ +

ServerRPC NotifyWhenDone base. + More...

+ +

#include <agrpc/detail/server_rpc_notify_when_done_mixin.hpp>

+
+ + Inheritance diagram for agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >:
+
+
+ +
+ + Collaboration diagram for agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >:
+
+
+ + + + + + +

+Public Types

+using executor_type = Executor
 The executor type.
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool is_done () const noexcept
 Is this rpc done?
 
template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
auto wait_for_done (CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})
 Wait for done.
 
const executor_typeget_executor () const noexcept
 Get the executor.
 
const executor_typeget_scheduler () const noexcept
 Get the scheduler.
 
+auto & context ()
 Get the underlying ServerContext
 
+const auto & context () const
 Get the underlying ServerContext (const overload)
 
void cancel () noexcept
 Cancel this RPC.
 
+

Detailed Description

+
template<bool IsNotifyWhenDone, class Responder, class Executor>
+class agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >

ServerRPC NotifyWhenDone base.

+
Since
2.7.0
+

Member Function Documentation

+ +

◆ is_done()

+ +
+
+
+template<bool IsNotifyWhenDone, class Responder , class Executor >
+ + + + + +
+ + + + + + + +
bool agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >::is_done () const
+
+inlinenodiscardnoexcept
+
+ +

Is this rpc done?

+

Only available if Traits contain NOTIFY_WHEN_DONE = true.

+

Returns true if NotifyWhenDone has fired which indicates that finish() has been called or that the rpc is dead (i.e., canceled, deadline expired, other side dropped the channel, etc).

+

Thread-safe

+ +
+
+ +

◆ wait_for_done()

+ +
+
+
+template<bool IsNotifyWhenDone, class Responder , class Executor >
+
+template<class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+ + + + + +
+ + + + + + + +
auto agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >::wait_for_done (CompletionToken && token = detail::DefaultCompletionTokenT<Executor>{})
+
+inline
+
+ +

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.

+

Internally, this operation uses grpc::ServerContext::AsyncNotifyWhenDone.

+
Attention
Only one call to wait_for_done() may be outstanding at a time.
+
Parameters
+ + +
tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void().
+
+
+ +
+
+ +

◆ get_executor()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_executor () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the executor.

+

Thread-safe

+ +
+
+ +

◆ get_scheduler()

+ +
+
+
+template<class Executor >
+ + + + + +
+ + + + + + + +
const executor_type & agrpc::detail::RPCExecutorBase< Executor >::get_scheduler () const
+
+inlinenodiscardnoexceptinherited
+
+ +

Get the scheduler.

+

Thread-safe

+
Since
2.9.0
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<class Responder >
+ + + + + +
+ + + + + + + +
void agrpc::detail::ServerRPCContextBase< Responder >::cancel ()
+
+inlinenoexceptinherited
+
+ +

Cancel this RPC.

+

Effectively calls context().TryCancel().

+

Thread-safe

+ +
+
+
+
+ + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.js b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.js new file mode 100644 index 00000000..641aad05 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.js @@ -0,0 +1,11 @@ +var classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin = +[ + [ "executor_type", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#afe3aab926de22d76fdb5e0d347c5d8c4", null ], + [ "is_done", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a42255cc87cf854a4d2bc04315f7647d5", null ], + [ "wait_for_done", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a8ac96d7413a2fd8465136d9815acca24", null ], + [ "get_executor", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#ac7d45c8fc3141d17881ac99ba0b53034", null ], + [ "get_scheduler", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#ac5e0d6c42c0ed62b84b90f3ce42e180a", null ], + [ "context", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#acb7e79a9709696570ffd10a42a3ed8a7", null ], + [ "context", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#aa0a8fef49ce793e900442392882a488d", null ], + [ "cancel", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#ad8085a81b22c9af295c206f2f8c3af26", null ] +]; \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.map b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.map new file mode 100644 index 00000000..b3fd845b --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.md5 b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.md5 new file mode 100644 index 00000000..49488fa3 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.md5 @@ -0,0 +1 @@ +bfaf750571a44b53cf38881dec6a163e \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.png b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.png new file mode 100644 index 00000000..167d2d30 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__coll__graph.png differ diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.map b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.map new file mode 100644 index 00000000..b3fd845b --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.md5 b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.md5 new file mode 100644 index 00000000..49488fa3 --- /dev/null +++ b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.md5 @@ -0,0 +1 @@ +bfaf750571a44b53cf38881dec6a163e \ No newline at end of file diff --git a/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.png b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.png new file mode 100644 index 00000000..167d2d30 Binary files /dev/null and b/docs/classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin__inherit__graph.png differ diff --git a/docs/classes.html b/docs/classes.html new file mode 100644 index 00000000..7cb03282 --- /dev/null +++ b/docs/classes.html @@ -0,0 +1,154 @@ + + + + + + + + +asio-grpc: Class Index + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
B | C | D | G | H | N | R | S | U | W
+
+
+
B
+
BasicAlarm (agrpc)
BasicGrpcExecutor (agrpc)
+
+
C
+
ClientRPC (agrpc)
ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor > (agrpc)
ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor > (agrpc)
ClientRPC< PrepareAsyncBidiStreaming, Executor > (agrpc)
ClientRPC< PrepareAsyncClientStreaming, Executor > (agrpc)
ClientRPC< PrepareAsyncServerStreaming, Executor > (agrpc)
ClientRPC< PrepareAsyncUnary, Executor > (agrpc)
ClientRPCBase (agrpc::detail)
ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor > (agrpc::detail)
ClientRPCContextBase (agrpc::detail)
ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor > (agrpc::detail)
ClientRPCUnaryBase< PrepareAsyncUnary, Executor > (agrpc::detail)
+
+
D
+
DefaultRunTraits (agrpc)
DefaultServerRPCTraits (agrpc)
+
+
G
+
GrpcContext (agrpc)
+
+
H
+
HealthCheckService (agrpc)
+
+
N
+
NotifyOnStateChangeFn (agrpc::detail)
+
+
R
+
ReadFn (agrpc::detail)
ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor (agrpc)
ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor (agrpc)
ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor (agrpc)
ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor (agrpc)
ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor (agrpc::detail)
ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor (agrpc::detail)
ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor (agrpc)
ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor (agrpc)
ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor (agrpc)
ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor (agrpc)
ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor (agrpc)
Waiter::rebind_executor (agrpc)
RPCExecutorBase (agrpc::detail)
+
+
S
+
ServerRPC (agrpc)
ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor > (agrpc)
ServerRPC< RequestBidiStreaming, TraitsT, Executor > (agrpc)
ServerRPC< RequestClientStreaming, TraitsT, Executor > (agrpc)
ServerRPC< RequestServerStreaming, TraitsT, Executor > (agrpc)
ServerRPC< RequestUnary, TraitsT, Executor > (agrpc)
ServerRPCBase (agrpc::detail)
ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor > (agrpc::detail)
ServerRPCContextBase (agrpc::detail)
ServerRPCNotifyWhenDoneMixin (agrpc::detail)
ServerRPCPtr (agrpc)
+
+
U
+
UseSender (agrpc)
+
+
W
+
Waiter (agrpc)
+
+
+
+ + + + diff --git a/docs/clipboard.js b/docs/clipboard.js new file mode 100644 index 00000000..42c1fb0e --- /dev/null +++ b/docs/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/closed.png b/docs/closed.png new file mode 100644 index 00000000..12a4330f Binary files /dev/null and b/docs/closed.png differ diff --git a/docs/cookie.js b/docs/cookie.js new file mode 100644 index 00000000..53ad21d9 --- /dev/null +++ b/docs/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/custom.css b/docs/custom.css new file mode 100644 index 00000000..4f015dbb --- /dev/null +++ b/docs/custom.css @@ -0,0 +1,3 @@ +html { + --content-maxwidth: 95%; +} \ No newline at end of file diff --git a/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 00000000..ac574b20 --- /dev/null +++ b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,128 @@ + + + + + + + + +asio-grpc: src Directory Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
src Directory Reference
+
+
+ + + + +

+Directories

 agrpc
 
+
+
+ + + + diff --git a/docs/dir_700bf0e24be506c81407d73b2ecc08df.html b/docs/dir_700bf0e24be506c81407d73b2ecc08df.html new file mode 100644 index 00000000..9b9a551b --- /dev/null +++ b/docs/dir_700bf0e24be506c81407d73b2ecc08df.html @@ -0,0 +1,140 @@ + + + + + + + + +asio-grpc: src/agrpc Directory Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
agrpc Directory Reference
+
+
+
+ + Directory dependency graph for agrpc:
+
+
+ + + + + +

+Directories

 detail
 
+
+
+ + + + diff --git a/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.map b/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.map new file mode 100644 index 00000000..c081fc0f --- /dev/null +++ b/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.md5 b/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.md5 new file mode 100644 index 00000000..b2c2a2ee --- /dev/null +++ b/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.md5 @@ -0,0 +1 @@ +2566160e715c428c96d493e7826c37e2 \ No newline at end of file diff --git a/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.png b/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.png new file mode 100644 index 00000000..a18b2e96 Binary files /dev/null and b/docs/dir_700bf0e24be506c81407d73b2ecc08df_dep.png differ diff --git a/docs/dir_7a256c75ee72433a37583484d6be1d92.html b/docs/dir_7a256c75ee72433a37583484d6be1d92.html new file mode 100644 index 00000000..fd703223 --- /dev/null +++ b/docs/dir_7a256c75ee72433a37583484d6be1d92.html @@ -0,0 +1,133 @@ + + + + + + + + +asio-grpc: src/agrpc/detail Directory Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
detail Directory Reference
+
+
+
+ + Directory dependency graph for detail:
+
+
+ +
+
+ + + + diff --git a/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.map b/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.map new file mode 100644 index 00000000..c18a9f04 --- /dev/null +++ b/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.md5 b/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.md5 new file mode 100644 index 00000000..23c13d81 --- /dev/null +++ b/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.md5 @@ -0,0 +1 @@ +6d3e6de06c98c252f7ce17303892eca8 \ No newline at end of file diff --git a/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.png b/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.png new file mode 100644 index 00000000..c889547c Binary files /dev/null and b/docs/dir_7a256c75ee72433a37583484d6be1d92_dep.png differ diff --git a/docs/dir_a5bdbfbbaa7895161d62825676df7980.html b/docs/dir_a5bdbfbbaa7895161d62825676df7980.html new file mode 100644 index 00000000..36048d07 --- /dev/null +++ b/docs/dir_a5bdbfbbaa7895161d62825676df7980.html @@ -0,0 +1,122 @@ + + + + + + + + +asio-grpc: cmake Directory Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
cmake Directory Reference
+
+
+
+
+ + + + diff --git a/docs/dir_e68e8157741866f444e17edd764ebbae.html b/docs/dir_e68e8157741866f444e17edd764ebbae.html new file mode 100644 index 00000000..76f83e70 --- /dev/null +++ b/docs/dir_e68e8157741866f444e17edd764ebbae.html @@ -0,0 +1,122 @@ + + + + + + + + +asio-grpc: doc Directory Reference + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
doc Directory Reference
+
+
+
+
+ + + + diff --git a/docs/doc.svg b/docs/doc.svg new file mode 100644 index 00000000..3a3097d3 --- /dev/null +++ b/docs/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/docd.svg b/docs/docd.svg new file mode 100644 index 00000000..6573c27b --- /dev/null +++ b/docs/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/doxygen-awesome-darkmode-toggle.js b/docs/doxygen-awesome-darkmode-toggle.js new file mode 100644 index 00000000..40fe2d38 --- /dev/null +++ b/docs/doxygen-awesome-darkmode-toggle.js @@ -0,0 +1,157 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeDarkModeToggle extends HTMLElement { + // SVG icons from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static lightModeIcon = `` + static darkModeIcon = `` + static title = "Toggle Light/Dark Mode" + + static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" + static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" + + static _staticConstructor = function() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference) + // Update the color scheme when the browsers preference changes + // without user interaction on the website. + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + }) + // Update the color scheme when the tab is made visible again. + // It is possible that the appearance was changed in another tab + // while this tab was in the background. + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + } + }); + }() + + static init() { + $(function() { + $(document).ready(function() { + const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle') + toggleButton.title = DoxygenAwesomeDarkModeToggle.title + toggleButton.updateIcon() + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + toggleButton.updateIcon() + }) + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + toggleButton.updateIcon() + } + }); + + $(document).ready(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + $(window).resize(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + }) + }) + } + + constructor() { + super(); + this.onclick=this.toggleDarkMode + } + + /** + * @returns `true` for dark-mode, `false` for light-mode system preference + */ + static get systemPreference() { + return window.matchMedia('(prefers-color-scheme: dark)').matches + } + + /** + * @returns `true` for dark-mode, `false` for light-mode user preference + */ + static get userPreference() { + return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) || + (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) + } + + static set userPreference(userPreference) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference + if(!userPreference) { + if(DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) + } + } else { + if(!DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) + } + } + DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged() + } + + static enableDarkMode(enable) { + if(enable) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = true + document.documentElement.classList.add("dark-mode") + document.documentElement.classList.remove("light-mode") + } else { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = false + document.documentElement.classList.remove("dark-mode") + document.documentElement.classList.add("light-mode") + } + } + + static onSystemPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + static onUserPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + toggleDarkMode() { + DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference + this.updateIcon() + } + + updateIcon() { + if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) { + this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon + } else { + this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon + } + } +} + +customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle); diff --git a/docs/doxygen-awesome-sidebar-only-darkmode-toggle.css b/docs/doxygen-awesome-sidebar-only-darkmode-toggle.css new file mode 100644 index 00000000..d207446e --- /dev/null +++ b/docs/doxygen-awesome-sidebar-only-darkmode-toggle.css @@ -0,0 +1,40 @@ + +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +@media screen and (min-width: 768px) { + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 1px); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 66px - var(--searchbar-height)); + } +} diff --git a/docs/doxygen-awesome-sidebar-only.css b/docs/doxygen-awesome-sidebar-only.css new file mode 100644 index 00000000..853f6d69 --- /dev/null +++ b/docs/doxygen-awesome-sidebar-only.css @@ -0,0 +1,116 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + */ + +html { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enough to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 335px; + --menu-display: none; + + --top-height: 120px; + --toc-sticky-top: -25px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); +} + +#projectname { + white-space: nowrap; +} + + +@media screen and (min-width: 768px) { + html { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + overflow: visible; + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + overflow: hidden; + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + background: var(--separator-color); + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/docs/doxygen-awesome.css b/docs/doxygen-awesome.css new file mode 100644 index 00000000..c2f41142 --- /dev/null +++ b/docs/doxygen-awesome.css @@ -0,0 +1,2681 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); + overflow: hidden; + text-overflow: ellipsis; +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; + color: var(--primary-color) !important; + font-weight: 500; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname, .paramname em { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: var(--page-background-color); + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 var(--separator-color), + -100px 0 var(--separator-color), + 500px 0 var(--separator-color), + -500px 0 var(--separator-color), + 900px 0 var(--separator-color), + -900px 0 var(--separator-color), + 1400px 0 var(--separator-color), + -1400px 0 var(--separator-color), + 1900px 0 var(--separator-color), + -1900px 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} diff --git a/docs/doxygen.css b/docs/doxygen.css new file mode 100644 index 00000000..89fee7eb --- /dev/null +++ b/docs/doxygen.css @@ -0,0 +1,1841 @@ +/* The standard CSS for doxygen 1.12.0*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #1F92FF; + color: #003B72; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F1F8FF; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #004789; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #0057A9; +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #F3F9FE; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #0057A9; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #0057A9; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #8DC8FF; + border-radius: 4px; + background-color: #F8FBFF; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: black; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #0057A9; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #0057A9; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #0057A9; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #EFF7FF; + border-left: 2px solid #43A4FF; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #002E5A; +} + +th.dirtab { + background-color: #003E78; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #005DB5; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F3F9FE; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #BDDFFF; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #0057A9; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #59AEFF; + border-left: 1px solid #59AEFF; + border-right: 1px solid #59AEFF; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #C6E3FE; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #0057A9; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #59AEFF; + border-left: 1px solid #59AEFF; + border-right: 1px solid #59AEFF; + padding: 6px 0px 6px 0px; + color: #002344; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #C0E0FF; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #59AEFF; + border-left: 1px solid #59AEFF; + border-right: 1px solid #59AEFF; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #0081FA; + border-top:1px solid #0067C9; + border-left:1px solid #0067C9; + border-right:1px solid #8DC8FF; + border-bottom:1px solid #8DC8FF; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #43A4FF; + border-bottom: 1px solid #43A4FF; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F1F8FF; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #004789; +} + +.arrow { + color: #43A4FF; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #0081FA; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #002A52; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #002E5A; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #003E78; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #59AEFF; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid #59AEFF; + border-bottom: 1px solid #59AEFF; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid #59AEFF; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #C6E3FE; + font-size: 90%; + color: #002344; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #59AEFF; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#00274D; + border:solid 1px #88C5FF; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #003C74; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: #00274D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #002A52; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F3F9FE; + margin: 0px; + border-bottom: 1px solid #8DC8FF; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: #b61825; +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #0067C9; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#00376A; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #EAF5FE; + border: 1px solid #B2DAFF; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #0057A9; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #0057A9; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #002E5A; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #003E78; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/docs/doxygen.svg b/docs/doxygen.svg new file mode 100644 index 00000000..2bfeb738 --- /dev/null +++ b/docs/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen_crawl.html b/docs/doxygen_crawl.html new file mode 100644 index 00000000..e6c438ed --- /dev/null +++ b/docs/doxygen_crawl.html @@ -0,0 +1,746 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/dynsections.js b/docs/dynsections.js new file mode 100644 index 00000000..3cc426a6 --- /dev/null +++ b/docs/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/docs/folderclosed.svg b/docs/folderclosed.svg new file mode 100644 index 00000000..3fe1ba6e --- /dev/null +++ b/docs/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/folderclosedd.svg b/docs/folderclosedd.svg new file mode 100644 index 00000000..2c15e7e2 --- /dev/null +++ b/docs/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/folderopen.svg b/docs/folderopen.svg new file mode 100644 index 00000000..923a0c20 --- /dev/null +++ b/docs/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/folderopend.svg b/docs/folderopend.svg new file mode 100644 index 00000000..c5f2bbff --- /dev/null +++ b/docs/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/functions.html b/docs/functions.html new file mode 100644 index 00000000..adae244f --- /dev/null +++ b/docs/functions.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+
+ + + + diff --git a/docs/functions_b.html b/docs/functions_b.html new file mode 100644 index 00000000..3dd70688 --- /dev/null +++ b/docs/functions_b.html @@ -0,0 +1,124 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+
+ + + + diff --git a/docs/functions_c.html b/docs/functions_c.html new file mode 100644 index 00000000..4d0080e6 --- /dev/null +++ b/docs/functions_c.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+
+ + + + diff --git a/docs/functions_d.html b/docs/functions_d.html new file mode 100644 index 00000000..67e1a49b --- /dev/null +++ b/docs/functions_d.html @@ -0,0 +1,124 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+
+ + + + diff --git a/docs/functions_dup.js b/docs/functions_dup.js new file mode 100644 index 00000000..6a67b9fa --- /dev/null +++ b/docs/functions_dup.js @@ -0,0 +1,21 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "b", "functions_b.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "f", "functions_f.html", null ], + [ "g", "functions_g.html", null ], + [ "i", "functions_i.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "o", "functions_o.html", null ], + [ "p", "functions_p.html", null ], + [ "q", "functions_q.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "t", "functions_t.html", null ], + [ "w", "functions_w.html", null ], + [ "~", "functions_~.html", null ] +]; \ No newline at end of file diff --git a/docs/functions_e.html b/docs/functions_e.html new file mode 100644 index 00000000..05ef6931 --- /dev/null +++ b/docs/functions_e.html @@ -0,0 +1,124 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+
+ + + + diff --git a/docs/functions_f.html b/docs/functions_f.html new file mode 100644 index 00000000..985f269e --- /dev/null +++ b/docs/functions_f.html @@ -0,0 +1,124 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+
+ + + + diff --git a/docs/functions_func.html b/docs/functions_func.html new file mode 100644 index 00000000..3e7719af --- /dev/null +++ b/docs/functions_func.html @@ -0,0 +1,246 @@ + + + + + + + + +asio-grpc: Class Members - Functions + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- w -

+ + +

- ~ -

+
+
+ + + + diff --git a/docs/functions_g.html b/docs/functions_g.html new file mode 100644 index 00000000..d048bd51 --- /dev/null +++ b/docs/functions_g.html @@ -0,0 +1,128 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+
+ + + + diff --git a/docs/functions_i.html b/docs/functions_i.html new file mode 100644 index 00000000..479c0e61 --- /dev/null +++ b/docs/functions_i.html @@ -0,0 +1,126 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+
+ + + + diff --git a/docs/functions_m.html b/docs/functions_m.html new file mode 100644 index 00000000..96069af7 --- /dev/null +++ b/docs/functions_m.html @@ -0,0 +1,124 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+
+ + + + diff --git a/docs/functions_n.html b/docs/functions_n.html new file mode 100644 index 00000000..d606d19d --- /dev/null +++ b/docs/functions_n.html @@ -0,0 +1,123 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+
+ + + + diff --git a/docs/functions_o.html b/docs/functions_o.html new file mode 100644 index 00000000..43d2c433 --- /dev/null +++ b/docs/functions_o.html @@ -0,0 +1,131 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+
+ + + + diff --git a/docs/functions_p.html b/docs/functions_p.html new file mode 100644 index 00000000..41430e6d --- /dev/null +++ b/docs/functions_p.html @@ -0,0 +1,127 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+
+ + + + diff --git a/docs/functions_q.html b/docs/functions_q.html new file mode 100644 index 00000000..c07e3dd5 --- /dev/null +++ b/docs/functions_q.html @@ -0,0 +1,123 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
+
+ + + + diff --git a/docs/functions_r.html b/docs/functions_r.html new file mode 100644 index 00000000..4e79fbd2 --- /dev/null +++ b/docs/functions_r.html @@ -0,0 +1,135 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+
+ + + + diff --git a/docs/functions_rela.html b/docs/functions_rela.html new file mode 100644 index 00000000..65f60377 --- /dev/null +++ b/docs/functions_rela.html @@ -0,0 +1,123 @@ + + + + + + + + +asio-grpc: Class Members - Related Symbols + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented related symbols with links to the class documentation for each member:
+
+
+ + + + diff --git a/docs/functions_s.html b/docs/functions_s.html new file mode 100644 index 00000000..a5002bf2 --- /dev/null +++ b/docs/functions_s.html @@ -0,0 +1,134 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+
+ + + + diff --git a/docs/functions_t.html b/docs/functions_t.html new file mode 100644 index 00000000..6c79af19 --- /dev/null +++ b/docs/functions_t.html @@ -0,0 +1,124 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+
+ + + + diff --git a/docs/functions_type.html b/docs/functions_type.html new file mode 100644 index 00000000..c33cdcf6 --- /dev/null +++ b/docs/functions_type.html @@ -0,0 +1,156 @@ + + + + + + + + +asio-grpc: Class Members - Typedefs + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented typedefs with links to the class documentation for each member:
+ +

- a -

+ + +

- e -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+
+
+ + + + diff --git a/docs/functions_vars.html b/docs/functions_vars.html new file mode 100644 index 00000000..3c0afd46 --- /dev/null +++ b/docs/functions_vars.html @@ -0,0 +1,123 @@ + + + + + + + + +asio-grpc: Class Members - Variables + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+
+
+ + + + diff --git a/docs/functions_w.html b/docs/functions_w.html new file mode 100644 index 00000000..1025c3cd --- /dev/null +++ b/docs/functions_w.html @@ -0,0 +1,130 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+
+ + + + diff --git a/docs/functions_~.html b/docs/functions_~.html new file mode 100644 index 00000000..74a3d909 --- /dev/null +++ b/docs/functions_~.html @@ -0,0 +1,124 @@ + + + + + + + + +asio-grpc: Class Members + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+
+ + + + diff --git a/docs/graph_legend.html b/docs/graph_legend.html new file mode 100644 index 00000000..3b41790b --- /dev/null +++ b/docs/graph_legend.html @@ -0,0 +1,181 @@ + + + + + + + + +asio-grpc: Graph Legend + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+ +

The arrows have the following meaning:

+ +
+
+ + + + diff --git a/docs/graph_legend.md5 b/docs/graph_legend.md5 new file mode 100644 index 00000000..da515da9 --- /dev/null +++ b/docs/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/docs/graph_legend.png b/docs/graph_legend.png new file mode 100644 index 00000000..15bf62a2 Binary files /dev/null and b/docs/graph_legend.png differ diff --git a/docs/hierarchy.html b/docs/hierarchy.html new file mode 100644 index 00000000..631d4b75 --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1,205 @@ + + + + + + + + +asio-grpc: Class Hierarchy + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Cagrpc::BasicAlarm< Executor >I/O object for grpc::Alarm
 Cagrpc::BasicGrpcExecutor< Allocator, Options >GrpcContext's executor
 Cagrpc::ClientRPC< PrepareAsync, Executor >Primary ClientRPC template
 Cagrpc::detail::ClientRPCContextBase< Responder >ClientRPC grpc::ClientContext base
 Cagrpc::detail::ClientRPCBase< Responder, Executor >ServerRPC base
 Cagrpc::detail::ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >
 Cagrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >
 Cagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >I/O object for client-side, generic, unary rpcs
 Cagrpc::detail::ClientRPCContextBase< Responder< Response > >
 Cagrpc::detail::ClientRPCContextBase< ResponderT< RequestT > >
 Cagrpc::detail::ClientRPCBase< ResponderT< RequestT >, Executor >
 Cagrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >I/O object for client-side, client-streaming rpcs
 Cagrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >
 Cagrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >
 Cagrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >Bidirectional-streaming ClientRPC base
 Cagrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >I/O object for client-side, bidirectional-streaming rpcs
 Cagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >I/O object for client-side, generic, streaming rpcs
 Cagrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >
 Cagrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >
 Cagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >Server-streaming ClientRPC base
 Cagrpc::ClientRPC< PrepareAsyncServerStreaming, Executor >I/O object for client-side, server-streaming rpcs
 Cagrpc::ClientRPC< PrepareAsyncServerStreaming, Executor >I/O object for client-side, server-streaming rpcs
 Cagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >Unary ClientRPC base
 Cagrpc::ClientRPC< PrepareAsyncUnary, Executor >I/O object for client-side, unary rpcs
 Cagrpc::ClientRPC< PrepareAsyncUnary, Executor >I/O object for client-side, unary rpcs
 Cagrpc::DefaultRunTraits(experimental) Default run traits
 Cagrpc::DefaultServerRPCTraitsDefault ServerRPC traits
 Cagrpc::GrpcContextExecution context based on grpc::CompletionQueue
 Cagrpc::HealthCheckServiceCompletionQueue-based implementation of grpc::HealthCheckServiceInterface
 Cagrpc::detail::NotifyOnStateChangeFnFunction to set notification for a grpc::Channel state change
 Cagrpc::detail::ReadFnServer/ClientRPC.read in form of a function object
 Cagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor >Rebind the ClientRPC to another executor
 Cagrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor >Rebind the ClientRPC to another executor
 Cagrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor >Rebind the ClientRPC to another executor
 Cagrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor >Rebind the ClientRPC to another executor
 Cagrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor >Rebind the ClientRPC to another executor
 Cagrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor >Rebind the ClientRPC to another executor
 Cagrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor >Rebind the ServerRPC to another executor
 Cagrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >Rebind the ServerRPC to another executor
 Cagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >Rebind the ServerRPC to another executor
 Cagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >Rebind the ServerRPC to another executor
 Cagrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor >Rebind the ServerRPC to another executor
 Cagrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor >Rebind the Waiter to another executor
 Cagrpc::detail::RPCExecutorBase< Executor >RPC's executor base
 Cagrpc::detail::ClientRPCBase< ResponderT< RequestT >, Executor >
 Cagrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >
 Cagrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >
 Cagrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >
 Cagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >
 Cagrpc::detail::ServerRPCBase< grpc::ServerAsyncReader< ResponseT, RequestT >, TraitsT, Executor >
 Cagrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >I/O object for server-side, client-streaming rpcs
 Cagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncWriter< ResponseT >, Executor >
 Cagrpc::detail::ServerRPCBase< grpc::ServerAsyncWriter< ResponseT >, TraitsT, Executor >
 Cagrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >I/O object for server-side, server-streaming rpcs
 Cagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >
 Cagrpc::detail::ServerRPCBase< grpc::ServerAsyncResponseWriter< ResponseT >, TraitsT, Executor >
 Cagrpc::ServerRPC< RequestUnary, TraitsT, Executor >I/O object for server-side, unary rpcs
 Cagrpc::detail::ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, Responder, Executor >
 Cagrpc::detail::ServerRPCBase< Responder, Traits, Executor >ServerRPC base
 Cagrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >
 Cagrpc::detail::ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >
 Cagrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >ServerRPC bidirectional-streaming base
 Cagrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >I/O object for server-side, bidirectional-streaming rpcs
 Cagrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >I/O object for server-side, generic rpcs
 Cagrpc::detail::ClientRPCBase< Responder, Executor >ServerRPC base
 Cagrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >ServerRPC NotifyWhenDone base
 Cagrpc::ServerRPC< RequestRPC, Traits, Executor >Primary ServerRPC template
 Cagrpc::detail::ServerRPCContextBase< Responder >ServerRPC ServerContext base
 Cagrpc::detail::ServerRPCContextBase< grpc::ServerAsyncReader< ResponseT, RequestT > >
 Cagrpc::detail::ServerRPCContextBase< grpc::ServerAsyncResponseWriter< ResponseT > >
 Cagrpc::detail::ServerRPCContextBase< grpc::ServerAsyncWriter< ResponseT > >
 Cagrpc::detail::ServerRPCContextBase< Responder< Response, Request > >
 Cagrpc::detail::ServerRPCContextBase< Responder< Response, Request... > >
 Cagrpc::detail::ServerRPCContextBase< ResponderT< ResponseT, RequestT > >
 Cagrpc::ServerRPCPtr< ServerRPCT >Allocated ServerRPC created by register_callback_rpc_handler
 Cagrpc::ServerRPCPtr< ServerRPC >
 Cagrpc::UseSenderSender completion token
 Cagrpc::Waiter< Signature, Executor >(experimental) Utility class for uncancelable operations
+
+
+
+ + + + diff --git a/docs/hierarchy.js b/docs/hierarchy.js new file mode 100644 index 00000000..9494d0f8 --- /dev/null +++ b/docs/hierarchy.js @@ -0,0 +1,104 @@ +var hierarchy = +[ + [ "agrpc::BasicAlarm< Executor >", "classagrpc_1_1_basic_alarm.html", null ], + [ "agrpc::BasicGrpcExecutor< Allocator, Options >", "classagrpc_1_1_basic_grpc_executor.html", null ], + [ "agrpc::ClientRPC< PrepareAsync, Executor >", "classagrpc_1_1_client_r_p_c.html", null ], + [ "agrpc::detail::ClientRPCContextBase< Responder >", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html", [ + [ "agrpc::detail::ClientRPCBase< Responder, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", null ] + ] ], + [ "agrpc::detail::ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html", [ + [ "agrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", [ + [ "agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html", null ] + ] ] + ] ], + [ "agrpc::detail::ClientRPCContextBase< Responder< Response > >", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html", null ], + [ "agrpc::detail::ClientRPCContextBase< ResponderT< RequestT > >", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html", [ + [ "agrpc::detail::ClientRPCBase< ResponderT< RequestT >, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", [ + [ "agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html", null ] + ] ] + ] ], + [ "agrpc::detail::ClientRPCContextBase< ResponderT< RequestT, ResponseT > >", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html", [ + [ "agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", [ + [ "agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html", [ + [ "agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html", null ], + [ "agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html", null ] + ] ] + ] ] + ] ], + [ "agrpc::detail::ClientRPCContextBase< ResponderT< ResponseT > >", "classagrpc_1_1detail_1_1_client_r_p_c_context_base.html", [ + [ "agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", [ + [ "agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html", [ + [ "agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html", null ], + [ "agrpc::ClientRPC< PrepareAsyncServerStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html", null ] + ] ], + [ "agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html", [ + [ "agrpc::ClientRPC< PrepareAsyncUnary, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html", null ], + [ "agrpc::ClientRPC< PrepareAsyncUnary, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html", null ] + ] ] + ] ] + ] ], + [ "agrpc::DefaultRunTraits", "structagrpc_1_1_default_run_traits.html", null ], + [ "agrpc::DefaultServerRPCTraits", "structagrpc_1_1_default_server_r_p_c_traits.html", null ], + [ "agrpc::GrpcContext", "classagrpc_1_1_grpc_context.html", null ], + [ "agrpc::HealthCheckService", "classagrpc_1_1_health_check_service.html", null ], + [ "agrpc::detail::NotifyOnStateChangeFn", "structagrpc_1_1detail_1_1_notify_on_state_change_fn.html", null ], + [ "agrpc::detail::ReadFn", "structagrpc_1_1detail_1_1_read_fn.html", null ], + [ "agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html", null ], + [ "agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html", null ], + [ "agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html", null ], + [ "agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html", null ], + [ "agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html", null ], + [ "agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html", null ], + [ "agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html", null ], + [ "agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html", null ], + [ "agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html", null ], + [ "agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html", null ], + [ "agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html", null ], + [ "agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor >", "structagrpc_1_1_waiter_1_1rebind__executor.html", null ], + [ "agrpc::detail::RPCExecutorBase< Executor >", "classagrpc_1_1detail_1_1_r_p_c_executor_base.html", [ + [ "agrpc::detail::ClientRPCBase< ResponderT< RequestT >, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", null ], + [ "agrpc::detail::ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", null ], + [ "agrpc::detail::ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", null ], + [ "agrpc::detail::ClientRPCBase< ResponderT< ResponseT >, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", null ], + [ "agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html", [ + [ "agrpc::detail::ServerRPCBase< grpc::ServerAsyncReader< ResponseT, RequestT >, TraitsT, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_base.html", [ + [ "agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html", null ] + ] ] + ] ], + [ "agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncWriter< ResponseT >, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html", [ + [ "agrpc::detail::ServerRPCBase< grpc::ServerAsyncWriter< ResponseT >, TraitsT, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_base.html", [ + [ "agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html", null ] + ] ] + ] ], + [ "agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html", [ + [ "agrpc::detail::ServerRPCBase< grpc::ServerAsyncResponseWriter< ResponseT >, TraitsT, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_base.html", [ + [ "agrpc::ServerRPC< RequestUnary, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html", null ] + ] ] + ] ], + [ "agrpc::detail::ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, Responder, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html", [ + [ "agrpc::detail::ServerRPCBase< Responder, Traits, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_base.html", null ] + ] ], + [ "agrpc::detail::ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html", [ + [ "agrpc::detail::ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_base.html", [ + [ "agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html", [ + [ "agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html", null ], + [ "agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html", null ] + ] ] + ] ] + ] ], + [ "agrpc::detail::ClientRPCBase< Responder, Executor >", "classagrpc_1_1detail_1_1_client_r_p_c_base.html", null ], + [ "agrpc::detail::ServerRPCNotifyWhenDoneMixin< IsNotifyWhenDone, Responder, Executor >", "classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html", null ] + ] ], + [ "agrpc::ServerRPC< RequestRPC, Traits, Executor >", "classagrpc_1_1_server_r_p_c.html", null ], + [ "agrpc::detail::ServerRPCContextBase< Responder >", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html", null ], + [ "agrpc::detail::ServerRPCContextBase< grpc::ServerAsyncReader< ResponseT, RequestT > >", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html", null ], + [ "agrpc::detail::ServerRPCContextBase< grpc::ServerAsyncResponseWriter< ResponseT > >", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html", null ], + [ "agrpc::detail::ServerRPCContextBase< grpc::ServerAsyncWriter< ResponseT > >", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html", null ], + [ "agrpc::detail::ServerRPCContextBase< Responder< Response, Request > >", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html", null ], + [ "agrpc::detail::ServerRPCContextBase< Responder< Response, Request... > >", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html", null ], + [ "agrpc::detail::ServerRPCContextBase< ResponderT< ResponseT, RequestT > >", "classagrpc_1_1detail_1_1_server_r_p_c_context_base.html", null ], + [ "agrpc::ServerRPCPtr< ServerRPCT >", "classagrpc_1_1_server_r_p_c_ptr.html", null ], + [ "agrpc::ServerRPCPtr< ServerRPC >", "classagrpc_1_1_server_r_p_c_ptr.html", null ], + [ "agrpc::UseSender", "structagrpc_1_1_use_sender.html", null ], + [ "agrpc::Waiter< Signature, Executor >", "classagrpc_1_1_waiter.html", null ] +]; \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..3ac7bbe4 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,139 @@ + + + + + + + + +asio-grpc: asio-grpc + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
asio-grpc
+
+
+

+

+Overview

+

Feature overview, installation and performance benchmark can be found on github.

+ +
+ +
+
+ + + + diff --git a/docs/inherit_graph_0.map b/docs/inherit_graph_0.map new file mode 100644 index 00000000..1ac68d00 --- /dev/null +++ b/docs/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_0.md5 b/docs/inherit_graph_0.md5 new file mode 100644 index 00000000..8b6f35c7 --- /dev/null +++ b/docs/inherit_graph_0.md5 @@ -0,0 +1 @@ +f163eb425ea0bebc6760a20bd34a635b \ No newline at end of file diff --git a/docs/inherit_graph_0.png b/docs/inherit_graph_0.png new file mode 100644 index 00000000..798bf7a9 Binary files /dev/null and b/docs/inherit_graph_0.png differ diff --git a/docs/inherit_graph_1.map b/docs/inherit_graph_1.map new file mode 100644 index 00000000..8030cd1d --- /dev/null +++ b/docs/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_1.md5 b/docs/inherit_graph_1.md5 new file mode 100644 index 00000000..4cba6f81 --- /dev/null +++ b/docs/inherit_graph_1.md5 @@ -0,0 +1 @@ +ca7102ef37dc67e2d83e213b8ef9c977 \ No newline at end of file diff --git a/docs/inherit_graph_1.png b/docs/inherit_graph_1.png new file mode 100644 index 00000000..4c509b0e Binary files /dev/null and b/docs/inherit_graph_1.png differ diff --git a/docs/inherit_graph_10.map b/docs/inherit_graph_10.map new file mode 100644 index 00000000..63218ba1 --- /dev/null +++ b/docs/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_10.md5 b/docs/inherit_graph_10.md5 new file mode 100644 index 00000000..82ddbfbc --- /dev/null +++ b/docs/inherit_graph_10.md5 @@ -0,0 +1 @@ +082f151465bd208859ba18cfc013d9c5 \ No newline at end of file diff --git a/docs/inherit_graph_10.png b/docs/inherit_graph_10.png new file mode 100644 index 00000000..53d6e226 Binary files /dev/null and b/docs/inherit_graph_10.png differ diff --git a/docs/inherit_graph_11.map b/docs/inherit_graph_11.map new file mode 100644 index 00000000..c738467b --- /dev/null +++ b/docs/inherit_graph_11.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_11.md5 b/docs/inherit_graph_11.md5 new file mode 100644 index 00000000..9c75fa48 --- /dev/null +++ b/docs/inherit_graph_11.md5 @@ -0,0 +1 @@ +d4688da629f0476a8d1428163c3d1ff8 \ No newline at end of file diff --git a/docs/inherit_graph_11.png b/docs/inherit_graph_11.png new file mode 100644 index 00000000..7aa5c494 Binary files /dev/null and b/docs/inherit_graph_11.png differ diff --git a/docs/inherit_graph_12.map b/docs/inherit_graph_12.map new file mode 100644 index 00000000..f12aae3e --- /dev/null +++ b/docs/inherit_graph_12.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_12.md5 b/docs/inherit_graph_12.md5 new file mode 100644 index 00000000..516061ab --- /dev/null +++ b/docs/inherit_graph_12.md5 @@ -0,0 +1 @@ +8ac9ce23b4f6a68b8f5361b6695a371d \ No newline at end of file diff --git a/docs/inherit_graph_12.png b/docs/inherit_graph_12.png new file mode 100644 index 00000000..2e8a68e9 Binary files /dev/null and b/docs/inherit_graph_12.png differ diff --git a/docs/inherit_graph_13.map b/docs/inherit_graph_13.map new file mode 100644 index 00000000..50d64d61 --- /dev/null +++ b/docs/inherit_graph_13.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_13.md5 b/docs/inherit_graph_13.md5 new file mode 100644 index 00000000..50e33f72 --- /dev/null +++ b/docs/inherit_graph_13.md5 @@ -0,0 +1 @@ +d0aeb13f8272a05a9f6d3b0569e027aa \ No newline at end of file diff --git a/docs/inherit_graph_13.png b/docs/inherit_graph_13.png new file mode 100644 index 00000000..bfe232d7 Binary files /dev/null and b/docs/inherit_graph_13.png differ diff --git a/docs/inherit_graph_14.map b/docs/inherit_graph_14.map new file mode 100644 index 00000000..baef58b1 --- /dev/null +++ b/docs/inherit_graph_14.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_14.md5 b/docs/inherit_graph_14.md5 new file mode 100644 index 00000000..5d5428de --- /dev/null +++ b/docs/inherit_graph_14.md5 @@ -0,0 +1 @@ +f64dc589260b3c709265c01165cb10f8 \ No newline at end of file diff --git a/docs/inherit_graph_14.png b/docs/inherit_graph_14.png new file mode 100644 index 00000000..be2fa340 Binary files /dev/null and b/docs/inherit_graph_14.png differ diff --git a/docs/inherit_graph_15.map b/docs/inherit_graph_15.map new file mode 100644 index 00000000..f6e7a583 --- /dev/null +++ b/docs/inherit_graph_15.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_15.md5 b/docs/inherit_graph_15.md5 new file mode 100644 index 00000000..16c757a9 --- /dev/null +++ b/docs/inherit_graph_15.md5 @@ -0,0 +1 @@ +6a3023129092124efae3e27ed113502d \ No newline at end of file diff --git a/docs/inherit_graph_15.png b/docs/inherit_graph_15.png new file mode 100644 index 00000000..a2903f73 Binary files /dev/null and b/docs/inherit_graph_15.png differ diff --git a/docs/inherit_graph_16.map b/docs/inherit_graph_16.map new file mode 100644 index 00000000..b5a77adb --- /dev/null +++ b/docs/inherit_graph_16.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_16.md5 b/docs/inherit_graph_16.md5 new file mode 100644 index 00000000..d6f81c63 --- /dev/null +++ b/docs/inherit_graph_16.md5 @@ -0,0 +1 @@ +f22abcc5f0155c416bd34f855b7efda1 \ No newline at end of file diff --git a/docs/inherit_graph_16.png b/docs/inherit_graph_16.png new file mode 100644 index 00000000..c3705047 Binary files /dev/null and b/docs/inherit_graph_16.png differ diff --git a/docs/inherit_graph_17.map b/docs/inherit_graph_17.map new file mode 100644 index 00000000..f514a84f --- /dev/null +++ b/docs/inherit_graph_17.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_17.md5 b/docs/inherit_graph_17.md5 new file mode 100644 index 00000000..6affb5f9 --- /dev/null +++ b/docs/inherit_graph_17.md5 @@ -0,0 +1 @@ +fd5736ab3f63f22ea6a56f9083a96806 \ No newline at end of file diff --git a/docs/inherit_graph_17.png b/docs/inherit_graph_17.png new file mode 100644 index 00000000..77d6a00f Binary files /dev/null and b/docs/inherit_graph_17.png differ diff --git a/docs/inherit_graph_18.map b/docs/inherit_graph_18.map new file mode 100644 index 00000000..dd3f9b18 --- /dev/null +++ b/docs/inherit_graph_18.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_18.md5 b/docs/inherit_graph_18.md5 new file mode 100644 index 00000000..6d126016 --- /dev/null +++ b/docs/inherit_graph_18.md5 @@ -0,0 +1 @@ +8ac980e3c27b8529cf2475e137e89914 \ No newline at end of file diff --git a/docs/inherit_graph_18.png b/docs/inherit_graph_18.png new file mode 100644 index 00000000..83b5c917 Binary files /dev/null and b/docs/inherit_graph_18.png differ diff --git a/docs/inherit_graph_19.map b/docs/inherit_graph_19.map new file mode 100644 index 00000000..f514a84f --- /dev/null +++ b/docs/inherit_graph_19.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_19.md5 b/docs/inherit_graph_19.md5 new file mode 100644 index 00000000..f17602b9 --- /dev/null +++ b/docs/inherit_graph_19.md5 @@ -0,0 +1 @@ +b84e5254e4f14cc26e899ec0e2128aee \ No newline at end of file diff --git a/docs/inherit_graph_19.png b/docs/inherit_graph_19.png new file mode 100644 index 00000000..a7b3c39c Binary files /dev/null and b/docs/inherit_graph_19.png differ diff --git a/docs/inherit_graph_2.map b/docs/inherit_graph_2.map new file mode 100644 index 00000000..f0b2cedc --- /dev/null +++ b/docs/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_2.md5 b/docs/inherit_graph_2.md5 new file mode 100644 index 00000000..649520ae --- /dev/null +++ b/docs/inherit_graph_2.md5 @@ -0,0 +1 @@ +101ffef4ca397832e8ac71c368d1ca3b \ No newline at end of file diff --git a/docs/inherit_graph_2.png b/docs/inherit_graph_2.png new file mode 100644 index 00000000..1757db25 Binary files /dev/null and b/docs/inherit_graph_2.png differ diff --git a/docs/inherit_graph_20.map b/docs/inherit_graph_20.map new file mode 100644 index 00000000..f514a84f --- /dev/null +++ b/docs/inherit_graph_20.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_20.md5 b/docs/inherit_graph_20.md5 new file mode 100644 index 00000000..9fecd834 --- /dev/null +++ b/docs/inherit_graph_20.md5 @@ -0,0 +1 @@ +3a4c41b276a19d2c5efa5fd862b436d0 \ No newline at end of file diff --git a/docs/inherit_graph_20.png b/docs/inherit_graph_20.png new file mode 100644 index 00000000..86579943 Binary files /dev/null and b/docs/inherit_graph_20.png differ diff --git a/docs/inherit_graph_21.map b/docs/inherit_graph_21.map new file mode 100644 index 00000000..b49766e0 --- /dev/null +++ b/docs/inherit_graph_21.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_21.md5 b/docs/inherit_graph_21.md5 new file mode 100644 index 00000000..971e68e8 --- /dev/null +++ b/docs/inherit_graph_21.md5 @@ -0,0 +1 @@ +14fdd3925504c70e42909a1868f78b34 \ No newline at end of file diff --git a/docs/inherit_graph_21.png b/docs/inherit_graph_21.png new file mode 100644 index 00000000..6d07bfd1 Binary files /dev/null and b/docs/inherit_graph_21.png differ diff --git a/docs/inherit_graph_22.map b/docs/inherit_graph_22.map new file mode 100644 index 00000000..c40fa0de --- /dev/null +++ b/docs/inherit_graph_22.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_22.md5 b/docs/inherit_graph_22.md5 new file mode 100644 index 00000000..17ba7400 --- /dev/null +++ b/docs/inherit_graph_22.md5 @@ -0,0 +1 @@ +e7f6eacff5a94fa26938f818cc4f3fcd \ No newline at end of file diff --git a/docs/inherit_graph_22.png b/docs/inherit_graph_22.png new file mode 100644 index 00000000..33e613ab Binary files /dev/null and b/docs/inherit_graph_22.png differ diff --git a/docs/inherit_graph_23.map b/docs/inherit_graph_23.map new file mode 100644 index 00000000..93d278c2 --- /dev/null +++ b/docs/inherit_graph_23.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_23.md5 b/docs/inherit_graph_23.md5 new file mode 100644 index 00000000..2680d0a7 --- /dev/null +++ b/docs/inherit_graph_23.md5 @@ -0,0 +1 @@ +fe5be3b2f743919f9aa08e9320654d0c \ No newline at end of file diff --git a/docs/inherit_graph_23.png b/docs/inherit_graph_23.png new file mode 100644 index 00000000..ce7ee243 Binary files /dev/null and b/docs/inherit_graph_23.png differ diff --git a/docs/inherit_graph_24.map b/docs/inherit_graph_24.map new file mode 100644 index 00000000..8df8ad8d --- /dev/null +++ b/docs/inherit_graph_24.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_24.md5 b/docs/inherit_graph_24.md5 new file mode 100644 index 00000000..499aaec9 --- /dev/null +++ b/docs/inherit_graph_24.md5 @@ -0,0 +1 @@ +c38ed332d49050845f364702b34fad00 \ No newline at end of file diff --git a/docs/inherit_graph_24.png b/docs/inherit_graph_24.png new file mode 100644 index 00000000..a890bbd2 Binary files /dev/null and b/docs/inherit_graph_24.png differ diff --git a/docs/inherit_graph_25.map b/docs/inherit_graph_25.map new file mode 100644 index 00000000..db1ef45e --- /dev/null +++ b/docs/inherit_graph_25.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_25.md5 b/docs/inherit_graph_25.md5 new file mode 100644 index 00000000..dd4f3264 --- /dev/null +++ b/docs/inherit_graph_25.md5 @@ -0,0 +1 @@ +5714e08e9c2b04ac525e321b23d8f231 \ No newline at end of file diff --git a/docs/inherit_graph_25.png b/docs/inherit_graph_25.png new file mode 100644 index 00000000..2f712b96 Binary files /dev/null and b/docs/inherit_graph_25.png differ diff --git a/docs/inherit_graph_26.map b/docs/inherit_graph_26.map new file mode 100644 index 00000000..4fdca4da --- /dev/null +++ b/docs/inherit_graph_26.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_26.md5 b/docs/inherit_graph_26.md5 new file mode 100644 index 00000000..40cdb9be --- /dev/null +++ b/docs/inherit_graph_26.md5 @@ -0,0 +1 @@ +8b23d783053ec1df56dc0e28420deb69 \ No newline at end of file diff --git a/docs/inherit_graph_26.png b/docs/inherit_graph_26.png new file mode 100644 index 00000000..144ca974 Binary files /dev/null and b/docs/inherit_graph_26.png differ diff --git a/docs/inherit_graph_27.map b/docs/inherit_graph_27.map new file mode 100644 index 00000000..76dedf0e --- /dev/null +++ b/docs/inherit_graph_27.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_27.md5 b/docs/inherit_graph_27.md5 new file mode 100644 index 00000000..41306473 --- /dev/null +++ b/docs/inherit_graph_27.md5 @@ -0,0 +1 @@ +adf9a9c46f9d057197f3ada4cffb9cdc \ No newline at end of file diff --git a/docs/inherit_graph_27.png b/docs/inherit_graph_27.png new file mode 100644 index 00000000..0fbec736 Binary files /dev/null and b/docs/inherit_graph_27.png differ diff --git a/docs/inherit_graph_28.map b/docs/inherit_graph_28.map new file mode 100644 index 00000000..5643f225 --- /dev/null +++ b/docs/inherit_graph_28.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_28.md5 b/docs/inherit_graph_28.md5 new file mode 100644 index 00000000..80e61575 --- /dev/null +++ b/docs/inherit_graph_28.md5 @@ -0,0 +1 @@ +a73c0759df0700d9f966756322646979 \ No newline at end of file diff --git a/docs/inherit_graph_28.png b/docs/inherit_graph_28.png new file mode 100644 index 00000000..b7d5a3bf Binary files /dev/null and b/docs/inherit_graph_28.png differ diff --git a/docs/inherit_graph_29.map b/docs/inherit_graph_29.map new file mode 100644 index 00000000..ad738534 --- /dev/null +++ b/docs/inherit_graph_29.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_29.md5 b/docs/inherit_graph_29.md5 new file mode 100644 index 00000000..734a7277 --- /dev/null +++ b/docs/inherit_graph_29.md5 @@ -0,0 +1 @@ +7f5016916b36fa88da5203bc52e1eced \ No newline at end of file diff --git a/docs/inherit_graph_29.png b/docs/inherit_graph_29.png new file mode 100644 index 00000000..d63e9dc6 Binary files /dev/null and b/docs/inherit_graph_29.png differ diff --git a/docs/inherit_graph_3.map b/docs/inherit_graph_3.map new file mode 100644 index 00000000..e90e9e71 --- /dev/null +++ b/docs/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_3.md5 b/docs/inherit_graph_3.md5 new file mode 100644 index 00000000..fe93800a --- /dev/null +++ b/docs/inherit_graph_3.md5 @@ -0,0 +1 @@ +ed831f9c43ce8d2a091d2ab958e5df89 \ No newline at end of file diff --git a/docs/inherit_graph_3.png b/docs/inherit_graph_3.png new file mode 100644 index 00000000..ff4f6831 Binary files /dev/null and b/docs/inherit_graph_3.png differ diff --git a/docs/inherit_graph_30.map b/docs/inherit_graph_30.map new file mode 100644 index 00000000..4144bfcb --- /dev/null +++ b/docs/inherit_graph_30.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_30.md5 b/docs/inherit_graph_30.md5 new file mode 100644 index 00000000..4845e22f --- /dev/null +++ b/docs/inherit_graph_30.md5 @@ -0,0 +1 @@ +18e069ded15415c4fb4ea983968f40c2 \ No newline at end of file diff --git a/docs/inherit_graph_30.png b/docs/inherit_graph_30.png new file mode 100644 index 00000000..f733a8e6 Binary files /dev/null and b/docs/inherit_graph_30.png differ diff --git a/docs/inherit_graph_31.map b/docs/inherit_graph_31.map new file mode 100644 index 00000000..47c13aba --- /dev/null +++ b/docs/inherit_graph_31.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_31.md5 b/docs/inherit_graph_31.md5 new file mode 100644 index 00000000..2b0b2823 --- /dev/null +++ b/docs/inherit_graph_31.md5 @@ -0,0 +1 @@ +908f0ea4f3d2ee5959be8625a048e1c9 \ No newline at end of file diff --git a/docs/inherit_graph_31.png b/docs/inherit_graph_31.png new file mode 100644 index 00000000..ac05d8af Binary files /dev/null and b/docs/inherit_graph_31.png differ diff --git a/docs/inherit_graph_32.map b/docs/inherit_graph_32.map new file mode 100644 index 00000000..7533daed --- /dev/null +++ b/docs/inherit_graph_32.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_32.md5 b/docs/inherit_graph_32.md5 new file mode 100644 index 00000000..e0708210 --- /dev/null +++ b/docs/inherit_graph_32.md5 @@ -0,0 +1 @@ +ed2ec5b84605c7efedfe5b66c2159ea2 \ No newline at end of file diff --git a/docs/inherit_graph_32.png b/docs/inherit_graph_32.png new file mode 100644 index 00000000..b2160e8c Binary files /dev/null and b/docs/inherit_graph_32.png differ diff --git a/docs/inherit_graph_33.map b/docs/inherit_graph_33.map new file mode 100644 index 00000000..5fc3a899 --- /dev/null +++ b/docs/inherit_graph_33.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_33.md5 b/docs/inherit_graph_33.md5 new file mode 100644 index 00000000..d2d4c09a --- /dev/null +++ b/docs/inherit_graph_33.md5 @@ -0,0 +1 @@ +7486c6276e6baa888fc4e768f50cea8a \ No newline at end of file diff --git a/docs/inherit_graph_33.png b/docs/inherit_graph_33.png new file mode 100644 index 00000000..5eff552f Binary files /dev/null and b/docs/inherit_graph_33.png differ diff --git a/docs/inherit_graph_34.map b/docs/inherit_graph_34.map new file mode 100644 index 00000000..264f30ca --- /dev/null +++ b/docs/inherit_graph_34.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_34.md5 b/docs/inherit_graph_34.md5 new file mode 100644 index 00000000..e0dd99e5 --- /dev/null +++ b/docs/inherit_graph_34.md5 @@ -0,0 +1 @@ +54e6e8bf87d8d89b55e7c57c7100671b \ No newline at end of file diff --git a/docs/inherit_graph_34.png b/docs/inherit_graph_34.png new file mode 100644 index 00000000..b6d58582 Binary files /dev/null and b/docs/inherit_graph_34.png differ diff --git a/docs/inherit_graph_4.map b/docs/inherit_graph_4.map new file mode 100644 index 00000000..5c723ab7 --- /dev/null +++ b/docs/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_4.md5 b/docs/inherit_graph_4.md5 new file mode 100644 index 00000000..588f3145 --- /dev/null +++ b/docs/inherit_graph_4.md5 @@ -0,0 +1 @@ +9d8eb29c72c587a30105760eff53ad55 \ No newline at end of file diff --git a/docs/inherit_graph_4.png b/docs/inherit_graph_4.png new file mode 100644 index 00000000..661b699c Binary files /dev/null and b/docs/inherit_graph_4.png differ diff --git a/docs/inherit_graph_5.map b/docs/inherit_graph_5.map new file mode 100644 index 00000000..a3dfa5e8 --- /dev/null +++ b/docs/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_5.md5 b/docs/inherit_graph_5.md5 new file mode 100644 index 00000000..baba6450 --- /dev/null +++ b/docs/inherit_graph_5.md5 @@ -0,0 +1 @@ +01df8d664b4f8b553e3d1b3a7dfa5e33 \ No newline at end of file diff --git a/docs/inherit_graph_5.png b/docs/inherit_graph_5.png new file mode 100644 index 00000000..1ce31f9d Binary files /dev/null and b/docs/inherit_graph_5.png differ diff --git a/docs/inherit_graph_6.map b/docs/inherit_graph_6.map new file mode 100644 index 00000000..87ae8c0a --- /dev/null +++ b/docs/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_6.md5 b/docs/inherit_graph_6.md5 new file mode 100644 index 00000000..a285335b --- /dev/null +++ b/docs/inherit_graph_6.md5 @@ -0,0 +1 @@ +1358b1d641a5c8170d7545bae7121259 \ No newline at end of file diff --git a/docs/inherit_graph_6.png b/docs/inherit_graph_6.png new file mode 100644 index 00000000..b87f783a Binary files /dev/null and b/docs/inherit_graph_6.png differ diff --git a/docs/inherit_graph_7.map b/docs/inherit_graph_7.map new file mode 100644 index 00000000..b86f2b7d --- /dev/null +++ b/docs/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_7.md5 b/docs/inherit_graph_7.md5 new file mode 100644 index 00000000..c75fbf12 --- /dev/null +++ b/docs/inherit_graph_7.md5 @@ -0,0 +1 @@ +761c04f03d229880fbef1b5ee832a05e \ No newline at end of file diff --git a/docs/inherit_graph_7.png b/docs/inherit_graph_7.png new file mode 100644 index 00000000..14140e9a Binary files /dev/null and b/docs/inherit_graph_7.png differ diff --git a/docs/inherit_graph_8.map b/docs/inherit_graph_8.map new file mode 100644 index 00000000..284cd613 --- /dev/null +++ b/docs/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/inherit_graph_8.md5 b/docs/inherit_graph_8.md5 new file mode 100644 index 00000000..e26fc7cb --- /dev/null +++ b/docs/inherit_graph_8.md5 @@ -0,0 +1 @@ +a5966155c5497a4a12c41a69a9305e08 \ No newline at end of file diff --git a/docs/inherit_graph_8.png b/docs/inherit_graph_8.png new file mode 100644 index 00000000..8d48b294 Binary files /dev/null and b/docs/inherit_graph_8.png differ diff --git a/docs/inherit_graph_9.map b/docs/inherit_graph_9.map new file mode 100644 index 00000000..1f420e09 --- /dev/null +++ b/docs/inherit_graph_9.map @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/inherit_graph_9.md5 b/docs/inherit_graph_9.md5 new file mode 100644 index 00000000..1052bdad --- /dev/null +++ b/docs/inherit_graph_9.md5 @@ -0,0 +1 @@ +f5eb8575981964175aab2291c951abc5 \ No newline at end of file diff --git a/docs/inherit_graph_9.png b/docs/inherit_graph_9.png new file mode 100644 index 00000000..971cd1fe Binary files /dev/null and b/docs/inherit_graph_9.png differ diff --git a/docs/inherits.html b/docs/inherits.html new file mode 100644 index 00000000..d1a8ffb1 --- /dev/null +++ b/docs/inherits.html @@ -0,0 +1,372 @@ + + + + + + + + +asio-grpc: Class Hierarchy + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
+
+ + + + diff --git a/docs/jquery.js b/docs/jquery.js new file mode 100644 index 00000000..875ada73 --- /dev/null +++ b/docs/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/docs/md_doc_2client__rpc__cheat__sheet.html b/docs/md_doc_2client__rpc__cheat__sheet.html new file mode 100644 index 00000000..0836b274 --- /dev/null +++ b/docs/md_doc_2client__rpc__cheat__sheet.html @@ -0,0 +1,280 @@ + + + + + + + + +asio-grpc: Client rpc cheat sheet + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Client rpc cheat sheet
+
+
+

Table of Contents

+ +
+

+

The code below is based on example.proto.

+

A single-threaded gRPC client:

+
agrpc::GrpcContext grpc_context;
+
example::v1::Example::Stub stub(grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials()));
+
asio::co_spawn(
+
grpc_context,
+
[&]() -> asio::awaitable<void>
+
{
+
// ...
+
co_return;
+
},
+
asio::detached);
+
grpc_context.run();
+

+Unary rpc

+
asio::awaitable<void> client_rpc_unary(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
RPC::Request request;
+
RPC::Response response;
+
const grpc::Status status =
+
co_await RPC::request(grpc_context, stub, client_context, request, response);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
std::cout << "Response: " << response.integer();
+
}
+

+Client-streaming rpc

+
asio::awaitable<void> client_rpc_client_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Response response;
+
if (!co_await rpc.start(stub, response))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Request request;
+
request.set_integer(1);
+
while (co_await rpc.write(request) && request.integer() < 42)
+
{
+
request.set_integer(request.integer() + 1);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
std::cout << "Response: " << response.integer();
+
}
+

+Server-streaming rpc

+
asio::awaitable<void> client_rpc_server_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Request request;
+
request.set_integer(42);
+
if (!co_await rpc.start(stub, request))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Response response;
+
while (co_await rpc.read(response))
+
{
+
std::cout << "Response: " << response.integer() << '\n';
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+

+Bidirectional-streaming rpc

+
asio::awaitable<void> client_rpc_bidirectional_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<agrpc::ClientRPC<
+
&example::v1::Example::Stub::PrepareAsyncBidirectionalStreaming>>;
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
if (!co_await rpc.start(stub))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Request request;
+
request.set_integer(42);
+
+
bool write_ok{true};
+
RPC::Response response;
+
while (co_await rpc.read(response) && write_ok)
+
{
+
request.set_integer(response.integer() + 1);
+
write_ok = co_await rpc.write(request);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+
+
+
+ + + + diff --git a/docs/md_doc_2cmake__protobuf__generate.html b/docs/md_doc_2cmake__protobuf__generate.html new file mode 100644 index 00000000..b4fbd273 --- /dev/null +++ b/docs/md_doc_2cmake__protobuf__generate.html @@ -0,0 +1,172 @@ + + + + + + + + +asio-grpc: CMake protobuf generate + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CMake protobuf generate
+
+
+

+

In the same directory that called find_package(asio-grpc) the following CMake function will be made available. It can be used to generate Protobuf/gRPC source files from .proto schemas.
+

+

If you are using cmake-format then you can copy the asio_grpc_protobuf_generate section from cmake-format.yaml to get proper formatting.

+
asio_grpc_protobuf_generate(PROTOS <proto_file1> [<proto_file2>...]
+
[OUT_DIR <output_directory>]
+
[OUT_VAR <output_variable>]
+
[TARGET <target>]
+
[USAGE_REQUIREMENT PRIVATE|PUBLIC|INTERFACE]
+
[IMPORT_DIRS <directories>...]
+
[EXTRA_ARGS <arguments>...]
+
[GENERATE_GRPC]
+
[GENERATE_DESCRIPTORS]
+
[GENERATE_MOCK_CODE])
+

PROTOS: Input .proto schema files.
+
+ OUT_DIR: Generated files output directory. Default: CMAKE_CURRENT_BINARY_DIR.
+
+ OUT_VAR: Variable to define with generated source files.
+
+ TARGET: Add generated source files to target.
+
+ USAGE_REQUIREMENT: How to add sources to <target>: PRIVATE, PUBLIC, INTERFACE. Default: PRIVATE.
+
+ IMPORT_DIRS: Import directories to be added to the protoc command line. If unspecified then the directory of each .proto file will be used.
+
+ EXTRA_ARGS: Additional protoc command line arguments.
+
+ GENERATE_GRPC: Generate gRPC files (.grpc.pb.h and .grpc.pb.cc).
+
+ GENERATE_DESCRIPTORS: Generate descriptor files named <proto_file_base_name>.desc.
+
+ GENERATE_MOCK_CODE: Generate gRPC client stub mock files named _mock.grpc.pb.h.

+

+Example

+

Given a CMake target called target-option:

+
asio_grpc_protobuf_generate(
+
GENERATE_GRPC GENERATE_MOCK_CODE
+
TARGET target-option
+
OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/target"
+
PROTOS "${CMAKE_CURRENT_SOURCE_DIR}/proto/target.proto")
+

Compiling target-option will cause the generation and compilation of:

+
    +
  • ${CMAKE_CURRENT_BINARY_DIR}/target/target.pb.h
  • +
  • ${CMAKE_CURRENT_BINARY_DIR}/target/target.pb.cc
  • +
  • ${CMAKE_CURRENT_BINARY_DIR}/target/target.grpc.pb.h
  • +
  • ${CMAKE_CURRENT_BINARY_DIR}/target/target.grpc.pb.cc
  • +
  • ${CMAKE_CURRENT_BINARY_DIR}/target/target_mock.grpc.pb.h
  • +
+

whenever ${CMAKE_CURRENT_SOURCE_DIR}/proto/target.proto has been modified.

+
+
+
+ + + + diff --git a/docs/md_doc_2completion__token.html b/docs/md_doc_2completion__token.html new file mode 100644 index 00000000..d8f8c0d3 --- /dev/null +++ b/docs/md_doc_2completion__token.html @@ -0,0 +1,156 @@ + + + + + + + + +asio-grpc: Completion token + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Completion token
+
+
+

+

The last argument to all async functions in this library is a CompletionToken. It can be used to customize how to receive notification of the completion of the asynchronous operation. Some examples:

+

+Callback

+
alarm.wait(deadline, [&](bool /*wait_ok*/) {});
+

+Boost.Coroutine

+
asio::spawn(
+
io_context,
+
[&](const asio::yield_context& yield)
+
{
+
agrpc::Alarm alarm{grpc_context};
+
alarm.wait(deadline, yield); // suspend coroutine until alarm goes off
+
},
+
asio::detached);
+

+use_sender

+

agrpc::use_sender causes functions in this library to return a Sender. They can for example be combined with unifex::task to asynchronously process RPCs using co_await. Note when using libunifex or stdexec exclusively then agrpc::use_sender is already the default completion token:

+
unifex::task<void> server_streaming_example(agrpc::GrpcContext& grpc_context, example::v1::Example::Stub& stub)
+
{
+ +
grpc::ClientContext client_context;
+
RPC::Request request;
+
RPC rpc{grpc_context};
+
co_await rpc.start(stub, request, agrpc::use_sender);
+
RPC::Response response;
+
co_await rpc.read(response, agrpc::use_sender);
+
co_await rpc.finish(agrpc::use_sender);
+
}
+

+Custom allocator

+

Asio-grpc attempts to get the completion handler's associated allocator by calling asio::get_associated_allocator and uses to allocate intermediate storage, typically for the completion handler itself. Prior to invocation of the completion handler all storage is deallocated.

+

The associated allocator can be customized using asio::bind_allocator (since Boost.Asio 1.79):

+
co_await alarm.wait(deadline, asio::bind_allocator(my_allocator, asio::use_awaitable));
+
+
+
+ + + + diff --git a/docs/md_doc_2server__rpc__cheat__sheet.html b/docs/md_doc_2server__rpc__cheat__sheet.html new file mode 100644 index 00000000..75f6ecc0 --- /dev/null +++ b/docs/md_doc_2server__rpc__cheat__sheet.html @@ -0,0 +1,247 @@ + + + + + + + + +asio-grpc: Server rpc cheat sheet + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Server rpc cheat sheet
+
+
+

Table of Contents

+ +
+

+

The code below is based on example.proto.

+

A single-threaded gRPC server:

+
example::v1::Example::AsyncService service;
+
std::unique_ptr<grpc::Server> server;
+
grpc::ServerBuilder builder;
+
agrpc::GrpcContext grpc_context{builder.AddCompletionQueue()};
+
builder.AddListeningPort("0.0.0.0:50051", grpc::InsecureServerCredentials());
+
builder.RegisterService(&service);
+
server = builder.BuildAndStart();
+
example::ServerShutdown shutdown{*server, grpc_context};
+
register_handlers(grpc_context, service);
+
grpc_context.run();
+

+Unary rpc

+
void server_rpc_unary(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
response.set_integer(request.integer());
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
// Alternatively finish with an error:
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+

+Client-streaming rpc

+
void server_rpc_client_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
while (co_await rpc.read(request))
+
{
+
std::cout << "Request: " << request.integer() << std::endl;
+
}
+
RPC::Response response;
+
response.set_integer(42);
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
// Alternatively finish with an error:
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+

+Server-streaming rpc

+
void server_rpc_server_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
for (int i{}; i != request.integer(); ++i)
+
{
+
response.set_integer(i);
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+

+Bidirectional-streaming rpc

+
void server_rpc_bidirectional_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<agrpc::ServerRPC<
+
&example::v1::Example::AsyncService::RequestBidirectionalStreaming>>;
+ +
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
RPC::Response response;
+
while (co_await rpc.read(request))
+
{
+
response.set_integer(request.integer());
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
response.set_integer(42);
+
co_await rpc.write(response, grpc::WriteOptions{}.set_last_message());
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+
+
+
+ + + + diff --git a/docs/md_doc_2using__asio__io__context.html b/docs/md_doc_2using__asio__io__context.html new file mode 100644 index 00000000..0a735d94 --- /dev/null +++ b/docs/md_doc_2using__asio__io__context.html @@ -0,0 +1,211 @@ + + + + + + + + +asio-grpc: Using Asio io_context + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Using Asio io_context
+
+
+

+
Note
Due to limitations of the gRPC CompletionQueue and Callback API an asio::io_context cannot be used to handle RPCs directly. See the end of this document for a detailed explanation.
+

This article describes how to interoperate between a GrpcContext and an asio::io_context.

+

+Implicitly constructed io_context

+

Since a GrpcContext is also an asio::execution_context it supports Asio's Service mechanism. The following code will therefore implicitly create an io_context, a background thread, run the io_context on that thread and post the completion of async_wait onto the GrpcContext where the lambda is being invoked.

+
agrpc::GrpcContext grpc_context;
+
asio::signal_set signals{grpc_context, SIGINT, SIGTERM};
+
signals.async_wait(
+
[](const std::error_code&, int)
+
{
+
// executed in the thread that called grpc_context.run().
+
});
+
grpc_context.run();
+

Signal_set is just used as an example, it could be any Asio I/O object like ip::tcp::socket.

+

While this is the most convenient approach is also has some downsides:

+
    +
  • The io_context cannot be run on more than one thread.
  • +
  • There is runtime overhead due to non-customizable thread switching.
  • +
+

+Explicitly constructed io_context

+

GrpcContext and io_context can also be created directly and used as usual: submit work and run. It is often convenient to utilize one of them as the "main" context. For an example, a gRPC server might use the io_context only for HTTP client operations and the GrpcContext for everything else.

+

In the following example the io_context is used as the "main" context. When its main coroutine runs to completion, it will signal the GrpcContext to stop (by releasing the work guard):

+
asio::io_context io_context{1};
+
+ +
grpc_context; // for gRPC servers this would be constructed using `grpc::ServerBuilder::AddCompletionQueue`
+
+
asio::co_spawn(
+
io_context, // Spawning onto the io_context means that completed operations will switch back to the it before
+
// resuming the coroutine. This can be customized on a per-operation basis using
+
// `asio::bind_executor`.
+
[&, grpc_context_work_guard = asio::make_work_guard(grpc_context)]() mutable -> asio::awaitable<void>
+
{
+
using namespace asio::experimental::awaitable_operators;
+
co_await (make_grpc_request(grpc_context, stub) && make_tcp_request(tcp_port));
+
grpc_context_work_guard.reset();
+
},
+
example::RethrowFirstArg{});
+

For running the contexts there are two choices:

+

Run on separate threads

+
std::thread grpc_context_thread{[&]
+
{
+
grpc_context.run();
+
}};
+
io_context.run();
+
grpc_context_thread.join();
+

Run on same thread

+

Until the GrpcContext stops:

+
// First, initiate the io_context's thread_local variables by posting on it. The io_context uses them to optimize
+
// dynamic memory allocations. This is an optional step but it can improve performance.
+
asio::post(io_context,
+
[&]
+
{
+
agrpc::run(grpc_context, io_context,
+
[&]
+
{
+
return grpc_context.is_stopped();
+
});
+
});
+
io_context.run();
+

Or until both contexts stop:

+
// First, initiate the io_context's thread_local variables by posting on it. The io_context uses them to optimize
+
// dynamic memory allocations. This is an optional step but it can improve performance.
+
// Then undo the work counting of asio::post.
+
// Run GrpcContext and io_context until both stop.
+
// Finally, redo the work counting.
+
asio::post(io_context,
+
[&]
+
{
+
io_context.get_executor().on_work_finished();
+
agrpc::run(grpc_context, io_context);
+
io_context.get_executor().on_work_started();
+
});
+
io_context.run();
+

+Conclusion

+

Both approaches come with their own different kind of overheads. Running on two threads might require additional synchronization in the user code while running on the same thread reduces peak performance. In the Performance section of the README you can find results for using an idle io_context with a busy GrpcContext running on the same thread (look for cpp_asio_grpc_io_context_coro).

+

+Why not use io_context for gRPC directly?

+

Event loops like the ones used in Asio and gRPC typically utilize system APIs (epoll, IOCompletionPorts, kqueue, ...) in the following order:

+
    +
  1. Create file descriptors for network operations (e.g. sockets and pipes).
  2. +
  3. Initiate some operations on those descriptors (e.g. read and write).
  4. +
  5. Perform a system call (e.g. poll) to sleep on ALL descriptors until one or more are ready (e.g. received data).
  6. +
  7. Notify some part of the application, typically by invoking a function pointer.
  8. +
+

The important part is to wait on ALL descriptors at once. Which means, for Asio and gRPC to interoperate nicely we would need to collect the descriptors first and then perform the system call to wait. However, file descriptors are created deep in the implementation details of those libraries and the sleep is performed even deeper. GRPC is working on an EventEngine which should make it possible to use Asio sockets for gRPC. Whether it will be enough to fully use Asio for all gRPC network operations remains to be seen.

+
+
+
+ + + + diff --git a/docs/md_doc_2v3__migration.html b/docs/md_doc_2v3__migration.html new file mode 100644 index 00000000..ef6da4ee --- /dev/null +++ b/docs/md_doc_2v3__migration.html @@ -0,0 +1,663 @@ + + + + + + + + +asio-grpc: V3 migration guide + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
asio-grpc v3.2.1 +
+
Asynchronous gRPC with Asio/unified executors
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
V3 migration guide
+
+
+

+

The following headers have been removed:

+

bind_allocator.hpp, cancel_safe.hpp, default_completion_token.hpp, get_completion_queue.hpp, grpc_initiate.hpp, grpc_stream.hpp, notify_when_done.hpp, repeatedly_request_context.hpp, repeatedly_request.hpp, rpc.hpp, use_awaitable.hpp, wait.hpp

+

+CMake

+

asio-grpc targets now link with gRPC::grpc++ instead of gRPC::grpc++_unsecure. To restore the old behavior use:

+
set(ASIO_GRPC_DISABLE_AUTOLINK on)
+
find_package(asio-grpc)
+
find_package(gRPC)
+
+
target_link_libraries(your_app PUBLIC asio-grpc::asio-grpc gRPC::grpc++_unsecure)
+

asio-grpcConfig.cmake no longer finds and links backend libraries (like Boost.Asio and unifex) to their respective asio-grpc::asio-grpc targets. Example on how to restore the old behavior for the Boost.Asio backend:

+
find_package(asio-grpc)
+
# New in v3:
+
find_package(Boost)
+
+
target_link_libraries(your_app PUBLIC
+
asio-grpc::asio-grpc
+
# New in v3:
+
Boost::headers
+
)
+

+Alarms

+

The free function agrpc::wait has been replaced with a new I/O-object like class called agrpc::Alarm:

+ + + + + +
V2 V3
asio::awaitable<void> agrpc_wait()
+
{
+
grpc::Alarm alarm;
+
// implicitly uses GrpcContext stored in asio::awaitable:
+
bool wait_ok = co_await agrpc::wait(
+
alarm, std::chrono::system_clock::now() + std::chrono::seconds(1));
+
(void)wait_ok;
+
}
+
asio::awaitable<void> agrpc_alarm(agrpc::GrpcContext& grpc_context)
+
{
+
// used GrpcContext is explicit:
+
agrpc::Alarm alarm{grpc_context};
+
bool wait_ok = co_await alarm.wait(
+
std::chrono::system_clock::now() + std::chrono::seconds(1), asio::use_awaitable);
+
(void)wait_ok;
+
}
+
+

+Client RPCs

+

Migration of client rpc types based on example.proto:

+

+Unary

+ + + + + +
V2 V3
asio::awaitable<void> unary_rpc(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
example::v1::Request request;
+
std::unique_ptr<grpc::ClientAsyncResponseReader<example::v1::Response>> reader =
+
agrpc::request(&example::v1::Example::Stub::AsyncUnary, stub, client_context,
+
request, grpc_context);
+
example::v1::Response response;
+
grpc::Status status;
+
co_await agrpc::finish(reader, response, status);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
std::cout << "Response: " << response.integer();
+
}
+
asio::awaitable<void> client_rpc_unary(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
RPC::Request request;
+
RPC::Response response;
+
const grpc::Status status =
+
co_await RPC::request(grpc_context, stub, client_context, request, response);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
std::cout << "Response: " << response.integer();
+
}
+
+

+Client-streaming

+ + + + + +
V2 V3
asio::awaitable<void> client_streaming_rpc(example::v1::Example::Stub& stub)
+
{
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
example::v1::Response response;
+
+
std::unique_ptr<grpc::ClientAsyncWriter<example::v1::Request>> writer;
+
if (!co_await agrpc::request(&example::v1::Example::Stub::PrepareAsyncClientStreaming,
+
stub, client_context, writer, response))
+
{
+
grpc::Status status;
+
co_await agrpc::finish(writer, status);
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
example::v1::Request request;
+
request.set_integer(1);
+
while (co_await agrpc::write(writer, request) && request.integer() < 42)
+
{
+
request.set_integer(request.integer() + 1);
+
}
+
co_await agrpc::writes_done(writer);
+
+
grpc::Status status;
+
co_await agrpc::finish(writer, status);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
std::cout << "Response: " << response.integer();
+
}
+
asio::awaitable<void> client_rpc_client_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Response response;
+
if (!co_await rpc.start(stub, response))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Request request;
+
request.set_integer(1);
+
while (co_await rpc.write(request) && request.integer() < 42)
+
{
+
request.set_integer(request.integer() + 1);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
std::cout << "Response: " << response.integer();
+
}
+
+

+Server-streaming

+ + + + + +
V2 V3
asio::awaitable<void> server_streaming_rpc(example::v1::Example::Stub& stub)
+
{
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
example::v1::Request request;
+
request.set_integer(42);
+
std::unique_ptr<grpc::ClientAsyncReader<example::v1::Response>> reader;
+
if (!co_await agrpc::request(&example::v1::Example::Stub::PrepareAsyncServerStreaming,
+
stub, client_context, request, reader))
+
{
+
grpc::Status status;
+
co_await agrpc::finish(reader, status);
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
example::v1::Response response;
+
while (co_await agrpc::read(reader, response))
+
{
+
std::cout << "Response: " << response.integer() << '\n';
+
}
+
+
grpc::Status status;
+
co_await agrpc::finish(reader, status);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+
asio::awaitable<void> client_rpc_server_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ +
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Request request;
+
request.set_integer(42);
+
if (!co_await rpc.start(stub, request))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Response response;
+
while (co_await rpc.read(response))
+
{
+
std::cout << "Response: " << response.integer() << '\n';
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+
+

+Bidirectional-streaming

+ + + + + +
V2 V3
asio::awaitable<void> bidirectional_streaming_rpc(example::v1::Example::Stub& stub)
+
{
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
std::unique_ptr<
+
grpc::ClientAsyncReaderWriter<example::v1::Request, example::v1::Response>>
+
reader_writer;
+
if (!co_await agrpc::request(
+
&example::v1::Example::Stub::PrepareAsyncBidirectionalStreaming, stub,
+
client_context, reader_writer))
+
{
+
grpc::Status status;
+
co_await agrpc::finish(reader_writer, status);
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
example::v1::Request request;
+
+
bool write_ok{true};
+
example::v1::Response response;
+
while (co_await agrpc::read(reader_writer, response) && write_ok)
+
{
+
request.set_integer(response.integer() + 1);
+
write_ok = co_await agrpc::write(reader_writer, request);
+
}
+
co_await agrpc::writes_done(reader_writer);
+
+
grpc::Status status;
+
co_await agrpc::finish(reader_writer, status);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+
asio::awaitable<void> client_rpc_bidirectional_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<agrpc::ClientRPC<
+
&example::v1::Example::Stub::PrepareAsyncBidirectionalStreaming>>;
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
if (!co_await rpc.start(stub))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
+
RPC::Request request;
+
request.set_integer(42);
+
+
bool write_ok{true};
+
RPC::Response response;
+
while (co_await rpc.read(response) && write_ok)
+
{
+
request.set_integer(response.integer() + 1);
+
write_ok = co_await rpc.write(request);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return;
+
}
+
}
+
+

+Server RPCs

+

Migration of server rpc types based on example.proto:

+

+Unary

+ + + + + +
V2 V3
void unary_rpc(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
agrpc::repeatedly_request(
+
&example::v1::Example::AsyncService::RequestUnary, service,
+
asio::bind_executor(
+
grpc_context,
+
[](grpc::ServerContext& /*server_context*/, example::v1::Request& /*request*/,
+
grpc::ServerAsyncResponseWriter<example::v1::Response>& writer)
+
-> asio::awaitable<void>
+
{
+
example::v1::Response response;
+
co_await agrpc::finish(writer, response, grpc::Status::OK);
+
+
// Alternatively finish with an error.
+
co_await agrpc::finish_with_error(writer, grpc::Status::CANCELLED);
+
}));
+
}
+
void server_rpc_unary(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
response.set_integer(request.integer());
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
// Alternatively finish with an error:
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+
+

+Client-streaming

+ + + + + +
V2 V3
void client_streaming_rpc(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
agrpc::repeatedly_request(
+
&example::v1::Example::AsyncService::RequestClientStreaming, service,
+
asio::bind_executor(
+
grpc_context,
+
[](grpc::ServerContext& /*server_context*/,
+
grpc::ServerAsyncReader<example::v1::Response, example::v1::Request>&
+
reader) -> asio::awaitable<void>
+
{
+
example::v1::Request request;
+
while (co_await agrpc::read(reader, request))
+
{
+
std::cout << "Request: " << request.integer() << std::endl;
+
}
+
example::v1::Response response;
+
response.set_integer(42);
+
co_await agrpc::finish(reader, response, grpc::Status::OK);
+
+
// Alternatively finish with an error.
+
co_await agrpc::finish_with_error(reader, grpc::Status::CANCELLED);
+
}));
+
}
+
void server_rpc_client_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
while (co_await rpc.read(request))
+
{
+
std::cout << "Request: " << request.integer() << std::endl;
+
}
+
RPC::Response response;
+
response.set_integer(42);
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
// Alternatively finish with an error:
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+
+

+Server-streaming

+ + + + + +
V2 V3
void server_streaming_rpc(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
agrpc::repeatedly_request(
+
&example::v1::Example::AsyncService::RequestServerStreaming, service,
+
asio::bind_executor(
+
grpc_context,
+
[](grpc::ServerContext& /*server_context*/, example::v1::Request& request,
+
grpc::ServerAsyncWriter<example::v1::Response>& writer)
+
-> asio::awaitable<void>
+
{
+
example::v1::Response response;
+
for (int i{}; i != request.integer(); ++i)
+
{
+
response.set_integer(i);
+
if (!co_await agrpc::write(writer, response))
+
{
+
co_return;
+
}
+
}
+
co_await agrpc::finish(writer, grpc::Status::OK);
+
}));
+
}
+
void server_rpc_server_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+ + +
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
for (int i{}; i != request.integer(); ++i)
+
{
+
response.set_integer(i);
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+
+

+Bidirectional-streaming

+ + + + + +
V2 V3
void bidirectional_streaming_rpc(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
agrpc::repeatedly_request(
+
&example::v1::Example::AsyncService::RequestBidirectionalStreaming, service,
+
asio::bind_executor(
+
grpc_context,
+
[](grpc::ServerContext& /*server_context*/,
+
grpc::ServerAsyncReaderWriter<example::v1::Response, example::v1::Request>&
+
reader_writer) -> asio::awaitable<void>
+
{
+
example::v1::Request request;
+
example::v1::Response response;
+
while (co_await agrpc::read(reader_writer, request))
+
{
+
response.set_integer(request.integer());
+
if (!co_await agrpc::write(reader_writer, response))
+
{
+
co_return;
+
}
+
}
+
response.set_integer(42);
+
co_await agrpc::write_last(reader_writer, response, grpc::WriteOptions{});
+
co_await agrpc::finish(reader_writer, grpc::Status::OK);
+
}));
+
}
+
void server_rpc_bidirectional_streaming(agrpc::GrpcContext& grpc_context,
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<agrpc::ServerRPC<
+
&example::v1::Example::AsyncService::RequestBidirectionalStreaming>>;
+ +
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
RPC::Response response;
+
while (co_await rpc.read(request))
+
{
+
response.set_integer(request.integer());
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
response.set_integer(42);
+
co_await rpc.write(response, grpc::WriteOptions{}.set_last_message());
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+
+
+
+
+ + + + diff --git a/docs/menu.js b/docs/menu.js new file mode 100644 index 00000000..0fd1e990 --- /dev/null +++ b/docs/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/menudata.js b/docs/menudata.js new file mode 100644 index 00000000..fa0d06e0 --- /dev/null +++ b/docs/menudata.js @@ -0,0 +1,86 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}, +{text:"Variables",url:"namespacemembers_vars.html"}, +{text:"Typedefs",url:"namespacemembers_type.html"}, +{text:"Enumerations",url:"namespacemembers_enum.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"q",url:"functions_q.html#index_q"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func.html#index_b"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"q",url:"functions_func.html#index_q"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"w",url:"functions_func.html#index_w"}, +{text:"~",url:"functions_func.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html"}, +{text:"Typedefs",url:"functions_type.html",children:[ +{text:"a",url:"functions_type.html#index_a"}, +{text:"e",url:"functions_type.html#index_e"}, +{text:"o",url:"functions_type.html#index_o"}, +{text:"p",url:"functions_type.html#index_p"}, +{text:"r",url:"functions_type.html#index_r"}, +{text:"s",url:"functions_type.html#index_s"}, +{text:"t",url:"functions_type.html#index_t"}]}, +{text:"Related Symbols",url:"functions_rela.html"}]}]}]} diff --git a/docs/minus.svg b/docs/minus.svg new file mode 100644 index 00000000..f70d0c1a --- /dev/null +++ b/docs/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/minusd.svg b/docs/minusd.svg new file mode 100644 index 00000000..5f8e8796 --- /dev/null +++ b/docs/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/namespaceagrpc.html b/docs/namespaceagrpc.html new file mode 100644 index 00000000..eff2a7f2 --- /dev/null +++ b/docs/namespaceagrpc.html @@ -0,0 +1,1258 @@ + + + + + + + + +asio-grpc: agrpc Namespace Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc Namespace Reference
    +
    +
    + +

    Public namespace. +More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  BasicAlarm
     I/O object for grpc::Alarm More...
     
    class  BasicGrpcExecutor
     GrpcContext's executor. More...
     
    class  ClientRPC
     Primary ClientRPC template. More...
     
    class  ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >
     I/O object for client-side, generic, streaming rpcs. More...
     
    class  ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >
     I/O object for client-side, generic, unary rpcs. More...
     
    class  ClientRPC< PrepareAsyncBidiStreaming, Executor >
     I/O object for client-side, bidirectional-streaming rpcs. More...
     
    class  ClientRPC< PrepareAsyncClientStreaming, Executor >
     I/O object for client-side, client-streaming rpcs. More...
     
    class  ClientRPC< PrepareAsyncServerStreaming, Executor >
     I/O object for client-side, server-streaming rpcs. More...
     
    class  ClientRPC< PrepareAsyncUnary, Executor >
     I/O object for client-side, unary rpcs. More...
     
    struct  DefaultRunTraits
     (experimental) Default run traits More...
     
    struct  DefaultServerRPCTraits
     Default ServerRPC traits. More...
     
    class  GrpcContext
     Execution context based on grpc::CompletionQueue More...
     
    class  HealthCheckService
     CompletionQueue-based implementation of grpc::HealthCheckServiceInterface. More...
     
    class  ServerRPC
     Primary ServerRPC template. More...
     
    class  ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >
     I/O object for server-side, generic rpcs. More...
     
    class  ServerRPC< RequestBidiStreaming, TraitsT, Executor >
     I/O object for server-side, bidirectional-streaming rpcs. More...
     
    class  ServerRPC< RequestClientStreaming, TraitsT, Executor >
     I/O object for server-side, client-streaming rpcs. More...
     
    class  ServerRPC< RequestServerStreaming, TraitsT, Executor >
     I/O object for server-side, server-streaming rpcs. More...
     
    class  ServerRPC< RequestUnary, TraitsT, Executor >
     I/O object for server-side, unary rpcs. More...
     
    class  ServerRPCPtr
     Allocated ServerRPC created by register_callback_rpc_handler. More...
     
    struct  UseSender
     Sender completion token. More...
     
    class  Waiter
     (experimental) Utility class for uncancelable operations More...
     
    + + + + + + + + + + + + + + + + +

    +Typedefs

    using Alarm = agrpc::BasicAlarm<agrpc::GrpcExecutor>
     A BasicAlarm that uses agrpc::GrpcExecutor
     
    using GenericUnaryClientRPC = agrpc::ClientRPC<agrpc::ClientRPCType::GENERIC_UNARY>
     I/O object for client-side, generic, unary rpcs (type alias)
     
    using GenericStreamingClientRPC = agrpc::ClientRPC<agrpc::ClientRPCType::GENERIC_STREAMING>
     I/O object for client-side, generic, streaming rpcs (type alias)
     
    using GrpcExecutor = agrpc::BasicGrpcExecutor<>
     Default GrpcExecutor.
     
    using GenericServerRPC = agrpc::ServerRPC<agrpc::ServerRPCType::GENERIC>
     I/O object for server-side, generic rpcs (type alias)
     
    + + + + + + + +

    +Enumerations

    enum class  ClientRPCType {
    +  UNARY +, GENERIC_UNARY +, SERVER_STREAMING +, CLIENT_STREAMING +,
    +  BIDIRECTIONAL_STREAMING +, GENERIC_STREAMING +
    + }
     The type of a ClientRPC. More...
     
    enum class  ServerRPCType {
    +  UNARY +, SERVER_STREAMING +, CLIENT_STREAMING +, BIDIRECTIONAL_STREAMING +,
    +  GENERIC +
    + }
     The type of a ServerRPC. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<class ServerRPC , class RPCHandler , class CompletionToken = detail::DefaultCompletionTokenT<typename ServerRPC::executor_type>>
    auto register_awaitable_rpc_handler (const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})
     Register an awaitable rpc handler for the given method.
     
    template<class ServerRPC , class RPCHandler , class CompletionToken >
    auto register_awaitable_rpc_handler (agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)
     Register an awaitable rpc handler for the given method (GrpcContext overload)
     
    template<class ServerRPC , class RPCHandler , class CompletionToken = detail::DefaultCompletionTokenT<typename ServerRPC::executor_type>>
    auto register_callback_rpc_handler (const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})
     Register a callback rpc handler for the given method.
     
    template<class ServerRPC , class RPCHandler , class CompletionToken >
    auto register_callback_rpc_handler (agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)
     Register a callback rpc handler for the given method (GrpcContext overload)
     
    template<class ServerRPC , class CoroutineTraits , class RPCHandler , class CompletionToken = detail::DefaultCompletionTokenT<typename ServerRPC::executor_type>>
    auto register_coroutine_rpc_handler (const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})
     (experimental) Register a coroutine rpc handler for the given method
     
    template<class ServerRPC , class CoroutineTraits , class RPCHandler , class CompletionToken >
    auto register_coroutine_rpc_handler (agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)
     (experimental) Register an coroutine rpc handler for the given method (GrpcContext overload)
     
    template<class ServerRPC , class RPCHandler >
    detail::RPCHandlerSender< ServerRPC, RPCHandler > register_sender_rpc_handler (agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler)
     Register a sender rpc handler for the given method.
     
    template<class ServerRPC , class RPCHandler , class CompletionToken = detail::DefaultCompletionTokenT<typename ServerRPC::executor_type>>
    auto register_yield_rpc_handler (const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})
     Register a Boost.Coroutine rpc handler for the given method.
     
    template<class ServerRPC , class RPCHandler , class CompletionToken >
    auto register_yield_rpc_handler (agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)
     Register a rpc handler for the given method (GrpcContext overload)
     
    template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void>
    void run (agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)
     (experimental) Run an execution context in the same thread as a GrpcContext
     
    template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void, class StopCondition = void>
    void run (agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)
     (experimental) Run an execution context in the same thread as a GrpcContext
     
    template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void>
    void run_completion_queue (agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)
     (experimental) Run an execution context in the same thread as a GrpcContext's completion queue
     
    template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void, class StopCondition = void>
    void run_completion_queue (agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)
     (experimental) Run an execution context in the same thread as a GrpcContext's completion queue
     
    void process_grpc_tag (agrpc::GrpcContext &grpc_context, void *tag, bool ok)
     Test utility to manually process gRPC tags.
     
    grpc::ServerBuilder & add_health_check_service (grpc::ServerBuilder &builder)
     Add a HealthCheckService to a grpc::Server
     
    void start_health_check_service (agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)
     Start a previously added HealthCheckService.
     
    void start_health_check_service (grpc::Server &server, agrpc::GrpcContext &grpc_context)
     Start a previously added HealthCheckService (grpc::Server overload)
     
    + + + + + + + + + + +

    +Variables

    constexpr detail::NotifyOnStateChangeFn notify_on_state_change {}
     Set notification for a grpc::Channel state change.
     
    constexpr detail::ReadFn read {}
     Read from a streaming RPC.
     
    constexpr agrpc::UseSender use_sender {}
     Instance and factory for sender completion tokens.
     
    +

    Detailed Description

    +

    Public namespace.

    +

    Typedef Documentation

    + +

    ◆ Alarm

    + +
    +
    + +

    A BasicAlarm that uses agrpc::GrpcExecutor

    +
    Since
    2.2.0
    + +
    +
    + +

    ◆ GenericUnaryClientRPC

    + +
    +
    + +

    I/O object for client-side, generic, unary rpcs (type alias)

    +
    See also
    agrpc::ClientRPC<agrpc::ClientRPCType::GENERIC_UNARY,Executor>
    +
    Since
    2.6.0
    + +
    +
    + +

    ◆ GenericStreamingClientRPC

    + +
    +
    + +

    I/O object for client-side, generic, streaming rpcs (type alias)

    +
    See also
    agrpc::ClientRPC<agrpc::ClientRPCType::GENERIC_STREAMING,Executor>
    +
    Since
    2.6.0
    + +
    +
    + +

    ◆ GrpcExecutor

    + +
    +
    + +

    Default GrpcExecutor.

    +

    The default GrpcExecutor does not track outstanding work, has the relationship.fork and blocking.never properties and uses the default allocator (std::allocator<void>).

    + +
    +
    + +

    ◆ GenericServerRPC

    + +
    +
    + +

    I/O object for server-side, generic rpcs (type alias)

    +
    See also
    agrpc::ServerRPC<agrpc::ServerRPCType::GENERIC,TraitsT,Executor>
    +
    Since
    2.7.0
    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ ClientRPCType

    + +
    +
    + + + + + +
    + + + + +
    enum class agrpc::ClientRPCType
    +
    +strong
    +
    + +

    The type of a ClientRPC.

    +
    Since
    2.1.0
    + + + + + + + +
    Enumerator
    UNARY 

    Client-side unary rpc.

    +
    GENERIC_UNARY 

    Client-side generic unary rpc.

    +
    SERVER_STREAMING 

    Client-side server-streaming rpc.

    +
    CLIENT_STREAMING 

    Client-side client-streaming rpc.

    +
    BIDIRECTIONAL_STREAMING 

    Client-side bidirectional-streaming rpc.

    +
    GENERIC_STREAMING 

    Client-side generic streaming rpc.

    +
    + +
    +
    + +

    ◆ ServerRPCType

    + +
    +
    + + + + + +
    + + + + +
    enum class agrpc::ServerRPCType
    +
    +strong
    +
    + +

    The type of a ServerRPC.

    +
    Since
    2.7.0
    + + + + + + +
    Enumerator
    UNARY 

    Server-side unary rpc.

    +
    SERVER_STREAMING 

    Server-side server-streaming rpc.

    +
    CLIENT_STREAMING 

    Server-side client-streaming rpc.

    +
    BIDIRECTIONAL_STREAMING 

    Server-side bidirectional-streaming rpc.

    +
    GENERIC 

    Server-side generic streaming rpc.

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ register_awaitable_rpc_handler() [1/2]

    + +
    +
    +
    +template<class ServerRPC , class RPCHandler , class CompletionToken = detail::DefaultCompletionTokenT<typename ServerRPC::executor_type>>
    + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::register_awaitable_rpc_handler (const typename ServerRPC::executor_type & executor,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler rpc_handler,
    CompletionToken && token = CompletionToken{} )
    +
    + +

    Register an awaitable rpc handler for the given method.

    +

    The rpc handler will be invoked for every incoming request of this gRPC method. It must take ServerRPC& as first argument and ServerRPC::Request& as second argument (only for unary and server-streaming rpcs). The ServerRPC is automatically cancelled at the end of the rpc handler if finish() was not called earlier. The return value of the rpc handler is co_spawned in a manner similar to: asio::co_spawn(asio::get_associated_executor(completion_handler, executor), rpc_handler()), where completion_handler is created from token and executor the first argument passed to this function.

    +

    This asynchronous operation runs forever unless it is cancelled, the rpc handler throws an exception or the server is shutdown (grpc::Server::Shutdown is called). At which point it invokes the completion handler (passing forward the exception thrown by the request handler, if any) after all awaitables produced by invoking the rpc handler complete.

    +

    Example:

    +
    void server_rpc_unary(agrpc::GrpcContext& grpc_context,
    +
    example::v1::Example::AsyncService& service)
    +
    {
    +
    using RPC = asio::use_awaitable_t<>::as_default_on_t<
    + + +
    grpc_context, service,
    +
    [](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
    +
    {
    +
    RPC::Response response;
    +
    response.set_integer(request.integer());
    +
    co_await rpc.finish(response, grpc::Status::OK);
    +
    +
    // Alternatively finish with an error:
    +
    co_await rpc.finish_with_error(grpc::Status::CANCELLED);
    +
    },
    +
    asio::detached);
    +
    }
    +
    Template Parameters
    + + +
    ServerRPCAn instantiation of agrpc::ServerRPC
    +
    +
    +
    Parameters
    + + + + + +
    executorThe executor used to handle each rpc
    serviceThe service associated with the gRPC method of the ServerRPC
    rpc_handlerA callable that produces an asio::awaitable<void, Executor>. The awaitable's return value is ignored. The Executor must be constructible from asio::get_associated_executor(completion_handler, +executor), where completion_handler is obtained from token and executor the first argument passed to this function.
    tokenA completion token for signature void(std::exception_ptr).
    +
    +
    +
    Since
    2.7.0
    + +
    +
    + +

    ◆ register_awaitable_rpc_handler() [2/2]

    + +
    +
    +
    +template<class ServerRPC , class RPCHandler , class CompletionToken >
    + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::register_awaitable_rpc_handler (agrpc::GrpcContext & grpc_context,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler && rpc_handler,
    CompletionToken && token )
    +
    + +

    Register an awaitable rpc handler for the given method (GrpcContext overload)

    +
    Since
    2.7.0
    + +
    +
    + +

    ◆ register_callback_rpc_handler() [1/2]

    + +
    +
    +
    +template<class ServerRPC , class RPCHandler , class CompletionToken = detail::DefaultCompletionTokenT<typename ServerRPC::executor_type>>
    + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::register_callback_rpc_handler (const typename ServerRPC::executor_type & executor,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler rpc_handler,
    CompletionToken && token = CompletionToken{} )
    +
    + +

    Register a callback rpc handler for the given method.

    +

    The rpc handler will be invoked for every incoming request of this gRPC method. It must take ServerRPC::Ptr as first and ServerRPC::Request& as second (only for unary and server-streaming rpcs) argument. The ServerRPC is automatically cancelled during destruction of the ServerRPC::Ptr if finish() was not called earlier.

    +

    This asynchronous operation runs forever unless it is cancelled, the rpc handler throws an exception or the server is shutdown (grpc::Server::Shutdown is called). At which point it invokes the completion handler (passing forward the exception thrown by the request handler, if any) after all ServerRPC::Ptrs have been destructed.

    +

    Example:

    +
    void server_rpc_unary_callback(agrpc::GrpcContext& grpc_context, example::v1::Example::AsyncService& service)
    +
    {
    + + +
    grpc_context, service,
    +
    [](RPC::Ptr ptr, RPC::Request& request)
    +
    {
    +
    RPC::Response response;
    +
    response.set_integer(request.integer());
    +
    auto& rpc = *ptr;
    +
    rpc.finish(response, grpc::Status::OK, [p = std::move(ptr)](bool) {});
    +
    },
    +
    asio::detached);
    +
    }
    +
    Template Parameters
    + + +
    ServerRPCAn instantiation of agrpc::ServerRPC
    +
    +
    +
    Parameters
    + + + + + +
    executorThe executor used to handle each rpc
    serviceThe service associated with the gRPC method of the ServerRPC
    rpc_handlerA callable that handles the client's request
    tokenA completion token for signature void(std::exception_ptr).
    +
    +
    +
    Since
    2.8.0
    + +
    +
    + +

    ◆ register_callback_rpc_handler() [2/2]

    + +
    +
    +
    +template<class ServerRPC , class RPCHandler , class CompletionToken >
    + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::register_callback_rpc_handler (agrpc::GrpcContext & grpc_context,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler && rpc_handler,
    CompletionToken && token )
    +
    + +

    Register a callback rpc handler for the given method (GrpcContext overload)

    +
    Since
    2.8.0
    + +
    +
    + +

    ◆ register_coroutine_rpc_handler() [1/2]

    + +
    +
    +
    +template<class ServerRPC , class CoroutineTraits , class RPCHandler , class CompletionToken = detail::DefaultCompletionTokenT<typename ServerRPC::executor_type>>
    + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::register_coroutine_rpc_handler (const typename ServerRPC::executor_type & executor,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler rpc_handler,
    CompletionToken && token = CompletionToken{} )
    +
    + +

    (experimental) Register a coroutine rpc handler for the given method

    +
    Template Parameters
    + + +
    ServerRPCAn instantiation of agrpc::ServerRPC
    +
    +
    +
    Parameters
    + + + + + +
    executorThe executor used to handle each rpc
    serviceThe service associated with the gRPC method of the ServerRPC
    rpc_handlerA callable that produces a coroutine. The coroutine's return value is ignored.
    tokenA completion token for signature void(std::exception_ptr).
    +
    +
    +
    Since
    3.3.0
    + +
    +
    + +

    ◆ register_coroutine_rpc_handler() [2/2]

    + +
    +
    +
    +template<class ServerRPC , class CoroutineTraits , class RPCHandler , class CompletionToken >
    + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::register_coroutine_rpc_handler (agrpc::GrpcContext & grpc_context,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler && rpc_handler,
    CompletionToken && token )
    +
    + +

    (experimental) Register an coroutine rpc handler for the given method (GrpcContext overload)

    +
    Since
    3.3.0
    + +
    +
    + +

    ◆ register_sender_rpc_handler()

    + +
    +
    +
    +template<class ServerRPC , class RPCHandler >
    + + + + + +
    + + + + + + + + + + + + + + + + +
    detail::RPCHandlerSender< ServerRPC, RPCHandler > agrpc::register_sender_rpc_handler (agrpc::GrpcContext & grpc_context,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler rpc_handler )
    +
    +nodiscard
    +
    + +

    Register a sender rpc handler for the given method.

    +

    The rpc handler will be invoked for every incoming request of this gRPC method. It must take ServerRPC& as first argument and ServerRPC::Request& as second argument (only for unary and server-streaming rpcs). The ServerRPC is automatically cancelled at the end of the rpc handler's sender if finish() was not called earlier.

    +

    This asynchronous operation runs forever unless it is cancelled, the rpc handler throws an exception or the server is shutdown (grpc::Server::Shutdown is called). At which point it invokes the receiver (passing forward the exception thrown by the request handler, if any) after all sender produced by invoking the rpc handler complete.

    +

    Example:

    +
    auto server_rpc_unary_sender(agrpc::GrpcContext& grpc_context, example::v1::Example::AsyncService& service)
    +
    {
    + +
    return agrpc::register_sender_rpc_handler<RPC>(grpc_context, service,
    +
    [](RPC& rpc, RPC::Request& request)
    +
    {
    +
    return unifex::let_value_with(
    +
    []
    +
    {
    +
    return RPC::Response{};
    +
    },
    +
    [&](auto& response)
    +
    {
    +
    response.set_integer(request.integer());
    +
    return rpc.finish(response, grpc::Status::OK);
    +
    });
    +
    });
    +
    }
    +
    Template Parameters
    + + +
    ServerRPCAn instantiation of agrpc::ServerRPC
    +
    +
    +
    Parameters
    + + + + +
    grpc_contextThe GrpcContext used to handle each rpc
    serviceThe service associated with the gRPC method of the ServerRPC
    rpc_handlerA callable that produces a sender
    +
    +
    +
    Since
    2.7.0
    + +
    +
    + +

    ◆ register_yield_rpc_handler() [1/2]

    + +
    +
    +
    +template<class ServerRPC , class RPCHandler , class CompletionToken = detail::DefaultCompletionTokenT<typename ServerRPC::executor_type>>
    + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::register_yield_rpc_handler (const typename ServerRPC::executor_type & executor,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler rpc_handler,
    CompletionToken && token = CompletionToken{} )
    +
    + +

    Register a Boost.Coroutine rpc handler for the given method.

    +

    The rpc handler will be invoked for every incoming request of this gRPC method. It must take ServerRPC& as first, ServerRPC::Request& as second (only for unary and server-streaming rpcs) and asio::basic_yield_context<Executor> as third argument. The Executor is obtained by calling asio::get_associated_executor(completion_handler, executor), where completion_handler is created from token and executor the first argument passed to this function. The ServerRPC is automatically cancelled at the end of the rpc handler if finish() was not called earlier.

    +

    This asynchronous operation runs forever unless it is cancelled, the rpc handler throws an exception or the server is shutdown (grpc::Server::Shutdown is called). At which point it invokes the completion handler (passing forward the exception thrown by the request handler, if any) after all invocations of the rpc handler return.

    +

    Example:

    +
    void server_rpc_unary_yield(agrpc::GrpcContext& grpc_context, example::v1::Example::AsyncService& service)
    +
    {
    + + +
    grpc_context, service,
    +
    [](RPC& rpc, RPC::Request& request, const asio::yield_context& yield)
    +
    {
    +
    RPC::Response response;
    +
    response.set_integer(request.integer());
    +
    rpc.finish(response, grpc::Status::OK, yield);
    +
    },
    +
    asio::detached);
    +
    }
    +
    Template Parameters
    + + +
    ServerRPCAn instantiation of agrpc::ServerRPC
    +
    +
    +
    Parameters
    + + + + + +
    executorThe executor used to handle each rpc
    serviceThe service associated with the gRPC method of the ServerRPC
    rpc_handlerA callable that takes an asio::basic_yield_context<Executor> as last argument. The return value is ignored. The Executor must be constructible from asio::get_associated_executor(completion_handler, +executor), where completion_handler is obtained from token and executor the first argument passed to this function.
    tokenA completion token for signature void(std::exception_ptr).
    +
    +
    +
    Since
    2.7.0
    + +
    +
    + +

    ◆ register_yield_rpc_handler() [2/2]

    + +
    +
    +
    +template<class ServerRPC , class RPCHandler , class CompletionToken >
    + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::register_yield_rpc_handler (agrpc::GrpcContext & grpc_context,
    detail::ServerRPCServiceT< ServerRPC > & service,
    RPCHandler && rpc_handler,
    CompletionToken && token )
    +
    + +

    Register a rpc handler for the given method (GrpcContext overload)

    +
    Since
    2.7.0
    + +
    +
    + +

    ◆ run() [1/2]

    + +
    +
    +
    +template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void>
    + + + + + + + + + + + +
    void agrpc::run (agrpc::GrpcContext & grpc_context,
    ExecutionContext & execution_context )
    +
    + +

    (experimental) Run an execution context in the same thread as a GrpcContext

    +

    The GrpcContext should be in the ready state when this function is invoked, other than that semantically identical to GrpcContext::run(). This function ends when the GrpcContext is stopped, e.g. because it ran out of work.

    +
    Template Parameters
    + + +
    TraitsSee DefaultRunTraits
    +
    +
    +
    Since
    1.7.0
    + +
    +
    + +

    ◆ run() [2/2]

    + +
    +
    +
    +template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void, class StopCondition = void>
    + + + + + + + + + + + + + + + + +
    void agrpc::run (agrpc::GrpcContext & grpc_context,
    ExecutionContext & execution_context,
    StopCondition stop_condition )
    +
    + +

    (experimental) Run an execution context in the same thread as a GrpcContext

    +

    The GrpcContext should be in the ready state when this function is invoked, other than that semantically identical to GrpcContext::run(). This function ends when the stop_condition returns true.

    +
    Template Parameters
    + + +
    TraitsSee DefaultRunTraits
    +
    +
    +
    Since
    1.7.0
    + +
    +
    + +

    ◆ run_completion_queue() [1/2]

    + +
    +
    +
    +template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void>
    + + + + + + + + + + + +
    void agrpc::run_completion_queue (agrpc::GrpcContext & grpc_context,
    ExecutionContext & execution_context )
    +
    + +

    (experimental) Run an execution context in the same thread as a GrpcContext's completion queue

    +

    The GrpcContext should be in the ready state when this function is invoked, other than that semantically identical to GrpcContext::run_completion_queue(). This function ends when the GrpcContext is stopped, e.g. because it ran out of work.

    +
    Template Parameters
    + + +
    TraitsSee DefaultRunTraits
    +
    +
    +
    Since
    2.0.0
    + +
    +
    + +

    ◆ run_completion_queue() [2/2]

    + +
    +
    +
    +template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void, class StopCondition = void>
    + + + + + + + + + + + + + + + + +
    void agrpc::run_completion_queue (agrpc::GrpcContext & grpc_context,
    ExecutionContext & execution_context,
    StopCondition stop_condition )
    +
    + +

    (experimental) Run an execution context in the same thread as a GrpcContext's completion queue

    +

    The GrpcContext should be in the ready state when this function is invoked, other than that semantically identical to GrpcContext::run_completion_queue(). This function ends when the stop_condition returns true.

    +
    Template Parameters
    + + +
    TraitsSee DefaultRunTraits
    +
    +
    +
    Since
    2.0.0
    + +
    +
    + +

    ◆ process_grpc_tag()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    void agrpc::process_grpc_tag (agrpc::GrpcContext & grpc_context,
    void * tag,
    bool ok )
    +
    +inline
    +
    + +

    Test utility to manually process gRPC tags.

    +

    This function can be used to process gRPC tags in places where the tag does not go through the grpc::CompletionQueue, for example in mocked stubs. It processes the tag in a manner equivalent to asio::post while being compatible with GrpcContext::run_completion_queue()/GrpcContext::poll_completion_queue().

    +

    Example using Google Mock:

    +
    // Setup mock stub
    +
    struct MockResponseReader : grpc::ClientAsyncResponseReaderInterface<example::v1::Response>
    +
    {
    +
    MOCK_METHOD0(StartCall, void());
    +
    MOCK_METHOD1(ReadInitialMetadata, void(void*));
    +
    MOCK_METHOD3(Finish, void(example::v1::Response*, grpc::Status*, void*));
    +
    };
    +
    testing::NiceMock<example::v1::MockExampleStub> mock_stub;
    +
    testing::NiceMock<MockResponseReader> mock_reader;
    +
    EXPECT_CALL(mock_reader, Finish)
    +
    .WillOnce(
    +
    [&](example::v1::Response* response, grpc::Status* status, void* tag)
    +
    {
    +
    *status = grpc::Status::OK;
    +
    response->set_integer(42);
    +
    agrpc::process_grpc_tag(grpc_context, tag, true);
    +
    });
    +
    EXPECT_CALL(mock_stub, AsyncUnaryRaw).WillOnce(testing::Return(&mock_reader));
    +
    +
    // Inject mock_stub into code under test
    + +
    grpc::ClientContext client_context;
    +
    example::v1::Response response;
    +
    example::v1::Request request;
    +
    const grpc::Status status =
    +
    co_await RPC::request(grpc_context, mock_stub, client_context, request, response, asio::use_awaitable);
    +
    +
    EXPECT_TRUE(status.ok());
    +
    EXPECT_EQ(42, response.integer());
    +
    Since
    1.7.0
    + +
    +
    +

    Variable Documentation

    + +

    ◆ notify_on_state_change

    + +
    +
    + + + + + +
    + + + + +
    detail::NotifyOnStateChangeFn agrpc::notify_on_state_change {}
    +
    +inlineconstexpr
    +
    + +

    Set notification for a grpc::Channel state change.

    +

    Function to set notification for a grpc::Channel state change.

    +
    Since
    2.3.0
    + +
    +
    + +

    ◆ read

    + +
    +
    + + + + + +
    + + + + +
    detail::ReadFn agrpc::read {}
    +
    +inlineconstexpr
    +
    +
    + +

    ◆ use_sender

    + +
    +
    + + + + + +
    + + + + +
    agrpc::UseSender agrpc::use_sender {}
    +
    +inlineconstexpr
    +
    + +

    Instance and factory for sender completion tokens.

    +

    Sender completion token.

    + +
    +
    +
    +
    + + + + diff --git a/docs/namespaceagrpc.js b/docs/namespaceagrpc.js new file mode 100644 index 00000000..3c769355 --- /dev/null +++ b/docs/namespaceagrpc.js @@ -0,0 +1,65 @@ +var namespaceagrpc = +[ + [ "BasicAlarm", "classagrpc_1_1_basic_alarm.html", "classagrpc_1_1_basic_alarm" ], + [ "BasicGrpcExecutor", "classagrpc_1_1_basic_grpc_executor.html", "classagrpc_1_1_basic_grpc_executor" ], + [ "ClientRPC", "classagrpc_1_1_client_r_p_c.html", null ], + [ "ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4" ], + [ "ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4" ], + [ "ClientRPC< PrepareAsyncBidiStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4" ], + [ "ClientRPC< PrepareAsyncClientStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4" ], + [ "ClientRPC< PrepareAsyncServerStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4" ], + [ "ClientRPC< PrepareAsyncUnary, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4" ], + [ "DefaultRunTraits", "structagrpc_1_1_default_run_traits.html", "structagrpc_1_1_default_run_traits" ], + [ "DefaultServerRPCTraits", "structagrpc_1_1_default_server_r_p_c_traits.html", "structagrpc_1_1_default_server_r_p_c_traits" ], + [ "GrpcContext", "classagrpc_1_1_grpc_context.html", "classagrpc_1_1_grpc_context" ], + [ "HealthCheckService", "classagrpc_1_1_health_check_service.html", "classagrpc_1_1_health_check_service" ], + [ "ServerRPC", "classagrpc_1_1_server_r_p_c.html", null ], + [ "ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPC< RequestBidiStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPC< RequestClientStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPC< RequestServerStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPC< RequestUnary, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4" ], + [ "ServerRPCPtr", "classagrpc_1_1_server_r_p_c_ptr.html", "classagrpc_1_1_server_r_p_c_ptr" ], + [ "UseSender", "structagrpc_1_1_use_sender.html", "structagrpc_1_1_use_sender" ], + [ "Waiter", "classagrpc_1_1_waiter.html", "classagrpc_1_1_waiter" ], + [ "Alarm", "namespaceagrpc.html#ad6c406cc03ead4c6f180bdf56bff6a03", null ], + [ "GenericUnaryClientRPC", "namespaceagrpc.html#a25a436b55412d2716c905ce0522bd84c", null ], + [ "GenericStreamingClientRPC", "namespaceagrpc.html#a644b312cfc6e64a0e50ab525cb095077", null ], + [ "GrpcExecutor", "namespaceagrpc.html#a03ba541ef9c0352e6160442780e533b4", null ], + [ "GenericServerRPC", "namespaceagrpc.html#a7d5eebaa6f815abd3ae12325f88fd253", null ], + [ "ClientRPCType", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36e", [ + [ "UNARY", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea8ca44f46ef1f04b2113678603c3800b4", null ], + [ "GENERIC_UNARY", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea2a1be6738d2573a3eecd21f772e11756", null ], + [ "SERVER_STREAMING", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaeb1bcff53747fbcc6c2ded49b5724257", null ], + [ "CLIENT_STREAMING", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea1350d72153c5dd5e5cbaffc22da1cfdc", null ], + [ "BIDIRECTIONAL_STREAMING", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaf92e0d805b776fa75c63d16707f99111", null ], + [ "GENERIC_STREAMING", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eadf49273525fcac45f0fe3afd8c7a5454", null ] + ] ], + [ "ServerRPCType", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216", [ + [ "UNARY", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a8ca44f46ef1f04b2113678603c3800b4", null ], + [ "SERVER_STREAMING", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216aeb1bcff53747fbcc6c2ded49b5724257", null ], + [ "CLIENT_STREAMING", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a1350d72153c5dd5e5cbaffc22da1cfdc", null ], + [ "BIDIRECTIONAL_STREAMING", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216af92e0d805b776fa75c63d16707f99111", null ], + [ "GENERIC", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216ac942dc2a9f958acddc67e11472d3ca0b", null ] + ] ], + [ "register_awaitable_rpc_handler", "namespaceagrpc.html#ae09f3bd4a00ce92682d30395d1fba52f", null ], + [ "register_awaitable_rpc_handler", "namespaceagrpc.html#a015eb1af78b29c2018f3635eb278ed0b", null ], + [ "register_callback_rpc_handler", "namespaceagrpc.html#af2906310868898bd1069a922018033e5", null ], + [ "register_callback_rpc_handler", "namespaceagrpc.html#a634945a9677aa2bb36b92252f3c854bf", null ], + [ "register_coroutine_rpc_handler", "namespaceagrpc.html#a48edf641c6b8226ceebbd47688c6d369", null ], + [ "register_coroutine_rpc_handler", "namespaceagrpc.html#a0fbe3a13a97f8f4de19a290ffaee43cb", null ], + [ "register_sender_rpc_handler", "namespaceagrpc.html#a595fc0d5c217d3d94d6d1dd230c09c39", null ], + [ "register_yield_rpc_handler", "namespaceagrpc.html#ac51d4bae04909dc6624b34e8931f4a6f", null ], + [ "register_yield_rpc_handler", "namespaceagrpc.html#ac296ea567f88e9ccd85642736dcba97a", null ], + [ "run", "namespaceagrpc.html#ab52a5b6f6ce90d1bc9faa5baa96a39fa", null ], + [ "run", "namespaceagrpc.html#a075e15728ee3eac5531f3202cfaf6c38", null ], + [ "run_completion_queue", "namespaceagrpc.html#a7c08e9c2d581c89024ba71489fc5aaf3", null ], + [ "run_completion_queue", "namespaceagrpc.html#a32f6562885c161c318d08f83e48468e8", null ], + [ "process_grpc_tag", "namespaceagrpc.html#accc81e3886098f4472dbe3e528594e3e", null ], + [ "add_health_check_service", "classagrpc_1_1_health_check_service.html#a886bd0e1412d8fc13ca2a5959aab07fb", null ], + [ "start_health_check_service", "classagrpc_1_1_health_check_service.html#a7a1da8eae5be01bec3a8f6a8be75932f", null ], + [ "start_health_check_service", "classagrpc_1_1_health_check_service.html#a55f352e270845728106e5dd3da20e668", null ], + [ "notify_on_state_change", "namespaceagrpc.html#a3f3ac92b1e47fe65b8bbef1b3af97c60", null ], + [ "read", "namespaceagrpc.html#a685510388ab87c9a90c44f880e9de9cd", null ], + [ "use_sender", "namespaceagrpc.html#aa9c38be6a3d7d59a78007bc4fff311a4", null ] +]; \ No newline at end of file diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html new file mode 100644 index 00000000..86d40b2c --- /dev/null +++ b/docs/namespacemembers.html @@ -0,0 +1,138 @@ + + + + + + + + +asio-grpc: Namespace Members + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
      +
    • Alarm : agrpc
    • +
    • ClientRPCType : agrpc
    • +
    • GenericServerRPC : agrpc
    • +
    • GenericStreamingClientRPC : agrpc
    • +
    • GenericUnaryClientRPC : agrpc
    • +
    • GrpcExecutor : agrpc
    • +
    • notify_on_state_change : agrpc
    • +
    • process_grpc_tag() : agrpc
    • +
    • read : agrpc
    • +
    • register_awaitable_rpc_handler() : agrpc
    • +
    • register_callback_rpc_handler() : agrpc
    • +
    • register_coroutine_rpc_handler() : agrpc
    • +
    • register_sender_rpc_handler() : agrpc
    • +
    • register_yield_rpc_handler() : agrpc
    • +
    • run() : agrpc
    • +
    • run_completion_queue() : agrpc
    • +
    • ServerRPCType : agrpc
    • +
    • use_sender : agrpc
    • +
    +
    +
    + + + + diff --git a/docs/namespacemembers_enum.html b/docs/namespacemembers_enum.html new file mode 100644 index 00000000..0ceffbb5 --- /dev/null +++ b/docs/namespacemembers_enum.html @@ -0,0 +1,122 @@ + + + + + + + + +asio-grpc: Namespace Members + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace enums with links to the namespaces they belong to:
      +
    • ClientRPCType : agrpc
    • +
    • ServerRPCType : agrpc
    • +
    +
    +
    + + + + diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html new file mode 100644 index 00000000..cd9fa053 --- /dev/null +++ b/docs/namespacemembers_func.html @@ -0,0 +1,128 @@ + + + + + + + + +asio-grpc: Namespace Members + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace functions with links to the namespaces they belong to:
      +
    • process_grpc_tag() : agrpc
    • +
    • register_awaitable_rpc_handler() : agrpc
    • +
    • register_callback_rpc_handler() : agrpc
    • +
    • register_coroutine_rpc_handler() : agrpc
    • +
    • register_sender_rpc_handler() : agrpc
    • +
    • register_yield_rpc_handler() : agrpc
    • +
    • run() : agrpc
    • +
    • run_completion_queue() : agrpc
    • +
    +
    +
    + + + + diff --git a/docs/namespacemembers_type.html b/docs/namespacemembers_type.html new file mode 100644 index 00000000..620ce642 --- /dev/null +++ b/docs/namespacemembers_type.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Namespace Members + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace typedefs with links to the namespaces they belong to:
      +
    • Alarm : agrpc
    • +
    • GenericServerRPC : agrpc
    • +
    • GenericStreamingClientRPC : agrpc
    • +
    • GenericUnaryClientRPC : agrpc
    • +
    • GrpcExecutor : agrpc
    • +
    +
    +
    + + + + diff --git a/docs/namespacemembers_vars.html b/docs/namespacemembers_vars.html new file mode 100644 index 00000000..376fcff5 --- /dev/null +++ b/docs/namespacemembers_vars.html @@ -0,0 +1,123 @@ + + + + + + + + +asio-grpc: Namespace Members + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace variables with links to the namespaces they belong to:
    +
    +
    + + + + diff --git a/docs/namespaces.html b/docs/namespaces.html new file mode 100644 index 00000000..55bd54c6 --- /dev/null +++ b/docs/namespaces.html @@ -0,0 +1,126 @@ + + + + + + + + +asio-grpc: Namespace List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    + + +
     NagrpcPublic namespace
    +
    +
    +
    + + + + diff --git a/docs/namespaces_dup.js b/docs/namespaces_dup.js new file mode 100644 index 00000000..868d5cb7 --- /dev/null +++ b/docs/namespaces_dup.js @@ -0,0 +1,4 @@ +var namespaces_dup = +[ + [ "agrpc", "namespaceagrpc.html", "namespaceagrpc" ] +]; \ No newline at end of file diff --git a/docs/nav_f.png b/docs/nav_f.png new file mode 100644 index 00000000..940086dd Binary files /dev/null and b/docs/nav_f.png differ diff --git a/docs/nav_fd.png b/docs/nav_fd.png new file mode 100644 index 00000000..622f41ee Binary files /dev/null and b/docs/nav_fd.png differ diff --git a/docs/nav_g.png b/docs/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/docs/nav_g.png differ diff --git a/docs/nav_h.png b/docs/nav_h.png new file mode 100644 index 00000000..9a92b078 Binary files /dev/null and b/docs/nav_h.png differ diff --git a/docs/nav_hd.png b/docs/nav_hd.png new file mode 100644 index 00000000..4f504203 Binary files /dev/null and b/docs/nav_hd.png differ diff --git a/docs/navtree.css b/docs/navtree.css new file mode 100644 index 00000000..250aed7a --- /dev/null +++ b/docs/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #43A4FF; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F3F9FE; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/navtree.js b/docs/navtree.js new file mode 100644 index 00000000..9027ce6a --- /dev/null +++ b/docs/navtree.js @@ -0,0 +1,483 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + + +asio-grpc: Related Pages + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    +
    + + + + diff --git a/docs/plus.svg b/docs/plus.svg new file mode 100644 index 00000000..07520165 --- /dev/null +++ b/docs/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/plusd.svg b/docs/plusd.svg new file mode 100644 index 00000000..0c65bfe9 --- /dev/null +++ b/docs/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/resize.js b/docs/resize.js new file mode 100644 index 00000000..3f991d9e --- /dev/null +++ b/docs/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,335); + newWidth = (width>335 && width<$(window).width()) ? width : 335; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,335); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/docs/search/all_0.js b/docs/search/all_0.js new file mode 100644 index 00000000..9966c051 --- /dev/null +++ b/docs/search/all_0.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['add_5fhealth_5fcheck_5fservice_0',['add_health_check_service',['../classagrpc_1_1_health_check_service.html#a886bd0e1412d8fc13ca2a5959aab07fb',1,'agrpc::HealthCheckService::add_health_check_service()'],['../classagrpc_1_1_health_check_service.html#a886bd0e1412d8fc13ca2a5959aab07fb',1,'agrpc::add_health_check_service()']]], + ['agrpc_1',['agrpc',['../namespaceagrpc.html',1,'']]], + ['alarm_2',['Alarm',['../namespaceagrpc.html#ad6c406cc03ead4c6f180bdf56bff6a03',1,'agrpc']]], + ['alarms_3',['Alarms',['../md_doc_2v3__migration.html#autotoc_md26',1,'']]], + ['allocator_4',['Custom allocator',['../md_doc_2completion__token.html#autotoc_md11',1,'']]], + ['allocator_5ftype_5',['allocator_type',['../classagrpc_1_1_grpc_context.html#a3445ceeb54e332eabf163cc6afdc1e3d',1,'agrpc::GrpcContext::allocator_type'],['../classagrpc_1_1_basic_grpc_executor.html#a658f9dcfd92c049d9b8961bbb67eab13',1,'agrpc::BasicGrpcExecutor::allocator_type']]], + ['as_5fdefault_5fon_5ft_6',['as_default_on_t',['../structagrpc_1_1_use_sender.html#a78ab5ead96e86416fd0ab76480d72139',1,'agrpc::UseSender']]], + ['asio_20grpc_7',['asio-grpc',['../index.html',1,'']]], + ['asio_20io_5fcontext_8',['Using Asio io_context',['../md_doc_2using__asio__io__context.html',1,'']]] +]; diff --git a/docs/search/all_1.js b/docs/search/all_1.js new file mode 100644 index 00000000..f2137549 --- /dev/null +++ b/docs/search/all_1.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['basicalarm_0',['BasicAlarm',['../classagrpc_1_1_basic_alarm.html',1,'agrpc::BasicAlarm< Executor >'],['../classagrpc_1_1_basic_alarm.html#a1c2856cde4299fab6033f44785b39a91',1,'agrpc::BasicAlarm::BasicAlarm(const Executor &executor)'],['../classagrpc_1_1_basic_alarm.html#a729216cc77694f2a829d6bade9e0c695',1,'agrpc::BasicAlarm::BasicAlarm(agrpc::GrpcContext &grpc_context)']]], + ['basicgrpcexecutor_1',['BasicGrpcExecutor',['../classagrpc_1_1_basic_grpc_executor.html',1,'agrpc::BasicGrpcExecutor< Allocator, Options >'],['../classagrpc_1_1_basic_grpc_executor.html#af1f14c7ef02e44b330c245394dfebfa6',1,'agrpc::BasicGrpcExecutor::BasicGrpcExecutor()']]], + ['bidirectional_20streaming_2',['Bidirectional streaming',['../md_doc_2v3__migration.html#autotoc_md31',1,'Bidirectional-streaming'],['../md_doc_2v3__migration.html#autotoc_md36',1,'Bidirectional-streaming']]], + ['bidirectional_20streaming_20rpc_3',['Bidirectional streaming rpc',['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md4',1,'Bidirectional-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md18',1,'Bidirectional-streaming rpc']]], + ['bidirectional_5fstreaming_4',['BIDIRECTIONAL_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaf92e0d805b776fa75c63d16707f99111',1,'agrpc::BIDIRECTIONAL_STREAMING'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216af92e0d805b776fa75c63d16707f99111',1,'agrpc::BIDIRECTIONAL_STREAMING']]], + ['boost_20coroutine_5',['Boost.Coroutine',['../md_doc_2completion__token.html#autotoc_md9',1,'']]] +]; diff --git a/docs/search/all_10.js b/docs/search/all_10.js new file mode 100644 index 00000000..8cfdef5a --- /dev/null +++ b/docs/search/all_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['token_0',['Completion token',['../md_doc_2completion__token.html',1,'']]], + ['traits_1',['Traits',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a4d77bf4c5da303dcefa3425b4345ab17',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Traits'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a687d30c3fb955b30cd9faa415ac31304',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Traits'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4efa88efaadea9af27c4586f5388613d',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Traits'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a6497720ecb8d23c3b31fccee67f51a10',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Traits']]], + ['type_2',['TYPE',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#aebbb738d826d482f508a01cd59fcd6b4',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::TYPE'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#abb156a59d90304904f66098612ed7d75',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::TYPE'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a4a74888f2f96f5bb8b13218373aaa80c',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::TYPE'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a361598fd336c38e5f282457263865229',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::TYPE'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a0b85df8344986b161b6223aa80595a6c',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::TYPE'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#abfcfaefdbf807291d880efafd9436d64',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::TYPE'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#abbf4b20cf13937e19ad04e23a63571d8',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::TYPE'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a6594380528bd6c1ad91f93e51c3db97a',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::TYPE'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a159db6cacc50132ff946138097111d9a',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::TYPE'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a54e3bd847fd4509a223660588413c69f',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::TYPE'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a2600be35ff008044922937f2d8445cb4',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::TYPE']]] +]; diff --git a/docs/search/all_11.js b/docs/search/all_11.js new file mode 100644 index 00000000..8123bc5d --- /dev/null +++ b/docs/search/all_11.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['unary_0',['UNARY',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea8ca44f46ef1f04b2113678603c3800b4',1,'agrpc::UNARY'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a8ca44f46ef1f04b2113678603c3800b4',1,'agrpc::UNARY']]], + ['unary_1',['Unary',['../md_doc_2v3__migration.html#autotoc_md28',1,'Unary'],['../md_doc_2v3__migration.html#autotoc_md33',1,'Unary']]], + ['unary_20rpc_2',['Unary rpc',['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md1',1,'Unary rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md15',1,'Unary rpc']]], + ['use_20io_5fcontext_20for_20grpc_20directly_3',['Why not use io_context for gRPC directly?',['../md_doc_2using__asio__io__context.html#autotoc_md23',1,'']]], + ['use_5fsender_4',['use_sender',['../namespaceagrpc.html#aa9c38be6a3d7d59a78007bc4fff311a4',1,'agrpc::use_sender'],['../md_doc_2completion__token.html#autotoc_md10',1,'use_sender']]], + ['usesender_5',['UseSender',['../structagrpc_1_1_use_sender.html',1,'agrpc']]], + ['using_20asio_20io_5fcontext_6',['Using Asio io_context',['../md_doc_2using__asio__io__context.html',1,'']]] +]; diff --git a/docs/search/all_12.js b/docs/search/all_12.js new file mode 100644 index 00000000..c4c11c60 --- /dev/null +++ b/docs/search/all_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['v3_20migration_20guide_0',['V3 migration guide',['../md_doc_2v3__migration.html',1,'']]] +]; diff --git a/docs/search/all_13.js b/docs/search/all_13.js new file mode 100644 index 00000000..091f4d62 --- /dev/null +++ b/docs/search/all_13.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['wait_0',['wait',['../classagrpc_1_1_basic_alarm.html#a1871721d802eb738999ba0628846ed82',1,'agrpc::BasicAlarm::wait(const Deadline &deadline, CompletionToken &&token=CompletionToken{}) &'],['../classagrpc_1_1_basic_alarm.html#a8d721ba08b4b170732dc8bea1580e61f',1,'agrpc::BasicAlarm::wait(const Deadline &deadline, CompletionToken &&token=CompletionToken{}) &&'],['../classagrpc_1_1_waiter.html#af5b5c1cd30d2d6d710b216df98c5b3ec',1,'agrpc::Waiter::wait()']]], + ['wait_5ffor_5fdone_1',['wait_for_done',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a8ac96d7413a2fd8465136d9815acca24',1,'agrpc::detail::ServerRPCNotifyWhenDoneMixin']]], + ['waiter_2',['Waiter',['../classagrpc_1_1_waiter.html',1,'agrpc::Waiter< Signature, Executor >'],['../classagrpc_1_1_waiter.html#afd9e6e03d3e0f9da901a976b110a58a0',1,'agrpc::Waiter::Waiter()']]], + ['why_20not_20use_20io_5fcontext_20for_20grpc_20directly_3',['Why not use io_context for gRPC directly?',['../md_doc_2using__asio__io__context.html#autotoc_md23',1,'']]], + ['work_5ffinished_4',['work_finished',['../classagrpc_1_1_grpc_context.html#a9f89631518b2d38dbe0be11f7d5a4cc6',1,'agrpc::GrpcContext']]], + ['work_5fstarted_5',['work_started',['../classagrpc_1_1_grpc_context.html#ada19710c265c3a1e9cbffb696d079fbb',1,'agrpc::GrpcContext']]], + ['write_6',['write',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a6fe42f409cebf57fbbf1faeedfc5dbdd',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a8ae746c9baa2aadd2a7a9cbd0a94d365',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write(const RequestT &request, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a613e43b75d508d451dac44e474256bf8',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a7617653d30c2f57cdaeffcefed89793f',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write(const RequestT &request, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#afabeae4521f21d32c3818aba6bc86b95',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a1a44c44a2233463244d0c520067631af',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write(const ResponseT &response, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a078d5b4d7735cb5557cdeadb52fd8c02',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a24a943e21a084ebb38c1e3f42810d145',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write(const ResponseT &response, CompletionToken &&token=CompletionToken{})']]], + ['write_5fand_5ffinish_7',['write_and_finish',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#af23fd4f5cd3520638508859955422fd3',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a27712fdf010df228fa4fba90874b93ee',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#adeecd7e5bda6de28ad8e09933c8cd8b8',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a333763a4595ed96f57915d8ba8c747d5',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})']]], + ['writes_5fdone_8',['writes_done',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a2d19b1441bd69861873989f76f5875e2',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >']]] +]; diff --git a/docs/search/all_14.js b/docs/search/all_14.js new file mode 100644 index 00000000..111c8849 --- /dev/null +++ b/docs/search/all_14.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_7egrpccontext_0',['~GrpcContext',['../classagrpc_1_1_grpc_context.html#ad54076bc77ee6db3f167b2ad073db171',1,'agrpc::GrpcContext']]], + ['_7ewaiter_1',['~Waiter',['../classagrpc_1_1_waiter.html#aa5ee9bb346765753e2a1087b3e2e3a3f',1,'agrpc::Waiter']]] +]; diff --git a/docs/search/all_2.js b/docs/search/all_2.js new file mode 100644 index 00000000..cd91ee54 --- /dev/null +++ b/docs/search/all_2.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['callback_0',['Callback',['../md_doc_2completion__token.html#autotoc_md8',1,'']]], + ['cancel_1',['cancel',['../classagrpc_1_1_basic_alarm.html#a0b1a1d2755efc3e05862e597100af241',1,'agrpc::BasicAlarm::cancel()'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#ade0c1cd5b69a524efbf92059fda88c1c',1,'agrpc::detail::ClientRPCContextBase::cancel()'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#ad8085a81b22c9af295c206f2f8c3af26',1,'agrpc::detail::ServerRPCContextBase::cancel()']]], + ['cheat_20sheet_2',['cheat sheet',['../md_doc_2client__rpc__cheat__sheet.html',1,'Client rpc cheat sheet'],['../md_doc_2server__rpc__cheat__sheet.html',1,'Server rpc cheat sheet']]], + ['client_20rpc_20cheat_20sheet_3',['Client rpc cheat sheet',['../md_doc_2client__rpc__cheat__sheet.html',1,'']]], + ['client_20rpcs_4',['Client RPCs',['../md_doc_2v3__migration.html#autotoc_md27',1,'']]], + ['client_20streaming_5',['Client streaming',['../md_doc_2v3__migration.html#autotoc_md29',1,'Client-streaming'],['../md_doc_2v3__migration.html#autotoc_md34',1,'Client-streaming']]], + ['client_20streaming_20rpc_6',['Client streaming rpc',['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md2',1,'Client-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md16',1,'Client-streaming rpc']]], + ['client_5fstreaming_7',['CLIENT_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea1350d72153c5dd5e5cbaffc22da1cfdc',1,'agrpc::CLIENT_STREAMING'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a1350d72153c5dd5e5cbaffc22da1cfdc',1,'agrpc::CLIENT_STREAMING']]], + ['clientrpc_8',['ClientRPC',['../classagrpc_1_1_client_r_p_c.html',1,'agrpc']]], + ['clientrpc_3c_20agrpc_3a_3aclientrpctype_3a_3ageneric_5fstreaming_2c_20executor_20_3e_9',['ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20agrpc_3a_3aclientrpctype_3a_3ageneric_5funary_2c_20executor_20_3e_10',['ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20prepareasyncbidistreaming_2c_20executor_20_3e_11',['ClientRPC< PrepareAsyncBidiStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20prepareasyncclientstreaming_2c_20executor_20_3e_12',['ClientRPC< PrepareAsyncClientStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20prepareasyncserverstreaming_2c_20executor_20_3e_13',['ClientRPC< PrepareAsyncServerStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20prepareasyncunary_2c_20executor_20_3e_14',['ClientRPC< PrepareAsyncUnary, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpcbase_15',['ClientRPCBase',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail::ClientRPCBase< Responder, Executor >'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#abdc479925e4d0cf2ee10d116a89e9b66',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a733bf7ee87338570e8e1d85fc47405a6',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a80593b7c183335a02dc27fc10cb228fd',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(const Executor &executor)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#abbd58f85ff2547e2c592ca1aa7a07ced',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)']]], + ['clientrpcbase_3c_20grpc_3a_3agenericclientasyncresponsereader_2c_20executor_20_3e_16',['ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbase_3c_20respondert_3c_20requestt_20_3e_2c_20executor_20_3e_17',['ClientRPCBase< ResponderT< RequestT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_2c_20executor_20_3e_18',['ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbase_3c_20respondert_3c_20responset_20_3e_2c_20executor_20_3e_19',['ClientRPCBase< ResponderT< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbidistreamingbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_2c_20executor_20_3e_20',['ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html',1,'agrpc::detail']]], + ['clientrpccontextbase_21',['ClientRPCContextBase',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20grpc_3a_3agenericclientasyncresponsereader_20_3e_22',['ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20responder_3c_20response_20_3e_20_3e_23',['ClientRPCContextBase< Responder< Response > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20respondert_3c_20requestt_20_3e_20_3e_24',['ClientRPCContextBase< ResponderT< RequestT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_20_3e_25',['ClientRPCContextBase< ResponderT< RequestT, ResponseT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20respondert_3c_20responset_20_3e_20_3e_26',['ClientRPCContextBase< ResponderT< ResponseT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpcserverstreamingbase_3c_20prepareasyncserverstreaming_2c_20executor_20_3e_27',['ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html',1,'agrpc::detail']]], + ['clientrpctype_28',['ClientRPCType',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36e',1,'agrpc']]], + ['clientrpcunarybase_3c_20prepareasyncunary_2c_20executor_20_3e_29',['ClientRPCUnaryBase< PrepareAsyncUnary, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html',1,'agrpc::detail']]], + ['cmake_30',['CMake',['../md_doc_2v3__migration.html#autotoc_md25',1,'']]], + ['cmake_20protobuf_20generate_31',['CMake protobuf generate',['../md_doc_2cmake__protobuf__generate.html',1,'']]], + ['completion_20token_32',['Completion token',['../md_doc_2completion__token.html',1,'']]], + ['conclusion_33',['Conclusion',['../md_doc_2using__asio__io__context.html#autotoc_md22',1,'']]], + ['constructed_20io_5fcontext_34',['constructed io_context',['../md_doc_2using__asio__io__context.html#autotoc_md21',1,'Explicitly constructed io_context'],['../md_doc_2using__asio__io__context.html#autotoc_md20',1,'Implicitly constructed io_context']]], + ['context_35',['context',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a056f94eadae189c43a6919d09e9f0031',1,'agrpc::detail::ClientRPCContextBase::context()'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a5602cbb3e4c886c89405ad0404626e64',1,'agrpc::detail::ClientRPCContextBase::context() const'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#acb7e79a9709696570ffd10a42a3ed8a7',1,'agrpc::detail::ServerRPCContextBase::context()'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#aa0a8fef49ce793e900442392882a488d',1,'agrpc::detail::ServerRPCContextBase::context() const'],['../classagrpc_1_1_basic_grpc_executor.html#ae03cda766d1198fa9fa135fccc02232a',1,'agrpc::BasicGrpcExecutor::context()']]], + ['coroutine_36',['Boost.Coroutine',['../md_doc_2completion__token.html#autotoc_md9',1,'']]], + ['custom_20allocator_37',['Custom allocator',['../md_doc_2completion__token.html#autotoc_md11',1,'']]] +]; diff --git a/docs/search/all_3.js b/docs/search/all_3.js new file mode 100644 index 00000000..1532aa9f --- /dev/null +++ b/docs/search/all_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['defaultruntraits_0',['DefaultRunTraits',['../structagrpc_1_1_default_run_traits.html',1,'agrpc']]], + ['defaultserverrpctraits_1',['DefaultServerRPCTraits',['../structagrpc_1_1_default_server_r_p_c_traits.html',1,'agrpc']]], + ['defer_2',['defer',['../classagrpc_1_1_basic_grpc_executor.html#a2c158f7d2dcad831b4930cf131e63f21',1,'agrpc::BasicGrpcExecutor']]], + ['directly_3',['Why not use io_context for gRPC directly?',['../md_doc_2using__asio__io__context.html#autotoc_md23',1,'']]], + ['dispatch_4',['dispatch',['../classagrpc_1_1_basic_grpc_executor.html#a97eda5ecec4b7066166e2f08eb1518be',1,'agrpc::BasicGrpcExecutor']]] +]; diff --git a/docs/search/all_4.js b/docs/search/all_4.js new file mode 100644 index 00000000..66f1d165 --- /dev/null +++ b/docs/search/all_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['example_0',['Example',['../md_doc_2cmake__protobuf__generate.html#autotoc_md6',1,'']]], + ['execute_1',['execute',['../classagrpc_1_1_basic_grpc_executor.html#a582b3391e4c1c383800284659707501c',1,'agrpc::BasicGrpcExecutor']]], + ['executor_5ftype_2',['executor_type',['../classagrpc_1_1_basic_alarm.html#a27f0463bacb42bca624f6c3a5dbc010f',1,'agrpc::BasicAlarm::executor_type'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a4bb04cc6b06744978476e7566c776c5c',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::executor_type'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a7b8c6b2cbac09f6f60e2495a13cffe75',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::executor_type'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#afe3aab926de22d76fdb5e0d347c5d8c4',1,'agrpc::detail::RPCExecutorBase::executor_type'],['../classagrpc_1_1_grpc_context.html#a72c65827092d85b2ce6376524e35141c',1,'agrpc::GrpcContext::executor_type'],['../classagrpc_1_1_waiter.html#af957414c01d35b84cef8a6f459cacf46',1,'agrpc::Waiter::executor_type']]], + ['explicitly_20constructed_20io_5fcontext_3',['Explicitly constructed io_context',['../md_doc_2using__asio__io__context.html#autotoc_md21',1,'']]] +]; diff --git a/docs/search/all_5.js b/docs/search/all_5.js new file mode 100644 index 00000000..62ab78f9 --- /dev/null +++ b/docs/search/all_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['finish_0',['finish',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a630c84662c7ffef3f82799c92b32d313',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::finish()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a15449f5b95e72c3df40201356f7e1c6c',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::finish()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a0171335c8cded03fe915af5cb791bbdf',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::finish()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac036fe983bdb3582a9c4ef549696cde8',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::finish()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a9a9b990891472214354e3425616f7b23',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a7c0197a93b56275d3d8e1318ca8993b0',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ae915630877540d3ab6b37fb245a0158b',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4513751b3b4dc0cd93d8d72d33b5fcdc',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::finish()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a06bd50403d88fa57b48a7e25f6ffdaf1',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::finish()']]], + ['finish_5fwith_5ferror_1',['finish_with_error',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aae58a33c70a9ba0ceb014fbc4a650f05',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish_with_error()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac174e0b37b341946fca06848d2d65ead',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish_with_error()']]], + ['for_20grpc_20directly_2',['Why not use io_context for gRPC directly?',['../md_doc_2using__asio__io__context.html#autotoc_md23',1,'']]] +]; diff --git a/docs/search/all_6.js b/docs/search/all_6.js new file mode 100644 index 00000000..2dea62ce --- /dev/null +++ b/docs/search/all_6.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['generate_0',['CMake protobuf generate',['../md_doc_2cmake__protobuf__generate.html',1,'']]], + ['generic_1',['GENERIC',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216ac942dc2a9f958acddc67e11472d3ca0b',1,'agrpc']]], + ['generic_5fstreaming_2',['GENERIC_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eadf49273525fcac45f0fe3afd8c7a5454',1,'agrpc']]], + ['generic_5funary_3',['GENERIC_UNARY',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea2a1be6738d2573a3eecd21f772e11756',1,'agrpc']]], + ['genericserverrpc_4',['GenericServerRPC',['../namespaceagrpc.html#a7d5eebaa6f815abd3ae12325f88fd253',1,'agrpc']]], + ['genericstreamingclientrpc_5',['GenericStreamingClientRPC',['../namespaceagrpc.html#a644b312cfc6e64a0e50ab525cb095077',1,'agrpc']]], + ['genericunaryclientrpc_6',['GenericUnaryClientRPC',['../namespaceagrpc.html#a25a436b55412d2716c905ce0522bd84c',1,'agrpc']]], + ['get_5fallocator_7',['get_allocator',['../classagrpc_1_1_grpc_context.html#ab38d929d30e72aface90b3d429727d33',1,'agrpc::GrpcContext::get_allocator()'],['../classagrpc_1_1_basic_grpc_executor.html#aead17d041c9509d3b5074375cd2eee6e',1,'agrpc::BasicGrpcExecutor::get_allocator()']]], + ['get_5fcompletion_5fqueue_8',['get_completion_queue',['../classagrpc_1_1_grpc_context.html#a897a9de9af8a2b81bbeef2f7fe0d0c63',1,'agrpc::GrpcContext']]], + ['get_5fexecutor_9',['get_executor',['../classagrpc_1_1_basic_alarm.html#ac364d2b1f047e589fc67c428c2c12947',1,'agrpc::BasicAlarm::get_executor()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac7d45c8fc3141d17881ac99ba0b53034',1,'agrpc::detail::RPCExecutorBase::get_executor()'],['../classagrpc_1_1_grpc_context.html#ab82f48f7e09542f242b683cda49aa6a9',1,'agrpc::GrpcContext::get_executor()']]], + ['get_5fscheduler_10',['get_scheduler',['../classagrpc_1_1_basic_alarm.html#ac4ab630cb9294c470fc6d1d3acf2aa5c',1,'agrpc::BasicAlarm::get_scheduler()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac5e0d6c42c0ed62b84b90f3ce42e180a',1,'agrpc::detail::RPCExecutorBase::get_scheduler()'],['../classagrpc_1_1_grpc_context.html#add171728b45fddd5740e4a3c9549bd3b',1,'agrpc::GrpcContext::get_scheduler() noexcept']]], + ['get_5fserver_5fcompletion_5fqueue_11',['get_server_completion_queue',['../classagrpc_1_1_grpc_context.html#a43be219d02581b5959b120bc9f869fce',1,'agrpc::GrpcContext']]], + ['grpc_12',['asio-grpc',['../index.html',1,'']]], + ['grpc_20directly_13',['Why not use io_context for gRPC directly?',['../md_doc_2using__asio__io__context.html#autotoc_md23',1,'']]], + ['grpccontext_14',['GrpcContext',['../classagrpc_1_1_grpc_context.html',1,'agrpc::GrpcContext'],['../classagrpc_1_1_grpc_context.html#a1a957251b8d9b75795e0669039176301',1,'agrpc::GrpcContext::GrpcContext()'],['../classagrpc_1_1_grpc_context.html#ab52eca52fa3fce99a8a688f3e3ed561e',1,'agrpc::GrpcContext::GrpcContext(std::size_t concurrency_hint)'],['../classagrpc_1_1_grpc_context.html#a2d955d0f205cf08dd3d0b84867702c9d',1,'agrpc::GrpcContext::GrpcContext(std::unique_ptr< grpc::ServerCompletionQueue > completion_queue)'],['../classagrpc_1_1_grpc_context.html#a8944c1140241c842dd29c9e691820c10',1,'agrpc::GrpcContext::GrpcContext(std::unique_ptr< grpc::ServerCompletionQueue > completion_queue, std::size_t concurrency_hint)']]], + ['grpcexecutor_15',['GrpcExecutor',['../namespaceagrpc.html#a03ba541ef9c0352e6160442780e533b4',1,'agrpc']]], + ['guide_16',['V3 migration guide',['../md_doc_2v3__migration.html',1,'']]] +]; diff --git a/docs/search/all_7.js b/docs/search/all_7.js new file mode 100644 index 00000000..e0a2e32c --- /dev/null +++ b/docs/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['healthcheckservice_0',['HealthCheckService',['../classagrpc_1_1_health_check_service.html',1,'agrpc']]] +]; diff --git a/docs/search/all_8.js b/docs/search/all_8.js new file mode 100644 index 00000000..65fbb84e --- /dev/null +++ b/docs/search/all_8.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['implicitly_20constructed_20io_5fcontext_0',['Implicitly constructed io_context',['../md_doc_2using__asio__io__context.html#autotoc_md20',1,'']]], + ['initiate_1',['initiate',['../classagrpc_1_1_waiter.html#a50c80e064c5a1911d65d34e21f89df54',1,'agrpc::Waiter']]], + ['io_5fcontext_2',['io_context',['../md_doc_2using__asio__io__context.html#autotoc_md21',1,'Explicitly constructed io_context'],['../md_doc_2using__asio__io__context.html#autotoc_md20',1,'Implicitly constructed io_context'],['../md_doc_2using__asio__io__context.html',1,'Using Asio io_context']]], + ['io_5fcontext_20for_20grpc_20directly_3',['Why not use io_context for gRPC directly?',['../md_doc_2using__asio__io__context.html#autotoc_md23',1,'']]], + ['is_5fdone_4',['is_done',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a42255cc87cf854a4d2bc04315f7647d5',1,'agrpc::detail::ServerRPCNotifyWhenDoneMixin']]], + ['is_5fready_5',['is_ready',['../classagrpc_1_1_waiter.html#a1f2d63e9aaa91fe141e30cb606c41580',1,'agrpc::Waiter']]], + ['is_5fstopped_6',['is_stopped',['../classagrpc_1_1_grpc_context.html#af71bfc1a827acb00e275161f189ea151',1,'agrpc::GrpcContext::is_stopped()'],['../structagrpc_1_1_default_run_traits.html#a3af8439a70f60bd6536142948b28eb45',1,'agrpc::DefaultRunTraits::is_stopped()']]] +]; diff --git a/docs/search/all_9.js b/docs/search/all_9.js new file mode 100644 index 00000000..9ce95159 --- /dev/null +++ b/docs/search/all_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['max_5flatency_0',['MAX_LATENCY',['../structagrpc_1_1_default_run_traits.html#ad40442c14867c39d6577a47cc0094c88',1,'agrpc::DefaultRunTraits']]], + ['method_5fname_1',['method_name',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#adca43de2480909300ee83f4e7d0fefe8',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::method_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a22b858db8af03d35bef7b60f7f389950',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::method_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ad0fbe938aa2186379c0115248e530310',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::method_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a36e96b31ad3ef1098a4c8c23e9dd94b7',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a972d0b1fe31b202d0cb400f2822cbd55',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ab43a75cf63b59377a1a5c3e6620f8f62',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a12aba29fbd910034827e1c1fa63c98fb',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a91d048483317e75723c7edf507011245',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::method_name()']]], + ['migration_20guide_2',['V3 migration guide',['../md_doc_2v3__migration.html',1,'']]] +]; diff --git a/docs/search/all_a.js b/docs/search/all_a.js new file mode 100644 index 00000000..6b8bedd0 --- /dev/null +++ b/docs/search/all_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['not_20use_20io_5fcontext_20for_20grpc_20directly_0',['Why not use io_context for gRPC directly?',['../md_doc_2using__asio__io__context.html#autotoc_md23',1,'']]], + ['notify_5fon_5fstate_5fchange_1',['notify_on_state_change',['../namespaceagrpc.html#a3f3ac92b1e47fe65b8bbef1b3af97c60',1,'agrpc']]], + ['notify_5fwhen_5fdone_2',['NOTIFY_WHEN_DONE',['../structagrpc_1_1_default_server_r_p_c_traits.html#af818ce99f34e1259831fcf8b16fcd2a3',1,'agrpc::DefaultServerRPCTraits']]], + ['notifyonstatechangefn_3',['NotifyOnStateChangeFn',['../structagrpc_1_1detail_1_1_notify_on_state_change_fn.html',1,'agrpc::detail']]] +]; diff --git a/docs/search/all_b.js b/docs/search/all_b.js new file mode 100644 index 00000000..4709a6a8 --- /dev/null +++ b/docs/search/all_b.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['on_5fwork_5ffinished_0',['on_work_finished',['../classagrpc_1_1_basic_grpc_executor.html#a727afeb6438fe94ec105085ee9e00d56',1,'agrpc::BasicGrpcExecutor']]], + ['on_5fwork_5fstarted_1',['on_work_started',['../classagrpc_1_1_basic_grpc_executor.html#ab2333c1d9f61b6469aeb6c84898e9a36',1,'agrpc::BasicGrpcExecutor']]], + ['operator_20bool_2',['operator bool',['../classagrpc_1_1_server_r_p_c_ptr.html#aca263693d2fba2ba7b8c5ed7a43a38a9',1,'agrpc::ServerRPCPtr']]], + ['operator_21_3d_3',['operator!=',['../classagrpc_1_1_basic_grpc_executor.html#a59d940966a2cbccb0905db9c4fe23e09',1,'agrpc::BasicGrpcExecutor']]], + ['operator_28_29_4',['operator()',['../structagrpc_1_1detail_1_1_notify_on_state_change_fn.html#a5c02ddea2000e4ce4c72bad24eafe221',1,'agrpc::detail::NotifyOnStateChangeFn::operator()()'],['../structagrpc_1_1detail_1_1_read_fn.html#a7edcb49289d5cd355c10ce3cf901e0a4',1,'agrpc::detail::ReadFn::operator()(agrpc::ServerRPC< RequestRPC, Traits, Executor > &rpc, typename agrpc::ServerRPC< RequestRPC, Traits, Executor >::Request &req, CompletionToken &&token=CompletionToken{}) const noexcept(noexcept(rpc.read(req, static_cast< CompletionToken && >(token))))'],['../structagrpc_1_1detail_1_1_read_fn.html#a7ab9e202fe6e4d6dc66e10c10db10d0f',1,'agrpc::detail::ReadFn::operator()(agrpc::ClientRPC< PrepareAsync, Executor > &rpc, typename agrpc::ClientRPC< PrepareAsync, Executor >::Response &response, CompletionToken &&token=CompletionToken{}) const noexcept(noexcept(rpc.read(response, static_cast< CompletionToken && >(token))))']]], + ['operator_2a_5',['operator*',['../classagrpc_1_1_server_r_p_c_ptr.html#a96ce1bc483099cd80a37ead302ee76c8',1,'agrpc::ServerRPCPtr::operator*() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#a662d487613723349a8cc1ad7d250482d',1,'agrpc::ServerRPCPtr::operator*() const noexcept']]], + ['operator_2d_3e_6',['operator->',['../classagrpc_1_1_server_r_p_c_ptr.html#afb74f4ac6254fbaddbea6a1d45b2cc71',1,'agrpc::ServerRPCPtr::operator->() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#abb8d870586f33095b19a9ac145476bc0',1,'agrpc::ServerRPCPtr::operator->() const noexcept']]], + ['operator_3d_3d_7',['operator==',['../classagrpc_1_1_basic_grpc_executor.html#a47785162ab9282e1afe21ca8617142eb',1,'agrpc::BasicGrpcExecutor']]], + ['other_8',['other',['../structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html#a3082097ad16bc7190026b39ed646c966',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor::other'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html#ab13e6fed14971fffed826aa80a635ba2',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor::other'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html#a0edf370762953c8f0f53eb49684b58d5',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor::other'],['../structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html#a3e3adceefc89a3dc2b981dbfa1d79265',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor::other'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html#a248da52a2c8146650d3ebbe6bfc5f92e',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor::other'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html#ab98619c4f65e33caceb25669bc87dec2',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor::other'],['../structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a0f6b0162569c1c628129976c0bf7bfd4',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor::other'],['../structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a3f50e304010e7456c2327c851e1aba92',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor::other'],['../structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a673c4c3fbda3538d531d8daea9bf586a',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor::other'],['../structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a8f560c37749519750a3fb26e8b245921',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor::other'],['../structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html#a88bd027aaa4c3eeec7b1a34baa4beca9',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor::other'],['../structagrpc_1_1_waiter_1_1rebind__executor.html#a16a3287aad9cb67fb0614d84184938ca',1,'agrpc::Waiter::rebind_executor::other']]], + ['overview_9',['Overview',['../index.html#autotoc_md13',1,'']]] +]; diff --git a/docs/search/all_c.js b/docs/search/all_c.js new file mode 100644 index 00000000..cd9ec195 --- /dev/null +++ b/docs/search/all_c.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['poll_0',['poll',['../classagrpc_1_1_grpc_context.html#a4eb77d4c7fe553bc7b8aa7bc0c73fc22',1,'agrpc::GrpcContext::poll()'],['../structagrpc_1_1_default_run_traits.html#a158e1228fe8b77b46fceb4a76d3d47f6',1,'agrpc::DefaultRunTraits::poll()']]], + ['poll_5fcompletion_5fqueue_1',['poll_completion_queue',['../classagrpc_1_1_grpc_context.html#af35c5d430df1d778320a2fe51ec40102',1,'agrpc::GrpcContext']]], + ['post_2',['post',['../classagrpc_1_1_basic_grpc_executor.html#aa55121002e69f6da4d193e2438556519',1,'agrpc::BasicGrpcExecutor']]], + ['prefer_3',['prefer',['../classagrpc_1_1_basic_grpc_executor.html#ada9763f836d7e1af44a67ce09c8d6522',1,'agrpc::BasicGrpcExecutor::prefer(asio::execution::relationship_t::fork_t) const noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#af81aa8e1195243f012aeab6f83653015',1,'agrpc::BasicGrpcExecutor::prefer(asio::execution::relationship_t::continuation_t) const noexcept']]], + ['process_5fgrpc_5ftag_4',['process_grpc_tag',['../namespaceagrpc.html#accc81e3886098f4472dbe3e528594e3e',1,'agrpc']]], + ['protobuf_20generate_5',['CMake protobuf generate',['../md_doc_2cmake__protobuf__generate.html',1,'']]], + ['ptr_6',['Ptr',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ad342db335d28b900bd34f9176ecd7375',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Ptr'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a932e38d5ef3fa85fe3671981b0baf157',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Ptr'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a558850727f602f2ffeee6fbdac1dfe67',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Ptr'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a482df6736133eb6cfabf930cc8e7db49',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::Ptr'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a45a5f939ccf42750b5a63d9133211d08',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::Ptr']]] +]; diff --git a/docs/search/all_d.js b/docs/search/all_d.js new file mode 100644 index 00000000..7c361bad --- /dev/null +++ b/docs/search/all_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['query_0',['query',['../classagrpc_1_1_basic_grpc_executor.html#a6f12911ba642e59b224357f68a2abb51',1,'agrpc::BasicGrpcExecutor::query(asio::execution::blocking_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#ab26ea9b4a7825f78147c43ea084b2ff3',1,'agrpc::BasicGrpcExecutor::query(asio::execution::mapping_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a41de4c176cc36e18949f590323cfbae1',1,'agrpc::BasicGrpcExecutor::query(asio::execution::context_t) const noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a93ee7e38b61436d95c48f32ea978967d',1,'agrpc::BasicGrpcExecutor::query(asio::execution::relationship_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a562182f5842ccd6c52e5cf6b8c4a24d0',1,'agrpc::BasicGrpcExecutor::query(asio::execution::outstanding_work_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a3864da8461ae1579a14bb20af274d8c5',1,'agrpc::BasicGrpcExecutor::query(asio::execution::allocator_t< OtherAllocator >) const noexcept']]] +]; diff --git a/docs/search/all_e.js b/docs/search/all_e.js new file mode 100644 index 00000000..597bc309 --- /dev/null +++ b/docs/search/all_e.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['read_0',['read',['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a05dbadc3c83ae568f787023074d91423',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::read()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ad3830bd5b441d8b80c2a5dd33ae8ad2d',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a720d458d8ef3d94744ac11b1c761c207',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::read()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a150a96890cdc34ca0ea8980ee33df2ec',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::read()'],['../namespaceagrpc.html#a685510388ab87c9a90c44f880e9de9cd',1,'agrpc::read']]], + ['read_5finitial_5fmetadata_1',['read_initial_metadata',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a8de4c2a086f185be57765c0be380ca1b',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::read_initial_metadata()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#afb6a4be476b5cab862000ba87b70e289',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read_initial_metadata()'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a1f3342f57017775ec75f7f3317949b05',1,'agrpc::detail::ClientRPCBase::read_initial_metadata()']]], + ['readfn_2',['ReadFn',['../structagrpc_1_1detail_1_1_read_fn.html',1,'agrpc::detail']]], + ['rebind_5fexecutor_3',['rebind_executor',['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_waiter_1_1rebind__executor.html',1,'agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor >']]], + ['register_5fawaitable_5frpc_5fhandler_4',['register_awaitable_rpc_handler',['../namespaceagrpc.html#ae09f3bd4a00ce92682d30395d1fba52f',1,'agrpc::register_awaitable_rpc_handler(const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})'],['../namespaceagrpc.html#a015eb1af78b29c2018f3635eb278ed0b',1,'agrpc::register_awaitable_rpc_handler(agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]], + ['register_5fcallback_5frpc_5fhandler_5',['register_callback_rpc_handler',['../namespaceagrpc.html#af2906310868898bd1069a922018033e5',1,'agrpc::register_callback_rpc_handler(const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})'],['../namespaceagrpc.html#a634945a9677aa2bb36b92252f3c854bf',1,'agrpc::register_callback_rpc_handler(agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]], + ['register_5fcoroutine_5frpc_5fhandler_6',['register_coroutine_rpc_handler',['../namespaceagrpc.html#a48edf641c6b8226ceebbd47688c6d369',1,'agrpc::register_coroutine_rpc_handler(const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})'],['../namespaceagrpc.html#a0fbe3a13a97f8f4de19a290ffaee43cb',1,'agrpc::register_coroutine_rpc_handler(agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]], + ['register_5fsender_5frpc_5fhandler_7',['register_sender_rpc_handler',['../namespaceagrpc.html#a595fc0d5c217d3d94d6d1dd230c09c39',1,'agrpc']]], + ['register_5fyield_5frpc_5fhandler_8',['register_yield_rpc_handler',['../namespaceagrpc.html#ac51d4bae04909dc6624b34e8931f4a6f',1,'agrpc::register_yield_rpc_handler(const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})'],['../namespaceagrpc.html#ac296ea567f88e9ccd85642736dcba97a',1,'agrpc::register_yield_rpc_handler(agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]], + ['request_9',['Request',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a3cbcb0c2a8dea17a5f8e2031b5f0e135',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Request'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a313126cc0eadd7c4dbbfc8aa8a45bc10',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Request'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aa4e18c75b6fb163a780408e2a118ec1d',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Request'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ab8fe0d6e998dbb9c3dac45bb3ebea1fd',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Request'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ab17fb315d9316707b442296f9096519c',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::Request'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a35d5a54c0d5d64aabf433328327646f8',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Request'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a8574c668f8b1c3ea7af13fcbfe5c6eed',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Request'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4890e4677616bb468f2254fc2e33d626',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Request'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#af85c5d0f47f0b6e6244efd65a2dedbd6',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Request']]], + ['request_10',['request',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a53680b344c2176c7ddd5fd97e331517a',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request(agrpc::GrpcContext &grpc_context, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#adc02ff48c51bd547e52fe0b69f671dc2',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request(const Executor &executor, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#ad2344b88476b5a2c07448939c9edabcb',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::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{})'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a71bc3a05a7738b9b87bc4ad657f189e0',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::request(const Executor &executor, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_server_r_p_c_ptr.html#a75171d6a69414d78fd8080a762831ec0',1,'agrpc::ServerRPCPtr::request() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#a7fc9aa2fff351417c0e2ba60c5b654a7',1,'agrpc::ServerRPCPtr::request() const noexcept']]], + ['require_11',['require',['../classagrpc_1_1_basic_grpc_executor.html#a9fc995acce9263dbce34dcdfc76bcb75',1,'agrpc::BasicGrpcExecutor::require(asio::execution::blocking_t::possibly_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, false)>'],['../classagrpc_1_1_basic_grpc_executor.html#ad7c8d60173fb17ccb20df74eba49c23a',1,'agrpc::BasicGrpcExecutor::require(asio::execution::blocking_t::never_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, true)>'],['../classagrpc_1_1_basic_grpc_executor.html#ab78813d4863b8e8175875dc9508db97f',1,'agrpc::BasicGrpcExecutor::require(asio::execution::outstanding_work_t::tracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, true)>'],['../classagrpc_1_1_basic_grpc_executor.html#a28a91c9fa313c1e764f036c4484611b2',1,'agrpc::BasicGrpcExecutor::require(asio::execution::outstanding_work_t::untracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, false)>'],['../classagrpc_1_1_basic_grpc_executor.html#a92d82315cfce4d130c7b001a9a2f86e3',1,'agrpc::BasicGrpcExecutor::require(asio::execution::allocator_t< OtherAllocator > other_allocator) const noexcept -> agrpc::BasicGrpcExecutor< OtherAllocator, Options >'],['../classagrpc_1_1_basic_grpc_executor.html#a127e4d664d638ed7c6faf8e011108072',1,'agrpc::BasicGrpcExecutor::require(asio::execution::allocator_t< void >) const noexcept -> agrpc::BasicGrpcExecutor< std::allocator< void >, Options >']]], + ['reset_12',['reset',['../classagrpc_1_1_grpc_context.html#a9da2b2b94e92a9d46e1309209002784b',1,'agrpc::GrpcContext']]], + ['response_13',['Response',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a42c626f687ccf2ac90c4f97c1428ba05',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Response'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a3729ec552aaf715925391a9596cc5b15',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Response'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aad54ab42b4d0f7ec548fe527d7c4a9e5',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Response'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a7f04ffe67672564e8fc084cea8186e9d',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Response'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a09949deac664f28273aa1b4f806759b1',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::Response'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a84678c4ada6372cefea2ea32aeb74fe9',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Response'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac7c7485017b9601a6070a8df3999b2ae',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Response'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#afd405ca5e8fb6126941bef62c78aa0de',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Response'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#ab8caf2b42da62017857e5f8d3b830353',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Response']]], + ['rpc_14',['rpc',['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md4',1,'Bidirectional-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md18',1,'Bidirectional-streaming rpc'],['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md2',1,'Client-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md16',1,'Client-streaming rpc'],['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md3',1,'Server-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md17',1,'Server-streaming rpc'],['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md1',1,'Unary rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md15',1,'Unary rpc']]], + ['rpc_20cheat_20sheet_15',['rpc cheat sheet',['../md_doc_2client__rpc__cheat__sheet.html',1,'Client rpc cheat sheet'],['../md_doc_2server__rpc__cheat__sheet.html',1,'Server rpc cheat sheet']]], + ['rpcexecutorbase_16',['RPCExecutorBase',['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html',1,'agrpc::detail']]], + ['rpcs_17',['RPCs',['../md_doc_2v3__migration.html#autotoc_md27',1,'Client RPCs'],['../md_doc_2v3__migration.html#autotoc_md32',1,'Server RPCs']]], + ['run_18',['run',['../classagrpc_1_1_grpc_context.html#acb1dae170b054aba4c83e266c456fee0',1,'agrpc::GrpcContext::run()'],['../namespaceagrpc.html#ab52a5b6f6ce90d1bc9faa5baa96a39fa',1,'agrpc::run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)'],['../namespaceagrpc.html#a075e15728ee3eac5531f3202cfaf6c38',1,'agrpc::run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)']]], + ['run_5fcompletion_5fqueue_19',['run_completion_queue',['../classagrpc_1_1_grpc_context.html#a627dcc6bc3401d204d976b6fea6e00a3',1,'agrpc::GrpcContext::run_completion_queue()'],['../namespaceagrpc.html#a7c08e9c2d581c89024ba71489fc5aaf3',1,'agrpc::run_completion_queue(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)'],['../namespaceagrpc.html#a32f6562885c161c318d08f83e48468e8',1,'agrpc::run_completion_queue(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)']]], + ['run_5ffor_20',['run_for',['../structagrpc_1_1_default_run_traits.html#a8452413588990f52725f10b20a2ebadd',1,'agrpc::DefaultRunTraits']]], + ['run_5funtil_21',['run_until',['../classagrpc_1_1_grpc_context.html#af6615f2abd46956145dcfe88e69f4004',1,'agrpc::GrpcContext']]], + ['run_5fwhile_22',['run_while',['../classagrpc_1_1_grpc_context.html#a21dc3e81f8d5c11969add93a7a24e363',1,'agrpc::GrpcContext']]], + ['running_5fin_5fthis_5fthread_23',['running_in_this_thread',['../classagrpc_1_1_basic_grpc_executor.html#aa88fb5798dd945616262dc58258f48ec',1,'agrpc::BasicGrpcExecutor']]] +]; diff --git a/docs/search/all_f.js b/docs/search/all_f.js new file mode 100644 index 00000000..29cd5a07 --- /dev/null +++ b/docs/search/all_f.js @@ -0,0 +1,49 @@ +var searchData= +[ + ['schedule_0',['schedule',['../classagrpc_1_1_basic_grpc_executor.html#ade38414f479671b271f191f3ee458408',1,'agrpc::BasicGrpcExecutor']]], + ['send_5finitial_5fmetadata_1',['send_initial_metadata',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html#a2476f3477572b896d89f6ac21cb59928',1,'agrpc::detail::ServerRPCBase']]], + ['server_20rpc_20cheat_20sheet_2',['Server rpc cheat sheet',['../md_doc_2server__rpc__cheat__sheet.html',1,'']]], + ['server_20rpcs_3',['Server RPCs',['../md_doc_2v3__migration.html#autotoc_md32',1,'']]], + ['server_20streaming_4',['Server streaming',['../md_doc_2v3__migration.html#autotoc_md30',1,'Server-streaming'],['../md_doc_2v3__migration.html#autotoc_md35',1,'Server-streaming']]], + ['server_20streaming_20rpc_5',['Server streaming rpc',['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md3',1,'Server-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md17',1,'Server-streaming rpc']]], + ['server_5fstreaming_6',['SERVER_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaeb1bcff53747fbcc6c2ded49b5724257',1,'agrpc::SERVER_STREAMING'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216aeb1bcff53747fbcc6c2ded49b5724257',1,'agrpc::SERVER_STREAMING']]], + ['serverrpc_7',['ServerRPC',['../classagrpc_1_1_server_r_p_c.html',1,'agrpc::ServerRPC< RequestRPC, Traits, Executor >'],['../classagrpc_1_1_server_r_p_c_ptr.html#a87d2fc4455382fefafc93963a0d182b5',1,'agrpc::ServerRPCPtr::ServerRPC'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a86a399b203ead3c545179330c6c88c5d',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a698de8d72aa58e56b689869cb36906e9',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#af44544ec93a0e434636e08f9b15e0517',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a5b78d65f5628c9eaf4a521399a7ab0ba',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a15af4c2269b9cfd9416855cc5fe755a2',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::ServerRPC()']]], + ['serverrpc_3c_20agrpc_3a_3aserverrpctype_3a_3ageneric_2c_20traitst_2c_20executor_20_3e_8',['ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpc_3c_20requestbidistreaming_2c_20traitst_2c_20executor_20_3e_9',['ServerRPC< RequestBidiStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpc_3c_20requestclientstreaming_2c_20traitst_2c_20executor_20_3e_10',['ServerRPC< RequestClientStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpc_3c_20requestserverstreaming_2c_20traitst_2c_20executor_20_3e_11',['ServerRPC< RequestServerStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpc_3c_20requestunary_2c_20traitst_2c_20executor_20_3e_12',['ServerRPC< RequestUnary, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpcbase_13',['ServerRPCBase',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbase_3c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_14',['ServerRPCBase< grpc::ServerAsyncReader< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbase_3c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_2c_20traitst_2c_20executor_20_3e_15',['ServerRPCBase< grpc::ServerAsyncResponseWriter< ResponseT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbase_3c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_2c_20traitst_2c_20executor_20_3e_16',['ServerRPCBase< grpc::ServerAsyncWriter< ResponseT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_17',['ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbidistreamingbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_18',['ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html',1,'agrpc::detail']]], + ['serverrpccontextbase_19',['ServerRPCContextBase',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_20_3e_20',['ServerRPCContextBase< grpc::ServerAsyncReader< ResponseT, RequestT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_20_3e_21',['ServerRPCContextBase< grpc::ServerAsyncResponseWriter< ResponseT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_20_3e_22',['ServerRPCContextBase< grpc::ServerAsyncWriter< ResponseT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20responder_3c_20response_2c_20request_20_3e_20_3e_23',['ServerRPCContextBase< Responder< Response, Request > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20responder_3c_20response_2c_20request_2e_2e_2e_20_3e_20_3e_24',['ServerRPCContextBase< Responder< Response, Request... > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_20_3e_25',['ServerRPCContextBase< ResponderT< ResponseT, RequestT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_26',['ServerRPCNotifyWhenDoneMixin',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20responder_2c_20executor_20_3e_27',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, Responder, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traitst_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_2c_20executor_20_3e_28',['ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traitst_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_2c_20executor_20_3e_29',['ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traitst_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_2c_20executor_20_3e_30',['ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncWriter< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traitst_3a_3anotify_5fwhen_5fdone_2c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20executor_20_3e_31',['ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcptr_32',['ServerRPCPtr',['../classagrpc_1_1_server_r_p_c_ptr.html',1,'agrpc::ServerRPCPtr< ServerRPCT >'],['../classagrpc_1_1_server_r_p_c_ptr.html#af9bd970c0f19dbee72d07924a733ef08',1,'agrpc::ServerRPCPtr::ServerRPCPtr()']]], + ['serverrpcptr_3c_20serverrpc_20_3e_33',['ServerRPCPtr< ServerRPC >',['../classagrpc_1_1_server_r_p_c_ptr.html',1,'agrpc']]], + ['serverrpctype_34',['ServerRPCType',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216',1,'agrpc']]], + ['service_5fname_35',['service_name',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0d95b3e778fd04576727a180ced2ad49',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::service_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#ae2e44ea56d1c15036646e906939fbb11',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::service_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#aeb82d28bcdb03ae6f757fe3574124b3f',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::service_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a07458f85b4281c361b16f652b6cda493',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aa7bb65e6fc755d0f701fefd18fc59ba7',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#acd6a9daff41e97b6fa89e3d3960004cf',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a6057033b1bfcbc06250a742229fe2357',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ab0c6dea77cb83891df6a5be872075877',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::service_name()']]], + ['setservingstatus_36',['SetServingStatus',['../classagrpc_1_1_health_check_service.html#a38397dcd756e5356973bddabe68b8ef7',1,'agrpc::HealthCheckService::SetServingStatus(const std::string &service_name, bool serving)'],['../classagrpc_1_1_health_check_service.html#a326d63fafa352ab8b2457545c46c5a34',1,'agrpc::HealthCheckService::SetServingStatus(bool serving)']]], + ['sheet_37',['sheet',['../md_doc_2client__rpc__cheat__sheet.html',1,'Client rpc cheat sheet'],['../md_doc_2server__rpc__cheat__sheet.html',1,'Server rpc cheat sheet']]], + ['shutdown_38',['Shutdown',['../classagrpc_1_1_health_check_service.html#aa48421a22334257415189455ce4200b7',1,'agrpc::HealthCheckService']]], + ['start_39',['start',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0cc8fb2b4fdbc30dfaa214b7faa16828',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a1ec544b72d885bd8997f071c48136862',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#af645e0dead95e4949f84971426536ed0',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::start()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac2a6ff58092fb44d7af8371f3e5835df',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#aa30e41480cbb07e971de447834423cdd',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ae6c73a1a9effe4787d9581cd620dad31',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::start()']]], + ['start_5fhealth_5fcheck_5fservice_40',['start_health_check_service',['../classagrpc_1_1_health_check_service.html#a7a1da8eae5be01bec3a8f6a8be75932f',1,'agrpc::HealthCheckService::start_health_check_service(agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1_health_check_service.html#a55f352e270845728106e5dd3da20e668',1,'agrpc::HealthCheckService::start_health_check_service(grpc::Server &server, agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1_health_check_service.html#a7a1da8eae5be01bec3a8f6a8be75932f',1,'agrpc::start_health_check_service(agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1_health_check_service.html#a55f352e270845728106e5dd3da20e668',1,'agrpc::start_health_check_service(grpc::Server &server, agrpc::GrpcContext &grpc_context)']]], + ['stop_41',['stop',['../classagrpc_1_1_grpc_context.html#aee29d403f03ef487d22efdf2079c46bc',1,'agrpc::GrpcContext']]], + ['streaming_42',['streaming',['../md_doc_2v3__migration.html#autotoc_md31',1,'Bidirectional-streaming'],['../md_doc_2v3__migration.html#autotoc_md36',1,'Bidirectional-streaming'],['../md_doc_2v3__migration.html#autotoc_md29',1,'Client-streaming'],['../md_doc_2v3__migration.html#autotoc_md34',1,'Client-streaming'],['../md_doc_2v3__migration.html#autotoc_md30',1,'Server-streaming'],['../md_doc_2v3__migration.html#autotoc_md35',1,'Server-streaming']]], + ['streaming_20rpc_43',['streaming rpc',['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md4',1,'Bidirectional-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md18',1,'Bidirectional-streaming rpc'],['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md2',1,'Client-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md16',1,'Client-streaming rpc'],['../md_doc_2client__rpc__cheat__sheet.html#autotoc_md3',1,'Server-streaming rpc'],['../md_doc_2server__rpc__cheat__sheet.html#autotoc_md17',1,'Server-streaming rpc']]], + ['stub_44',['Stub',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ae494858ba1fb77cc03a473d475f89fec',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Stub'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a8cec6132a63b51481847db130de97d12',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Stub'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aaa5fac7ed627fe95e1200d25633884b1',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Stub'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac81a92f73b6032ab5163473f8af67ec8',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Stub'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a4ad1384caca1951c4d7b4b68b1387bb9',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::Stub'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ad20cfa0db0604367ac06d132cc5568cc',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::Stub']]], + ['swap_45',['swap',['../classagrpc_1_1_server_r_p_c_ptr.html#a9dc4a96f02657009d5a1c27ff9c6a7fe',1,'agrpc::ServerRPCPtr']]] +]; diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js new file mode 100644 index 00000000..24ce3a76 --- /dev/null +++ b/docs/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['basicalarm_0',['BasicAlarm',['../classagrpc_1_1_basic_alarm.html',1,'agrpc']]], + ['basicgrpcexecutor_1',['BasicGrpcExecutor',['../classagrpc_1_1_basic_grpc_executor.html',1,'agrpc']]] +]; diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js new file mode 100644 index 00000000..603753f6 --- /dev/null +++ b/docs/search/classes_1.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['clientrpc_0',['ClientRPC',['../classagrpc_1_1_client_r_p_c.html',1,'agrpc']]], + ['clientrpc_3c_20agrpc_3a_3aclientrpctype_3a_3ageneric_5fstreaming_2c_20executor_20_3e_1',['ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20agrpc_3a_3aclientrpctype_3a_3ageneric_5funary_2c_20executor_20_3e_2',['ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20prepareasyncbidistreaming_2c_20executor_20_3e_3',['ClientRPC< PrepareAsyncBidiStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20prepareasyncclientstreaming_2c_20executor_20_3e_4',['ClientRPC< PrepareAsyncClientStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20prepareasyncserverstreaming_2c_20executor_20_3e_5',['ClientRPC< PrepareAsyncServerStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpc_3c_20prepareasyncunary_2c_20executor_20_3e_6',['ClientRPC< PrepareAsyncUnary, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html',1,'agrpc']]], + ['clientrpcbase_7',['ClientRPCBase',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbase_3c_20grpc_3a_3agenericclientasyncresponsereader_2c_20executor_20_3e_8',['ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbase_3c_20respondert_3c_20requestt_20_3e_2c_20executor_20_3e_9',['ClientRPCBase< ResponderT< RequestT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_2c_20executor_20_3e_10',['ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbase_3c_20respondert_3c_20responset_20_3e_2c_20executor_20_3e_11',['ClientRPCBase< ResponderT< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]], + ['clientrpcbidistreamingbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_2c_20executor_20_3e_12',['ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html',1,'agrpc::detail']]], + ['clientrpccontextbase_13',['ClientRPCContextBase',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20grpc_3a_3agenericclientasyncresponsereader_20_3e_14',['ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20responder_3c_20response_20_3e_20_3e_15',['ClientRPCContextBase< Responder< Response > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20respondert_3c_20requestt_20_3e_20_3e_16',['ClientRPCContextBase< ResponderT< RequestT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_20_3e_17',['ClientRPCContextBase< ResponderT< RequestT, ResponseT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpccontextbase_3c_20respondert_3c_20responset_20_3e_20_3e_18',['ClientRPCContextBase< ResponderT< ResponseT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]], + ['clientrpcserverstreamingbase_3c_20prepareasyncserverstreaming_2c_20executor_20_3e_19',['ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html',1,'agrpc::detail']]], + ['clientrpcunarybase_3c_20prepareasyncunary_2c_20executor_20_3e_20',['ClientRPCUnaryBase< PrepareAsyncUnary, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html',1,'agrpc::detail']]] +]; diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js new file mode 100644 index 00000000..cb32003b --- /dev/null +++ b/docs/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['defaultruntraits_0',['DefaultRunTraits',['../structagrpc_1_1_default_run_traits.html',1,'agrpc']]], + ['defaultserverrpctraits_1',['DefaultServerRPCTraits',['../structagrpc_1_1_default_server_r_p_c_traits.html',1,'agrpc']]] +]; diff --git a/docs/search/classes_3.js b/docs/search/classes_3.js new file mode 100644 index 00000000..80f25877 --- /dev/null +++ b/docs/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['grpccontext_0',['GrpcContext',['../classagrpc_1_1_grpc_context.html',1,'agrpc']]] +]; diff --git a/docs/search/classes_4.js b/docs/search/classes_4.js new file mode 100644 index 00000000..e0a2e32c --- /dev/null +++ b/docs/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['healthcheckservice_0',['HealthCheckService',['../classagrpc_1_1_health_check_service.html',1,'agrpc']]] +]; diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js new file mode 100644 index 00000000..8d730319 --- /dev/null +++ b/docs/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['notifyonstatechangefn_0',['NotifyOnStateChangeFn',['../structagrpc_1_1detail_1_1_notify_on_state_change_fn.html',1,'agrpc::detail']]] +]; diff --git a/docs/search/classes_6.js b/docs/search/classes_6.js new file mode 100644 index 00000000..fa73f969 --- /dev/null +++ b/docs/search/classes_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['readfn_0',['ReadFn',['../structagrpc_1_1detail_1_1_read_fn.html',1,'agrpc::detail']]], + ['rebind_5fexecutor_1',['rebind_executor',['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_waiter_1_1rebind__executor.html',1,'agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor >']]], + ['rpcexecutorbase_2',['RPCExecutorBase',['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html',1,'agrpc::detail']]] +]; diff --git a/docs/search/classes_7.js b/docs/search/classes_7.js new file mode 100644 index 00000000..e4451f03 --- /dev/null +++ b/docs/search/classes_7.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['serverrpc_0',['ServerRPC',['../classagrpc_1_1_server_r_p_c.html',1,'agrpc']]], + ['serverrpc_3c_20agrpc_3a_3aserverrpctype_3a_3ageneric_2c_20traitst_2c_20executor_20_3e_1',['ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpc_3c_20requestbidistreaming_2c_20traitst_2c_20executor_20_3e_2',['ServerRPC< RequestBidiStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpc_3c_20requestclientstreaming_2c_20traitst_2c_20executor_20_3e_3',['ServerRPC< RequestClientStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpc_3c_20requestserverstreaming_2c_20traitst_2c_20executor_20_3e_4',['ServerRPC< RequestServerStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpc_3c_20requestunary_2c_20traitst_2c_20executor_20_3e_5',['ServerRPC< RequestUnary, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]], + ['serverrpcbase_6',['ServerRPCBase',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbase_3c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_7',['ServerRPCBase< grpc::ServerAsyncReader< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbase_3c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_2c_20traitst_2c_20executor_20_3e_8',['ServerRPCBase< grpc::ServerAsyncResponseWriter< ResponseT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbase_3c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_2c_20traitst_2c_20executor_20_3e_9',['ServerRPCBase< grpc::ServerAsyncWriter< ResponseT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_10',['ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]], + ['serverrpcbidistreamingbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_11',['ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html',1,'agrpc::detail']]], + ['serverrpccontextbase_12',['ServerRPCContextBase',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_20_3e_13',['ServerRPCContextBase< grpc::ServerAsyncReader< ResponseT, RequestT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_20_3e_14',['ServerRPCContextBase< grpc::ServerAsyncResponseWriter< ResponseT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_20_3e_15',['ServerRPCContextBase< grpc::ServerAsyncWriter< ResponseT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20responder_3c_20response_2c_20request_20_3e_20_3e_16',['ServerRPCContextBase< Responder< Response, Request > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20responder_3c_20response_2c_20request_2e_2e_2e_20_3e_20_3e_17',['ServerRPCContextBase< Responder< Response, Request... > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpccontextbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_20_3e_18',['ServerRPCContextBase< ResponderT< ResponseT, RequestT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_19',['ServerRPCNotifyWhenDoneMixin',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20responder_2c_20executor_20_3e_20',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, Responder, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traitst_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_2c_20executor_20_3e_21',['ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traitst_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_2c_20executor_20_3e_22',['ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traitst_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_2c_20executor_20_3e_23',['ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, grpc::ServerAsyncWriter< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcnotifywhendonemixin_3c_20traitst_3a_3anotify_5fwhen_5fdone_2c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20executor_20_3e_24',['ServerRPCNotifyWhenDoneMixin< TraitsT::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]], + ['serverrpcptr_25',['ServerRPCPtr',['../classagrpc_1_1_server_r_p_c_ptr.html',1,'agrpc']]], + ['serverrpcptr_3c_20serverrpc_20_3e_26',['ServerRPCPtr< ServerRPC >',['../classagrpc_1_1_server_r_p_c_ptr.html',1,'agrpc']]] +]; diff --git a/docs/search/classes_8.js b/docs/search/classes_8.js new file mode 100644 index 00000000..5c3591e1 --- /dev/null +++ b/docs/search/classes_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['usesender_0',['UseSender',['../structagrpc_1_1_use_sender.html',1,'agrpc']]] +]; diff --git a/docs/search/classes_9.js b/docs/search/classes_9.js new file mode 100644 index 00000000..7116e163 --- /dev/null +++ b/docs/search/classes_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['waiter_0',['Waiter',['../classagrpc_1_1_waiter.html',1,'agrpc']]] +]; diff --git a/docs/search/close.svg b/docs/search/close.svg new file mode 100644 index 00000000..337d6cc1 --- /dev/null +++ b/docs/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs/search/enums_0.js b/docs/search/enums_0.js new file mode 100644 index 00000000..e43cfcdf --- /dev/null +++ b/docs/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['clientrpctype_0',['ClientRPCType',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36e',1,'agrpc']]] +]; diff --git a/docs/search/enums_1.js b/docs/search/enums_1.js new file mode 100644 index 00000000..619ac7f1 --- /dev/null +++ b/docs/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serverrpctype_0',['ServerRPCType',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216',1,'agrpc']]] +]; diff --git a/docs/search/enumvalues_0.js b/docs/search/enumvalues_0.js new file mode 100644 index 00000000..67ea542e --- /dev/null +++ b/docs/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bidirectional_5fstreaming_0',['BIDIRECTIONAL_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaf92e0d805b776fa75c63d16707f99111',1,'agrpc::BIDIRECTIONAL_STREAMING'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216af92e0d805b776fa75c63d16707f99111',1,'agrpc::BIDIRECTIONAL_STREAMING']]] +]; diff --git a/docs/search/enumvalues_1.js b/docs/search/enumvalues_1.js new file mode 100644 index 00000000..1f3d58f2 --- /dev/null +++ b/docs/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['client_5fstreaming_0',['CLIENT_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea1350d72153c5dd5e5cbaffc22da1cfdc',1,'agrpc::CLIENT_STREAMING'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a1350d72153c5dd5e5cbaffc22da1cfdc',1,'agrpc::CLIENT_STREAMING']]] +]; diff --git a/docs/search/enumvalues_2.js b/docs/search/enumvalues_2.js new file mode 100644 index 00000000..3ad6004d --- /dev/null +++ b/docs/search/enumvalues_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['generic_0',['GENERIC',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216ac942dc2a9f958acddc67e11472d3ca0b',1,'agrpc']]], + ['generic_5fstreaming_1',['GENERIC_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eadf49273525fcac45f0fe3afd8c7a5454',1,'agrpc']]], + ['generic_5funary_2',['GENERIC_UNARY',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea2a1be6738d2573a3eecd21f772e11756',1,'agrpc']]] +]; diff --git a/docs/search/enumvalues_3.js b/docs/search/enumvalues_3.js new file mode 100644 index 00000000..c2c827b9 --- /dev/null +++ b/docs/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['server_5fstreaming_0',['SERVER_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaeb1bcff53747fbcc6c2ded49b5724257',1,'agrpc::SERVER_STREAMING'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216aeb1bcff53747fbcc6c2ded49b5724257',1,'agrpc::SERVER_STREAMING']]] +]; diff --git a/docs/search/enumvalues_4.js b/docs/search/enumvalues_4.js new file mode 100644 index 00000000..7aa730f9 --- /dev/null +++ b/docs/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unary_0',['UNARY',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea8ca44f46ef1f04b2113678603c3800b4',1,'agrpc::UNARY'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a8ca44f46ef1f04b2113678603c3800b4',1,'agrpc::UNARY']]] +]; diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js new file mode 100644 index 00000000..e79d3c66 --- /dev/null +++ b/docs/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['add_5fhealth_5fcheck_5fservice_0',['add_health_check_service',['../classagrpc_1_1_health_check_service.html#a886bd0e1412d8fc13ca2a5959aab07fb',1,'agrpc::HealthCheckService::add_health_check_service()'],['../classagrpc_1_1_health_check_service.html#a886bd0e1412d8fc13ca2a5959aab07fb',1,'agrpc::add_health_check_service()']]] +]; diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js new file mode 100644 index 00000000..0f4a28af --- /dev/null +++ b/docs/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['basicalarm_0',['BasicAlarm',['../classagrpc_1_1_basic_alarm.html#a1c2856cde4299fab6033f44785b39a91',1,'agrpc::BasicAlarm::BasicAlarm(const Executor &executor)'],['../classagrpc_1_1_basic_alarm.html#a729216cc77694f2a829d6bade9e0c695',1,'agrpc::BasicAlarm::BasicAlarm(agrpc::GrpcContext &grpc_context)']]], + ['basicgrpcexecutor_1',['BasicGrpcExecutor',['../classagrpc_1_1_basic_grpc_executor.html#af1f14c7ef02e44b330c245394dfebfa6',1,'agrpc::BasicGrpcExecutor']]] +]; diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js new file mode 100644 index 00000000..b96781d4 --- /dev/null +++ b/docs/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['cancel_0',['cancel',['../classagrpc_1_1_basic_alarm.html#a0b1a1d2755efc3e05862e597100af241',1,'agrpc::BasicAlarm::cancel()'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#ade0c1cd5b69a524efbf92059fda88c1c',1,'agrpc::detail::ClientRPCContextBase::cancel()'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#ad8085a81b22c9af295c206f2f8c3af26',1,'agrpc::detail::ServerRPCContextBase::cancel()']]], + ['clientrpcbase_1',['ClientRPCBase',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#abdc479925e4d0cf2ee10d116a89e9b66',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a733bf7ee87338570e8e1d85fc47405a6',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a80593b7c183335a02dc27fc10cb228fd',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(const Executor &executor)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#abbd58f85ff2547e2c592ca1aa7a07ced',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)']]], + ['context_2',['context',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a056f94eadae189c43a6919d09e9f0031',1,'agrpc::detail::ClientRPCContextBase::context()'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a5602cbb3e4c886c89405ad0404626e64',1,'agrpc::detail::ClientRPCContextBase::context() const'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#acb7e79a9709696570ffd10a42a3ed8a7',1,'agrpc::detail::ServerRPCContextBase::context()'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#aa0a8fef49ce793e900442392882a488d',1,'agrpc::detail::ServerRPCContextBase::context() const'],['../classagrpc_1_1_basic_grpc_executor.html#ae03cda766d1198fa9fa135fccc02232a',1,'agrpc::BasicGrpcExecutor::context()']]] +]; diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js new file mode 100644 index 00000000..33459028 --- /dev/null +++ b/docs/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['defer_0',['defer',['../classagrpc_1_1_basic_grpc_executor.html#a2c158f7d2dcad831b4930cf131e63f21',1,'agrpc::BasicGrpcExecutor']]], + ['dispatch_1',['dispatch',['../classagrpc_1_1_basic_grpc_executor.html#a97eda5ecec4b7066166e2f08eb1518be',1,'agrpc::BasicGrpcExecutor']]] +]; diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js new file mode 100644 index 00000000..0ec43da2 --- /dev/null +++ b/docs/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['execute_0',['execute',['../classagrpc_1_1_basic_grpc_executor.html#a582b3391e4c1c383800284659707501c',1,'agrpc::BasicGrpcExecutor']]] +]; diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js new file mode 100644 index 00000000..51ec852e --- /dev/null +++ b/docs/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['finish_0',['finish',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a630c84662c7ffef3f82799c92b32d313',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::finish()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a15449f5b95e72c3df40201356f7e1c6c',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::finish()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a0171335c8cded03fe915af5cb791bbdf',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::finish()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac036fe983bdb3582a9c4ef549696cde8',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::finish()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a9a9b990891472214354e3425616f7b23',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a7c0197a93b56275d3d8e1318ca8993b0',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ae915630877540d3ab6b37fb245a0158b',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4513751b3b4dc0cd93d8d72d33b5fcdc',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::finish()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a06bd50403d88fa57b48a7e25f6ffdaf1',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::finish()']]], + ['finish_5fwith_5ferror_1',['finish_with_error',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aae58a33c70a9ba0ceb014fbc4a650f05',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish_with_error()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac174e0b37b341946fca06848d2d65ead',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish_with_error()']]] +]; diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js new file mode 100644 index 00000000..6a4381b1 --- /dev/null +++ b/docs/search/functions_6.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['get_5fallocator_0',['get_allocator',['../classagrpc_1_1_grpc_context.html#ab38d929d30e72aface90b3d429727d33',1,'agrpc::GrpcContext::get_allocator()'],['../classagrpc_1_1_basic_grpc_executor.html#aead17d041c9509d3b5074375cd2eee6e',1,'agrpc::BasicGrpcExecutor::get_allocator()']]], + ['get_5fcompletion_5fqueue_1',['get_completion_queue',['../classagrpc_1_1_grpc_context.html#a897a9de9af8a2b81bbeef2f7fe0d0c63',1,'agrpc::GrpcContext']]], + ['get_5fexecutor_2',['get_executor',['../classagrpc_1_1_basic_alarm.html#ac364d2b1f047e589fc67c428c2c12947',1,'agrpc::BasicAlarm::get_executor()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac7d45c8fc3141d17881ac99ba0b53034',1,'agrpc::detail::RPCExecutorBase::get_executor()'],['../classagrpc_1_1_grpc_context.html#ab82f48f7e09542f242b683cda49aa6a9',1,'agrpc::GrpcContext::get_executor()']]], + ['get_5fscheduler_3',['get_scheduler',['../classagrpc_1_1_basic_alarm.html#ac4ab630cb9294c470fc6d1d3acf2aa5c',1,'agrpc::BasicAlarm::get_scheduler()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac5e0d6c42c0ed62b84b90f3ce42e180a',1,'agrpc::detail::RPCExecutorBase::get_scheduler()'],['../classagrpc_1_1_grpc_context.html#add171728b45fddd5740e4a3c9549bd3b',1,'agrpc::GrpcContext::get_scheduler() noexcept']]], + ['get_5fserver_5fcompletion_5fqueue_4',['get_server_completion_queue',['../classagrpc_1_1_grpc_context.html#a43be219d02581b5959b120bc9f869fce',1,'agrpc::GrpcContext']]], + ['grpccontext_5',['GrpcContext',['../classagrpc_1_1_grpc_context.html#a1a957251b8d9b75795e0669039176301',1,'agrpc::GrpcContext::GrpcContext()'],['../classagrpc_1_1_grpc_context.html#ab52eca52fa3fce99a8a688f3e3ed561e',1,'agrpc::GrpcContext::GrpcContext(std::size_t concurrency_hint)'],['../classagrpc_1_1_grpc_context.html#a2d955d0f205cf08dd3d0b84867702c9d',1,'agrpc::GrpcContext::GrpcContext(std::unique_ptr< grpc::ServerCompletionQueue > completion_queue)'],['../classagrpc_1_1_grpc_context.html#a8944c1140241c842dd29c9e691820c10',1,'agrpc::GrpcContext::GrpcContext(std::unique_ptr< grpc::ServerCompletionQueue > completion_queue, std::size_t concurrency_hint)']]] +]; diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js new file mode 100644 index 00000000..3bcb7113 --- /dev/null +++ b/docs/search/functions_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['initiate_0',['initiate',['../classagrpc_1_1_waiter.html#a50c80e064c5a1911d65d34e21f89df54',1,'agrpc::Waiter']]], + ['is_5fdone_1',['is_done',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a42255cc87cf854a4d2bc04315f7647d5',1,'agrpc::detail::ServerRPCNotifyWhenDoneMixin']]], + ['is_5fready_2',['is_ready',['../classagrpc_1_1_waiter.html#a1f2d63e9aaa91fe141e30cb606c41580',1,'agrpc::Waiter']]], + ['is_5fstopped_3',['is_stopped',['../classagrpc_1_1_grpc_context.html#af71bfc1a827acb00e275161f189ea151',1,'agrpc::GrpcContext::is_stopped()'],['../structagrpc_1_1_default_run_traits.html#a3af8439a70f60bd6536142948b28eb45',1,'agrpc::DefaultRunTraits::is_stopped()']]] +]; diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js new file mode 100644 index 00000000..a9931d13 --- /dev/null +++ b/docs/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['method_5fname_0',['method_name',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#adca43de2480909300ee83f4e7d0fefe8',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::method_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a22b858db8af03d35bef7b60f7f389950',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::method_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ad0fbe938aa2186379c0115248e530310',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::method_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a36e96b31ad3ef1098a4c8c23e9dd94b7',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a972d0b1fe31b202d0cb400f2822cbd55',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ab43a75cf63b59377a1a5c3e6620f8f62',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a12aba29fbd910034827e1c1fa63c98fb',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a91d048483317e75723c7edf507011245',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::method_name()']]] +]; diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js new file mode 100644 index 00000000..59294cab --- /dev/null +++ b/docs/search/functions_9.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['on_5fwork_5ffinished_0',['on_work_finished',['../classagrpc_1_1_basic_grpc_executor.html#a727afeb6438fe94ec105085ee9e00d56',1,'agrpc::BasicGrpcExecutor']]], + ['on_5fwork_5fstarted_1',['on_work_started',['../classagrpc_1_1_basic_grpc_executor.html#ab2333c1d9f61b6469aeb6c84898e9a36',1,'agrpc::BasicGrpcExecutor']]], + ['operator_20bool_2',['operator bool',['../classagrpc_1_1_server_r_p_c_ptr.html#aca263693d2fba2ba7b8c5ed7a43a38a9',1,'agrpc::ServerRPCPtr']]], + ['operator_28_29_3',['operator()',['../structagrpc_1_1detail_1_1_notify_on_state_change_fn.html#a5c02ddea2000e4ce4c72bad24eafe221',1,'agrpc::detail::NotifyOnStateChangeFn::operator()()'],['../structagrpc_1_1detail_1_1_read_fn.html#a7edcb49289d5cd355c10ce3cf901e0a4',1,'agrpc::detail::ReadFn::operator()(agrpc::ServerRPC< RequestRPC, Traits, Executor > &rpc, typename agrpc::ServerRPC< RequestRPC, Traits, Executor >::Request &req, CompletionToken &&token=CompletionToken{}) const noexcept(noexcept(rpc.read(req, static_cast< CompletionToken && >(token))))'],['../structagrpc_1_1detail_1_1_read_fn.html#a7ab9e202fe6e4d6dc66e10c10db10d0f',1,'agrpc::detail::ReadFn::operator()(agrpc::ClientRPC< PrepareAsync, Executor > &rpc, typename agrpc::ClientRPC< PrepareAsync, Executor >::Response &response, CompletionToken &&token=CompletionToken{}) const noexcept(noexcept(rpc.read(response, static_cast< CompletionToken && >(token))))']]], + ['operator_2a_4',['operator*',['../classagrpc_1_1_server_r_p_c_ptr.html#a96ce1bc483099cd80a37ead302ee76c8',1,'agrpc::ServerRPCPtr::operator*() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#a662d487613723349a8cc1ad7d250482d',1,'agrpc::ServerRPCPtr::operator*() const noexcept']]], + ['operator_2d_3e_5',['operator->',['../classagrpc_1_1_server_r_p_c_ptr.html#afb74f4ac6254fbaddbea6a1d45b2cc71',1,'agrpc::ServerRPCPtr::operator->() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#abb8d870586f33095b19a9ac145476bc0',1,'agrpc::ServerRPCPtr::operator->() const noexcept']]] +]; diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js new file mode 100644 index 00000000..fe222037 --- /dev/null +++ b/docs/search/functions_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['poll_0',['poll',['../classagrpc_1_1_grpc_context.html#a4eb77d4c7fe553bc7b8aa7bc0c73fc22',1,'agrpc::GrpcContext::poll()'],['../structagrpc_1_1_default_run_traits.html#a158e1228fe8b77b46fceb4a76d3d47f6',1,'agrpc::DefaultRunTraits::poll()']]], + ['poll_5fcompletion_5fqueue_1',['poll_completion_queue',['../classagrpc_1_1_grpc_context.html#af35c5d430df1d778320a2fe51ec40102',1,'agrpc::GrpcContext']]], + ['post_2',['post',['../classagrpc_1_1_basic_grpc_executor.html#aa55121002e69f6da4d193e2438556519',1,'agrpc::BasicGrpcExecutor']]], + ['prefer_3',['prefer',['../classagrpc_1_1_basic_grpc_executor.html#ada9763f836d7e1af44a67ce09c8d6522',1,'agrpc::BasicGrpcExecutor::prefer(asio::execution::relationship_t::fork_t) const noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#af81aa8e1195243f012aeab6f83653015',1,'agrpc::BasicGrpcExecutor::prefer(asio::execution::relationship_t::continuation_t) const noexcept']]], + ['process_5fgrpc_5ftag_4',['process_grpc_tag',['../namespaceagrpc.html#accc81e3886098f4472dbe3e528594e3e',1,'agrpc']]] +]; diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js new file mode 100644 index 00000000..7c361bad --- /dev/null +++ b/docs/search/functions_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['query_0',['query',['../classagrpc_1_1_basic_grpc_executor.html#a6f12911ba642e59b224357f68a2abb51',1,'agrpc::BasicGrpcExecutor::query(asio::execution::blocking_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#ab26ea9b4a7825f78147c43ea084b2ff3',1,'agrpc::BasicGrpcExecutor::query(asio::execution::mapping_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a41de4c176cc36e18949f590323cfbae1',1,'agrpc::BasicGrpcExecutor::query(asio::execution::context_t) const noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a93ee7e38b61436d95c48f32ea978967d',1,'agrpc::BasicGrpcExecutor::query(asio::execution::relationship_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a562182f5842ccd6c52e5cf6b8c4a24d0',1,'agrpc::BasicGrpcExecutor::query(asio::execution::outstanding_work_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a3864da8461ae1579a14bb20af274d8c5',1,'agrpc::BasicGrpcExecutor::query(asio::execution::allocator_t< OtherAllocator >) const noexcept']]] +]; diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js new file mode 100644 index 00000000..175c6068 --- /dev/null +++ b/docs/search/functions_c.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['read_0',['read',['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a05dbadc3c83ae568f787023074d91423',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::read()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ad3830bd5b441d8b80c2a5dd33ae8ad2d',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a720d458d8ef3d94744ac11b1c761c207',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::read()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a150a96890cdc34ca0ea8980ee33df2ec',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::read()']]], + ['read_5finitial_5fmetadata_1',['read_initial_metadata',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a8de4c2a086f185be57765c0be380ca1b',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::read_initial_metadata()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#afb6a4be476b5cab862000ba87b70e289',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read_initial_metadata()'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a1f3342f57017775ec75f7f3317949b05',1,'agrpc::detail::ClientRPCBase::read_initial_metadata()']]], + ['register_5fawaitable_5frpc_5fhandler_2',['register_awaitable_rpc_handler',['../namespaceagrpc.html#ae09f3bd4a00ce92682d30395d1fba52f',1,'agrpc::register_awaitable_rpc_handler(const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})'],['../namespaceagrpc.html#a015eb1af78b29c2018f3635eb278ed0b',1,'agrpc::register_awaitable_rpc_handler(agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]], + ['register_5fcallback_5frpc_5fhandler_3',['register_callback_rpc_handler',['../namespaceagrpc.html#af2906310868898bd1069a922018033e5',1,'agrpc::register_callback_rpc_handler(const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})'],['../namespaceagrpc.html#a634945a9677aa2bb36b92252f3c854bf',1,'agrpc::register_callback_rpc_handler(agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]], + ['register_5fcoroutine_5frpc_5fhandler_4',['register_coroutine_rpc_handler',['../namespaceagrpc.html#a48edf641c6b8226ceebbd47688c6d369',1,'agrpc::register_coroutine_rpc_handler(const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})'],['../namespaceagrpc.html#a0fbe3a13a97f8f4de19a290ffaee43cb',1,'agrpc::register_coroutine_rpc_handler(agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]], + ['register_5fsender_5frpc_5fhandler_5',['register_sender_rpc_handler',['../namespaceagrpc.html#a595fc0d5c217d3d94d6d1dd230c09c39',1,'agrpc']]], + ['register_5fyield_5frpc_5fhandler_6',['register_yield_rpc_handler',['../namespaceagrpc.html#ac51d4bae04909dc6624b34e8931f4a6f',1,'agrpc::register_yield_rpc_handler(const typename ServerRPC::executor_type &executor, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token=CompletionToken{})'],['../namespaceagrpc.html#ac296ea567f88e9ccd85642736dcba97a',1,'agrpc::register_yield_rpc_handler(agrpc::GrpcContext &grpc_context, detail::ServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]], + ['request_7',['request',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a53680b344c2176c7ddd5fd97e331517a',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request(agrpc::GrpcContext &grpc_context, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#adc02ff48c51bd547e52fe0b69f671dc2',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request(const Executor &executor, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#ad2344b88476b5a2c07448939c9edabcb',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::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{})'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a71bc3a05a7738b9b87bc4ad657f189e0',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::request(const Executor &executor, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_server_r_p_c_ptr.html#a75171d6a69414d78fd8080a762831ec0',1,'agrpc::ServerRPCPtr::request() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#a7fc9aa2fff351417c0e2ba60c5b654a7',1,'agrpc::ServerRPCPtr::request() const noexcept']]], + ['require_8',['require',['../classagrpc_1_1_basic_grpc_executor.html#a9fc995acce9263dbce34dcdfc76bcb75',1,'agrpc::BasicGrpcExecutor::require(asio::execution::blocking_t::possibly_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, false)>'],['../classagrpc_1_1_basic_grpc_executor.html#ad7c8d60173fb17ccb20df74eba49c23a',1,'agrpc::BasicGrpcExecutor::require(asio::execution::blocking_t::never_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, true)>'],['../classagrpc_1_1_basic_grpc_executor.html#ab78813d4863b8e8175875dc9508db97f',1,'agrpc::BasicGrpcExecutor::require(asio::execution::outstanding_work_t::tracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, true)>'],['../classagrpc_1_1_basic_grpc_executor.html#a28a91c9fa313c1e764f036c4484611b2',1,'agrpc::BasicGrpcExecutor::require(asio::execution::outstanding_work_t::untracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, false)>'],['../classagrpc_1_1_basic_grpc_executor.html#a92d82315cfce4d130c7b001a9a2f86e3',1,'agrpc::BasicGrpcExecutor::require(asio::execution::allocator_t< OtherAllocator > other_allocator) const noexcept -> agrpc::BasicGrpcExecutor< OtherAllocator, Options >'],['../classagrpc_1_1_basic_grpc_executor.html#a127e4d664d638ed7c6faf8e011108072',1,'agrpc::BasicGrpcExecutor::require(asio::execution::allocator_t< void >) const noexcept -> agrpc::BasicGrpcExecutor< std::allocator< void >, Options >']]], + ['reset_9',['reset',['../classagrpc_1_1_grpc_context.html#a9da2b2b94e92a9d46e1309209002784b',1,'agrpc::GrpcContext']]], + ['run_10',['run',['../classagrpc_1_1_grpc_context.html#acb1dae170b054aba4c83e266c456fee0',1,'agrpc::GrpcContext::run()'],['../namespaceagrpc.html#ab52a5b6f6ce90d1bc9faa5baa96a39fa',1,'agrpc::run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)'],['../namespaceagrpc.html#a075e15728ee3eac5531f3202cfaf6c38',1,'agrpc::run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)']]], + ['run_5fcompletion_5fqueue_11',['run_completion_queue',['../classagrpc_1_1_grpc_context.html#a627dcc6bc3401d204d976b6fea6e00a3',1,'agrpc::GrpcContext::run_completion_queue()'],['../namespaceagrpc.html#a7c08e9c2d581c89024ba71489fc5aaf3',1,'agrpc::run_completion_queue(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)'],['../namespaceagrpc.html#a32f6562885c161c318d08f83e48468e8',1,'agrpc::run_completion_queue(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)']]], + ['run_5ffor_12',['run_for',['../structagrpc_1_1_default_run_traits.html#a8452413588990f52725f10b20a2ebadd',1,'agrpc::DefaultRunTraits']]], + ['run_5funtil_13',['run_until',['../classagrpc_1_1_grpc_context.html#af6615f2abd46956145dcfe88e69f4004',1,'agrpc::GrpcContext']]], + ['run_5fwhile_14',['run_while',['../classagrpc_1_1_grpc_context.html#a21dc3e81f8d5c11969add93a7a24e363',1,'agrpc::GrpcContext']]], + ['running_5fin_5fthis_5fthread_15',['running_in_this_thread',['../classagrpc_1_1_basic_grpc_executor.html#aa88fb5798dd945616262dc58258f48ec',1,'agrpc::BasicGrpcExecutor']]] +]; diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js new file mode 100644 index 00000000..42461dbb --- /dev/null +++ b/docs/search/functions_d.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['schedule_0',['schedule',['../classagrpc_1_1_basic_grpc_executor.html#ade38414f479671b271f191f3ee458408',1,'agrpc::BasicGrpcExecutor']]], + ['send_5finitial_5fmetadata_1',['send_initial_metadata',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html#a2476f3477572b896d89f6ac21cb59928',1,'agrpc::detail::ServerRPCBase']]], + ['serverrpc_2',['ServerRPC',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a86a399b203ead3c545179330c6c88c5d',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a698de8d72aa58e56b689869cb36906e9',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#af44544ec93a0e434636e08f9b15e0517',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a5b78d65f5628c9eaf4a521399a7ab0ba',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a15af4c2269b9cfd9416855cc5fe755a2',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::ServerRPC()']]], + ['serverrpcptr_3',['ServerRPCPtr',['../classagrpc_1_1_server_r_p_c_ptr.html#af9bd970c0f19dbee72d07924a733ef08',1,'agrpc::ServerRPCPtr']]], + ['service_5fname_4',['service_name',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0d95b3e778fd04576727a180ced2ad49',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::service_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#ae2e44ea56d1c15036646e906939fbb11',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::service_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#aeb82d28bcdb03ae6f757fe3574124b3f',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::service_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a07458f85b4281c361b16f652b6cda493',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aa7bb65e6fc755d0f701fefd18fc59ba7',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#acd6a9daff41e97b6fa89e3d3960004cf',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a6057033b1bfcbc06250a742229fe2357',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ab0c6dea77cb83891df6a5be872075877',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::service_name()']]], + ['setservingstatus_5',['SetServingStatus',['../classagrpc_1_1_health_check_service.html#a38397dcd756e5356973bddabe68b8ef7',1,'agrpc::HealthCheckService::SetServingStatus(const std::string &service_name, bool serving)'],['../classagrpc_1_1_health_check_service.html#a326d63fafa352ab8b2457545c46c5a34',1,'agrpc::HealthCheckService::SetServingStatus(bool serving)']]], + ['shutdown_6',['Shutdown',['../classagrpc_1_1_health_check_service.html#aa48421a22334257415189455ce4200b7',1,'agrpc::HealthCheckService']]], + ['start_7',['start',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0cc8fb2b4fdbc30dfaa214b7faa16828',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a1ec544b72d885bd8997f071c48136862',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#af645e0dead95e4949f84971426536ed0',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::start()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac2a6ff58092fb44d7af8371f3e5835df',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#aa30e41480cbb07e971de447834423cdd',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ae6c73a1a9effe4787d9581cd620dad31',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::start()']]], + ['start_5fhealth_5fcheck_5fservice_8',['start_health_check_service',['../classagrpc_1_1_health_check_service.html#a7a1da8eae5be01bec3a8f6a8be75932f',1,'agrpc::HealthCheckService::start_health_check_service(agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1_health_check_service.html#a55f352e270845728106e5dd3da20e668',1,'agrpc::HealthCheckService::start_health_check_service(grpc::Server &server, agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1_health_check_service.html#a7a1da8eae5be01bec3a8f6a8be75932f',1,'agrpc::start_health_check_service(agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1_health_check_service.html#a55f352e270845728106e5dd3da20e668',1,'agrpc::start_health_check_service(grpc::Server &server, agrpc::GrpcContext &grpc_context)']]], + ['stop_9',['stop',['../classagrpc_1_1_grpc_context.html#aee29d403f03ef487d22efdf2079c46bc',1,'agrpc::GrpcContext']]] +]; diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js new file mode 100644 index 00000000..8f6be48b --- /dev/null +++ b/docs/search/functions_e.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['wait_0',['wait',['../classagrpc_1_1_basic_alarm.html#a1871721d802eb738999ba0628846ed82',1,'agrpc::BasicAlarm::wait(const Deadline &deadline, CompletionToken &&token=CompletionToken{}) &'],['../classagrpc_1_1_basic_alarm.html#a8d721ba08b4b170732dc8bea1580e61f',1,'agrpc::BasicAlarm::wait(const Deadline &deadline, CompletionToken &&token=CompletionToken{}) &&'],['../classagrpc_1_1_waiter.html#af5b5c1cd30d2d6d710b216df98c5b3ec',1,'agrpc::Waiter::wait()']]], + ['wait_5ffor_5fdone_1',['wait_for_done',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a8ac96d7413a2fd8465136d9815acca24',1,'agrpc::detail::ServerRPCNotifyWhenDoneMixin']]], + ['waiter_2',['Waiter',['../classagrpc_1_1_waiter.html#afd9e6e03d3e0f9da901a976b110a58a0',1,'agrpc::Waiter']]], + ['work_5ffinished_3',['work_finished',['../classagrpc_1_1_grpc_context.html#a9f89631518b2d38dbe0be11f7d5a4cc6',1,'agrpc::GrpcContext']]], + ['work_5fstarted_4',['work_started',['../classagrpc_1_1_grpc_context.html#ada19710c265c3a1e9cbffb696d079fbb',1,'agrpc::GrpcContext']]], + ['write_5',['write',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a6fe42f409cebf57fbbf1faeedfc5dbdd',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a8ae746c9baa2aadd2a7a9cbd0a94d365',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write(const RequestT &request, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a613e43b75d508d451dac44e474256bf8',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a7617653d30c2f57cdaeffcefed89793f',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write(const RequestT &request, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#afabeae4521f21d32c3818aba6bc86b95',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a1a44c44a2233463244d0c520067631af',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write(const ResponseT &response, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a078d5b4d7735cb5557cdeadb52fd8c02',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a24a943e21a084ebb38c1e3f42810d145',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write(const ResponseT &response, CompletionToken &&token=CompletionToken{})']]], + ['write_5fand_5ffinish_6',['write_and_finish',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#af23fd4f5cd3520638508859955422fd3',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a27712fdf010df228fa4fba90874b93ee',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#adeecd7e5bda6de28ad8e09933c8cd8b8',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=CompletionToken{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a333763a4595ed96f57915d8ba8c747d5',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=CompletionToken{})']]], + ['writes_5fdone_7',['writes_done',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a2d19b1441bd69861873989f76f5875e2',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >']]] +]; diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js new file mode 100644 index 00000000..111c8849 --- /dev/null +++ b/docs/search/functions_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_7egrpccontext_0',['~GrpcContext',['../classagrpc_1_1_grpc_context.html#ad54076bc77ee6db3f167b2ad073db171',1,'agrpc::GrpcContext']]], + ['_7ewaiter_1',['~Waiter',['../classagrpc_1_1_waiter.html#aa5ee9bb346765753e2a1087b3e2e3a3f',1,'agrpc::Waiter']]] +]; diff --git a/docs/search/mag.svg b/docs/search/mag.svg new file mode 100644 index 00000000..ffb6cf0d --- /dev/null +++ b/docs/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/search/mag_d.svg b/docs/search/mag_d.svg new file mode 100644 index 00000000..4122773f --- /dev/null +++ b/docs/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/search/mag_sel.svg b/docs/search/mag_sel.svg new file mode 100644 index 00000000..553dba87 --- /dev/null +++ b/docs/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/search/mag_seld.svg b/docs/search/mag_seld.svg new file mode 100644 index 00000000..c906f84c --- /dev/null +++ b/docs/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/search/namespaces_0.js b/docs/search/namespaces_0.js new file mode 100644 index 00000000..668d7713 --- /dev/null +++ b/docs/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['agrpc_0',['agrpc',['../namespaceagrpc.html',1,'']]] +]; diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js new file mode 100644 index 00000000..3eca689a --- /dev/null +++ b/docs/search/pages_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['asio_20grpc_0',['asio-grpc',['../index.html',1,'']]], + ['asio_20io_5fcontext_1',['Using Asio io_context',['../md_doc_2using__asio__io__context.html',1,'']]] +]; diff --git a/docs/search/pages_1.js b/docs/search/pages_1.js new file mode 100644 index 00000000..059ee7db --- /dev/null +++ b/docs/search/pages_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['cheat_20sheet_0',['cheat sheet',['../md_doc_2client__rpc__cheat__sheet.html',1,'Client rpc cheat sheet'],['../md_doc_2server__rpc__cheat__sheet.html',1,'Server rpc cheat sheet']]], + ['client_20rpc_20cheat_20sheet_1',['Client rpc cheat sheet',['../md_doc_2client__rpc__cheat__sheet.html',1,'']]], + ['cmake_20protobuf_20generate_2',['CMake protobuf generate',['../md_doc_2cmake__protobuf__generate.html',1,'']]], + ['completion_20token_3',['Completion token',['../md_doc_2completion__token.html',1,'']]] +]; diff --git a/docs/search/pages_2.js b/docs/search/pages_2.js new file mode 100644 index 00000000..4e9db376 --- /dev/null +++ b/docs/search/pages_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['generate_0',['CMake protobuf generate',['../md_doc_2cmake__protobuf__generate.html',1,'']]], + ['grpc_1',['asio-grpc',['../index.html',1,'']]], + ['guide_2',['V3 migration guide',['../md_doc_2v3__migration.html',1,'']]] +]; diff --git a/docs/search/pages_3.js b/docs/search/pages_3.js new file mode 100644 index 00000000..b4acc562 --- /dev/null +++ b/docs/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['io_5fcontext_0',['Using Asio io_context',['../md_doc_2using__asio__io__context.html',1,'']]] +]; diff --git a/docs/search/pages_4.js b/docs/search/pages_4.js new file mode 100644 index 00000000..0f4a7dc4 --- /dev/null +++ b/docs/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['migration_20guide_0',['V3 migration guide',['../md_doc_2v3__migration.html',1,'']]] +]; diff --git a/docs/search/pages_5.js b/docs/search/pages_5.js new file mode 100644 index 00000000..a88e942a --- /dev/null +++ b/docs/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['protobuf_20generate_0',['CMake protobuf generate',['../md_doc_2cmake__protobuf__generate.html',1,'']]] +]; diff --git a/docs/search/pages_6.js b/docs/search/pages_6.js new file mode 100644 index 00000000..e580d1c1 --- /dev/null +++ b/docs/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rpc_20cheat_20sheet_0',['rpc cheat sheet',['../md_doc_2client__rpc__cheat__sheet.html',1,'Client rpc cheat sheet'],['../md_doc_2server__rpc__cheat__sheet.html',1,'Server rpc cheat sheet']]] +]; diff --git a/docs/search/pages_7.js b/docs/search/pages_7.js new file mode 100644 index 00000000..9bc2bab3 --- /dev/null +++ b/docs/search/pages_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['server_20rpc_20cheat_20sheet_0',['Server rpc cheat sheet',['../md_doc_2server__rpc__cheat__sheet.html',1,'']]], + ['sheet_1',['sheet',['../md_doc_2client__rpc__cheat__sheet.html',1,'Client rpc cheat sheet'],['../md_doc_2server__rpc__cheat__sheet.html',1,'Server rpc cheat sheet']]] +]; diff --git a/docs/search/pages_8.js b/docs/search/pages_8.js new file mode 100644 index 00000000..9a81c234 --- /dev/null +++ b/docs/search/pages_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['token_0',['Completion token',['../md_doc_2completion__token.html',1,'']]] +]; diff --git a/docs/search/pages_9.js b/docs/search/pages_9.js new file mode 100644 index 00000000..cbb81d46 --- /dev/null +++ b/docs/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['using_20asio_20io_5fcontext_0',['Using Asio io_context',['../md_doc_2using__asio__io__context.html',1,'']]] +]; diff --git a/docs/search/pages_a.js b/docs/search/pages_a.js new file mode 100644 index 00000000..c4c11c60 --- /dev/null +++ b/docs/search/pages_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['v3_20migration_20guide_0',['V3 migration guide',['../md_doc_2v3__migration.html',1,'']]] +]; diff --git a/docs/search/related_0.js b/docs/search/related_0.js new file mode 100644 index 00000000..7d75d2aa --- /dev/null +++ b/docs/search/related_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_21_3d_0',['operator!=',['../classagrpc_1_1_basic_grpc_executor.html#a59d940966a2cbccb0905db9c4fe23e09',1,'agrpc::BasicGrpcExecutor']]], + ['operator_3d_3d_1',['operator==',['../classagrpc_1_1_basic_grpc_executor.html#a47785162ab9282e1afe21ca8617142eb',1,'agrpc::BasicGrpcExecutor']]] +]; diff --git a/docs/search/related_1.js b/docs/search/related_1.js new file mode 100644 index 00000000..ce950967 --- /dev/null +++ b/docs/search/related_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['swap_0',['swap',['../classagrpc_1_1_server_r_p_c_ptr.html#a9dc4a96f02657009d5a1c27ff9c6a7fe',1,'agrpc::ServerRPCPtr']]] +]; diff --git a/docs/search/search.css b/docs/search/search.css new file mode 100644 index 00000000..ebbcc767 --- /dev/null +++ b/docs/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #2E9AFE; + background-color: #F3F9FE; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #004789; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #DDEEFE; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #DDEEFE; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #004F99; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #004F99; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/search/search.js b/docs/search/search.js new file mode 100644 index 00000000..666af01e --- /dev/null +++ b/docs/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html new file mode 100644 index 00000000..8cf47293 --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ClientRPC to another executor. + More...

    + +

    #include <agrpc/client_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ClientRPC<PrepareAsyncBidiStreaming, OtherExecutor>
     The ClientRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class StubT, class RequestT, class ResponseT, template< class, class > class ResponderT, detail::PrepareAsyncClientBidirectionalStreamingRequest< StubT, ResponderT< RequestT, ResponseT > > PrepareAsyncBidiStreaming, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor >

    Rebind the ClientRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.js new file mode 100644 index 00000000..7fe88202 --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor = +[ + [ "other", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html#a248da52a2c8146650d3ebbe6bfc5f92e", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor-members.html new file mode 100644 index 00000000..1fc2166f --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html new file mode 100644 index 00000000..c92a2a80 --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ClientRPC to another executor. + More...

    + +

    #include <agrpc/client_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ClientRPC<PrepareAsyncClientStreaming, OtherExecutor>
     The ClientRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor >

    Rebind the ClientRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.js new file mode 100644 index 00000000..323ad70f --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor = +[ + [ "other", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html#a0edf370762953c8f0f53eb49684b58d5", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html new file mode 100644 index 00000000..05989b63 --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ClientRPC to another executor. + More...

    + +

    #include <agrpc/client_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ClientRPC<agrpc::ClientRPCType::GENERIC_STREAMING, OtherExecutor>
     The ClientRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor >

    Rebind the ClientRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.js b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.js new file mode 100644 index 00000000..27f603af --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf = +[ + [ "other", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html#ab98619c4f65e33caceb25669bc87dec2", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_ne81143c17c5a63044adf078c6b30030f.html b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_ne81143c17c5a63044adf078c6b30030f.html new file mode 100644 index 00000000..3d1e579f --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_ne81143c17c5a63044adf078c6b30030f.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_0187d2cbfa5f93dde68dea00f284ab536b.html b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_0187d2cbfa5f93dde68dea00f284ab536b.html new file mode 100644 index 00000000..4ba6777b --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_0187d2cbfa5f93dde68dea00f284ab536b.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html new file mode 100644 index 00000000..605bd557 --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ClientRPC to another executor. + More...

    + +

    #include <agrpc/client_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ClientRPC<agrpc::ClientRPCType::GENERIC_UNARY, OtherExecutor>
     The ClientRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor >

    Rebind the ClientRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.js b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.js new file mode 100644 index 00000000..89d310f0 --- /dev/null +++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e = +[ + [ "other", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html#ab13e6fed14971fffed826aa80a635ba2", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_default_run_traits-members.html b/docs/structagrpc_1_1_default_run_traits-members.html new file mode 100644 index 00000000..42e60fd1 --- /dev/null +++ b/docs/structagrpc_1_1_default_run_traits-members.html @@ -0,0 +1,128 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::DefaultRunTraits Member List
    +
    +
    + +

    This is the complete list of members for agrpc::DefaultRunTraits, including all inherited members.

    + + + + + +
    is_stopped(ExecutionContext &execution_context)agrpc::DefaultRunTraitsinlinestatic
    MAX_LATENCYagrpc::DefaultRunTraitsstatic
    poll(ExecutionContext &execution_context)agrpc::DefaultRunTraitsinlinestatic
    run_for(ExecutionContext &execution_context, std::chrono::duration< Rep, Period > duration)agrpc::DefaultRunTraitsinlinestatic
    +
    + + + + diff --git a/docs/structagrpc_1_1_default_run_traits.html b/docs/structagrpc_1_1_default_run_traits.html new file mode 100644 index 00000000..cfcc9beb --- /dev/null +++ b/docs/structagrpc_1_1_default_run_traits.html @@ -0,0 +1,248 @@ + + + + + + + + +asio-grpc: agrpc::DefaultRunTraits Struct Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::DefaultRunTraits Struct Reference
    +
    +
    + +

    (experimental) Default run traits + More...

    + +

    #include <agrpc/run.hpp>

    + + + + + + + + + + + + + + +

    +Static Public Member Functions

    template<class ExecutionContext >
    static bool poll (ExecutionContext &execution_context)
     How to poll the execution context.
     
    template<class ExecutionContext , class Rep , class Period >
    static bool run_for (ExecutionContext &execution_context, std::chrono::duration< Rep, Period > duration)
     How to run the execution context for the specified duration.
     
    +template<class ExecutionContext >
    static bool is_stopped (ExecutionContext &execution_context)
     Has the execution context been stopped?
     
    + + + + +

    +Static Public Attributes

    static constexpr std::chrono::microseconds MAX_LATENCY {250}
     The desired maximum latency.
     
    +

    Detailed Description

    +

    (experimental) Default run traits

    +
    Since
    1.7.0
    +

    Member Function Documentation

    + +

    ◆ poll()

    + +
    +
    +
    +template<class ExecutionContext >
    + + + + + +
    + + + + + + + +
    static bool agrpc::DefaultRunTraits::poll (ExecutionContext & execution_context)
    +
    +inlinestatic
    +
    + +

    How to poll the execution context.

    +

    This function should let the execution context process some work without sleeping and return true if any work has been processed.

    + +
    +
    + +

    ◆ run_for()

    + +
    +
    +
    +template<class ExecutionContext , class Rep , class Period >
    + + + + + +
    + + + + + + + + + + + +
    static bool agrpc::DefaultRunTraits::run_for (ExecutionContext & execution_context,
    std::chrono::duration< Rep, Period > duration )
    +
    +inlinestatic
    +
    + +

    How to run the execution context for the specified duration.

    +

    This function should let the execution context process some work and sleep for at least duration. If any work has been processed then it should return true.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ MAX_LATENCY

    + +
    +
    + + + + + +
    + + + + +
    std::chrono::microseconds agrpc::DefaultRunTraits::MAX_LATENCY {250}
    +
    +staticconstexpr
    +
    + +

    The desired maximum latency.

    +

    The maximum latency between consecutive polls of the execution context.

    + +
    +
    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_default_run_traits.js b/docs/structagrpc_1_1_default_run_traits.js new file mode 100644 index 00000000..3c680af4 --- /dev/null +++ b/docs/structagrpc_1_1_default_run_traits.js @@ -0,0 +1,7 @@ +var structagrpc_1_1_default_run_traits = +[ + [ "poll", "structagrpc_1_1_default_run_traits.html#a158e1228fe8b77b46fceb4a76d3d47f6", null ], + [ "run_for", "structagrpc_1_1_default_run_traits.html#a8452413588990f52725f10b20a2ebadd", null ], + [ "is_stopped", "structagrpc_1_1_default_run_traits.html#a3af8439a70f60bd6536142948b28eb45", null ], + [ "MAX_LATENCY", "structagrpc_1_1_default_run_traits.html#ad40442c14867c39d6577a47cc0094c88", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_default_server_r_p_c_traits-members.html b/docs/structagrpc_1_1_default_server_r_p_c_traits-members.html new file mode 100644 index 00000000..84d303d7 --- /dev/null +++ b/docs/structagrpc_1_1_default_server_r_p_c_traits-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::DefaultServerRPCTraits Member List
    +
    +
    + +

    This is the complete list of members for agrpc::DefaultServerRPCTraits, including all inherited members.

    + + +
    NOTIFY_WHEN_DONEagrpc::DefaultServerRPCTraitsstatic
    +
    + + + + diff --git a/docs/structagrpc_1_1_default_server_r_p_c_traits.html b/docs/structagrpc_1_1_default_server_r_p_c_traits.html new file mode 100644 index 00000000..ca78f250 --- /dev/null +++ b/docs/structagrpc_1_1_default_server_r_p_c_traits.html @@ -0,0 +1,152 @@ + + + + + + + + +asio-grpc: agrpc::DefaultServerRPCTraits Struct Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::DefaultServerRPCTraits Struct Reference
    +
    +
    + +

    Default ServerRPC traits. + More...

    + +

    #include <agrpc/default_server_rpc_traits.hpp>

    + + + + + +

    +Static Public Attributes

    +static constexpr bool NOTIFY_WHEN_DONE = false
     Whether the ServerRPC should support wait_for_done
     
    +

    Detailed Description

    +

    Default ServerRPC traits.

    +

    Users that intend to customize ServerRPC traits should publicly inherit from this type to ensure forwards compatibility.

    +

    Example showing how to enable ServerRPC::wait_for_done():

    +
    +
    {
    +
    static constexpr bool NOTIFY_WHEN_DONE = true;
    +
    };
    +
    +
    template<auto RequestRPC>
    + +
    Primary ServerRPC template.
    Definition forward.hpp:76
    +
    Default ServerRPC traits.
    Definition default_server_rpc_traits.hpp:41
    +
    static constexpr bool NOTIFY_WHEN_DONE
    Whether the ServerRPC should support wait_for_done
    Definition default_server_rpc_traits.hpp:45
    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_default_server_r_p_c_traits.js b/docs/structagrpc_1_1_default_server_r_p_c_traits.js new file mode 100644 index 00000000..2f43e31e --- /dev/null +++ b/docs/structagrpc_1_1_default_server_r_p_c_traits.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_default_server_r_p_c_traits = +[ + [ "NOTIFY_WHEN_DONE", "structagrpc_1_1_default_server_r_p_c_traits.html#af818ce99f34e1259831fcf8b16fcd2a3", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html new file mode 100644 index 00000000..c89c2eb9 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html new file mode 100644 index 00000000..90d158e3 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ServerRPC to another executor. + More...

    + +

    #include <agrpc/server_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ServerRPC<RequestBidiStreaming, TraitsT, OtherExecutor>
     The ServerRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class ServiceT, class RequestT, class ResponseT, detail::ServerBidiStreamingRequest< ServiceT, RequestT, ResponseT > RequestBidiStreaming, class TraitsT, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >

    Rebind the ServerRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js new file mode 100644 index 00000000..8d42fb5d --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor = +[ + [ "other", "structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a8f560c37749519750a3fb26e8b245921", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html new file mode 100644 index 00000000..b6abd413 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html new file mode 100644 index 00000000..56cea51e --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ServerRPC to another executor. + More...

    + +

    #include <agrpc/server_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ServerRPC<RequestClientStreaming, TraitsT, OtherExecutor>
     The ServerRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class ServiceT, class RequestT, class ResponseT, detail::ServerClientStreamingRequest< ServiceT, RequestT, ResponseT > RequestClientStreaming, class TraitsT, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >

    Rebind the ServerRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js new file mode 100644 index 00000000..d66ecaf0 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor = +[ + [ "other", "structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a3f50e304010e7456c2327c851e1aba92", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html new file mode 100644 index 00000000..8786d0f5 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html new file mode 100644 index 00000000..a36d9552 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ServerRPC to another executor. + More...

    + +

    #include <agrpc/server_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ServerRPC<RequestServerStreaming, TraitsT, OtherExecutor>
     The ServerRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class ServiceT, class RequestT, class ResponseT, detail::ServerServerStreamingRequest< ServiceT, RequestT, ResponseT > RequestServerStreaming, class TraitsT, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >

    Rebind the ServerRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js new file mode 100644 index 00000000..4f27e947 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor = +[ + [ "other", "structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a673c4c3fbda3538d531d8daea9bf586a", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html new file mode 100644 index 00000000..b0edaee6 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html new file mode 100644 index 00000000..51b15d50 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ServerRPC to another executor. + More...

    + +

    #include <agrpc/server_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ServerRPC<RequestUnary, TraitsT, OtherExecutor>
     The ServerRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class ServiceT, class RequestT, class ResponseT, detail::ServerUnaryRequest< ServiceT, RequestT, ResponseT > RequestUnary, class TraitsT, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor >

    Rebind the ServerRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js new file mode 100644 index 00000000..344c574c --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor = +[ + [ "other", "structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a0f6b0162569c1c628129976c0bf7bfd4", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html new file mode 100644 index 00000000..7a7efef8 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ServerRPC to another executor. + More...

    + +

    #include <agrpc/server_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ServerRPC<agrpc::ServerRPCType::GENERIC, TraitsT, OtherExecutor>
     The ServerRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class TraitsT, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor >

    Rebind the ServerRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.js b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.js new file mode 100644 index 00000000..783fc3d0 --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4 = +[ + [ "other", "structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html#a88bd027aaa4c3eeec7b1a34baa4beca9", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_004581c31f0e089f98646a893ffa908c22.html b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_004581c31f0e089f98646a893ffa908c22.html new file mode 100644 index 00000000..ec14704b --- /dev/null +++ b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_004581c31f0e089f98646a893ffa908c22.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_use_sender-members.html b/docs/structagrpc_1_1_use_sender-members.html new file mode 100644 index 00000000..10aef6ea --- /dev/null +++ b/docs/structagrpc_1_1_use_sender-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::UseSender Member List
    +
    +
    + +

    This is the complete list of members for agrpc::UseSender, including all inherited members.

    + + +
    as_default_on_t typedefagrpc::UseSender
    +
    + + + + diff --git a/docs/structagrpc_1_1_use_sender.html b/docs/structagrpc_1_1_use_sender.html new file mode 100644 index 00000000..3e4b7bc1 --- /dev/null +++ b/docs/structagrpc_1_1_use_sender.html @@ -0,0 +1,175 @@ + + + + + + + + +asio-grpc: agrpc::UseSender Struct Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::UseSender Struct Reference
    +
    +
    + +

    Sender completion token. + More...

    + +

    #include <agrpc/use_sender.hpp>

    + + + + + + +

    +Public Types

    template<class T >
    using as_default_on_t
     Type alias to adapt an I/O object to use agrpc::UseSender as its default completion token type.
     
    +

    Detailed Description

    +

    Sender completion token.

    +

    This completion token causes functions in this library to return a sender. Particularly useful for libunifex where senders are also awaitable:

    +
    unifex::task<void> server_streaming_example(agrpc::GrpcContext& grpc_context, example::v1::Example::Stub& stub)
    +
    {
    + +
    grpc::ClientContext client_context;
    +
    RPC::Request request;
    +
    RPC rpc{grpc_context};
    +
    co_await rpc.start(stub, request, agrpc::use_sender);
    +
    RPC::Response response;
    +
    co_await rpc.read(response, agrpc::use_sender);
    +
    co_await rpc.finish(agrpc::use_sender);
    +
    }
    +

    Note when using libunifex or stdexec exclusively then agrpc::use_sender is already the default completion token.

    +

    Member Typedef Documentation

    + +

    ◆ as_default_on_t

    + +
    +
    +
    +template<class T >
    + + + + +
    using agrpc::UseSender::as_default_on_t
    +
    +Initial value:
    +
    typename T::template rebind_executor<detail::ExecutorWithDefault<UseSender, typename T::executor_type>>::other
    +
    +

    Type alias to adapt an I/O object to use agrpc::UseSender as its default completion token type.

    +

    Only applicable to I/O objects of this library.

    + +
    +
    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_use_sender.js b/docs/structagrpc_1_1_use_sender.js new file mode 100644 index 00000000..4502c674 --- /dev/null +++ b/docs/structagrpc_1_1_use_sender.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_use_sender = +[ + [ "as_default_on_t", "structagrpc_1_1_use_sender.html#a78ab5ead96e86416fd0ab76480d72139", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1_waiter_1_1rebind__executor-members.html b/docs/structagrpc_1_1_waiter_1_1rebind__executor-members.html new file mode 100644 index 00000000..10ad5d6a --- /dev/null +++ b/docs/structagrpc_1_1_waiter_1_1rebind__executor-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1_waiter_1_1rebind__executor.html b/docs/structagrpc_1_1_waiter_1_1rebind__executor.html new file mode 100644 index 00000000..3728814b --- /dev/null +++ b/docs/structagrpc_1_1_waiter_1_1rebind__executor.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the Waiter to another executor. + More...

    + +

    #include <agrpc/waiter.hpp>

    + + + + + +

    +Public Types

    +using other = Waiter<Signature, OtherExecutor>
     The Waiter type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class Signature, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor >

    Rebind the Waiter to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1_waiter_1_1rebind__executor.js b/docs/structagrpc_1_1_waiter_1_1rebind__executor.js new file mode 100644 index 00000000..ca377175 --- /dev/null +++ b/docs/structagrpc_1_1_waiter_1_1rebind__executor.js @@ -0,0 +1,4 @@ +var structagrpc_1_1_waiter_1_1rebind__executor = +[ + [ "other", "structagrpc_1_1_waiter_1_1rebind__executor.html#a16a3287aad9cb67fb0614d84184938ca", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming7f8c0c456bfb747ef86e02373e7d4f67.html b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming7f8c0c456bfb747ef86e02373e7d4f67.html new file mode 100644 index 00000000..01f7d2fc --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming7f8c0c456bfb747ef86e02373e7d4f67.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html new file mode 100644 index 00000000..1fb31119 --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ClientRPC to another executor. + More...

    + +

    #include <agrpc/client_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ClientRPC<PrepareAsyncServerStreaming, OtherExecutor>
     The ClientRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor >

    Rebind the ClientRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.js b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.js new file mode 100644 index 00000000..ba486fad --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.js @@ -0,0 +1,4 @@ +var structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120 = +[ + [ "other", "structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html#a3e3adceefc89a3dc2b981dbfa1d79265", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor-members.html new file mode 100644 index 00000000..a3c9c01b --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor > Member List
    +
    + +
    + + + + diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html new file mode 100644 index 00000000..3cc0a550 --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html @@ -0,0 +1,142 @@ + + + + + + + + +asio-grpc: agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor > Struct Template Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
    +
    +
    + +

    Rebind the ClientRPC to another executor. + More...

    + +

    #include <agrpc/client_rpc.hpp>

    + + + + + +

    +Public Types

    +using other = ClientRPC<PrepareAsyncUnary, OtherExecutor>
     The ClientRPC type when rebound to the specified executor.
     
    +

    Detailed Description

    +
    template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor>
    +template<class OtherExecutor>
    +struct agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor >

    Rebind the ClientRPC to another executor.

    +
    +
    + + + + diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.js new file mode 100644 index 00000000..a0a76bd3 --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.js @@ -0,0 +1,4 @@ +var structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor = +[ + [ "other", "structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html#a3082097ad16bc7190026b39ed646c966", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn-members.html b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn-members.html new file mode 100644 index 00000000..9049c70d --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn-members.html @@ -0,0 +1,125 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::detail::NotifyOnStateChangeFn Member List
    +
    +
    + +

    This is the complete list of members for agrpc::detail::NotifyOnStateChangeFn, including all inherited members.

    + + +
    operator()(agrpc::GrpcContext &grpc_context, grpc::ChannelInterface &channel, ::grpc_connectivity_state last_observed, Deadline deadline, CompletionToken &&token) const noexcept(detail::IS_USE_SENDER< CompletionToken > &&std::is_nothrow_copy_constructible_v< Deadline >)agrpc::detail::NotifyOnStateChangeFninline
    +
    + + + + diff --git a/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.html b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.html new file mode 100644 index 00000000..ce22894f --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.html @@ -0,0 +1,207 @@ + + + + + + + + +asio-grpc: agrpc::detail::NotifyOnStateChangeFn Struct Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::detail::NotifyOnStateChangeFn Struct Reference
    +
    +
    + +

    Function to set notification for a grpc::Channel state change. + More...

    + +

    #include <agrpc/notify_on_state_change.hpp>

    + + + + + + +

    +Public Member Functions

    template<class Deadline , class CompletionToken >
    auto operator() (agrpc::GrpcContext &grpc_context, grpc::ChannelInterface &channel, ::grpc_connectivity_state last_observed, Deadline deadline, CompletionToken &&token) const noexcept(detail::IS_USE_SENDER< CompletionToken > &&std::is_nothrow_copy_constructible_v< Deadline >)
     Set notification for a grpc::Channel state change.
     
    +

    Detailed Description

    +

    Function to set notification for a grpc::Channel state change.

    +

    Wait for the channel state to change or the specified deadline to expire.

    +

    Per-Operation Cancellation

    +

    None.

    +
    Since
    2.3.0
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    +
    +template<class Deadline , class CompletionToken >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    auto agrpc::detail::NotifyOnStateChangeFn::operator() (agrpc::GrpcContext & grpc_context,
    grpc::ChannelInterface & channel,
    ::grpc_connectivity_state last_observed,
    Deadline deadline,
    CompletionToken && token ) const
    +
    +inlinenoexcept
    +
    + +

    Set notification for a grpc::Channel state change.

    +

    Wait for the channel state to change or the specified deadline to expire.

    +

    Example:

    +
    const auto channel = grpc::CreateChannel(host, grpc::InsecureChannelCredentials());
    +
    const auto state = channel->GetState(true);
    +
    const auto deadline = std::chrono::system_clock::now() + std::chrono::seconds(5);
    +
    bool has_state_changed =
    +
    co_await agrpc::notify_on_state_change(grpc_context, *channel, state, deadline, asio::use_awaitable);
    +
    Parameters
    + + + +
    deadlineBy default gRPC supports two types of deadlines: gpr_timespec and std::chrono::system_clock::time_point. More types can be added by specializing grpc::TimePoint.
    tokenA completion token like asio::yield_context or agrpc::use_sender. The completion signature is void(bool). true if the state changed, false if the deadline expired.
    +
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.js b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.js new file mode 100644 index 00000000..8ee219a9 --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.js @@ -0,0 +1,4 @@ +var structagrpc_1_1detail_1_1_notify_on_state_change_fn = +[ + [ "operator()", "structagrpc_1_1detail_1_1_notify_on_state_change_fn.html#a5c02ddea2000e4ce4c72bad24eafe221", null ] +]; \ No newline at end of file diff --git a/docs/structagrpc_1_1detail_1_1_read_fn-members.html b/docs/structagrpc_1_1detail_1_1_read_fn-members.html new file mode 100644 index 00000000..1d46a68c --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_read_fn-members.html @@ -0,0 +1,126 @@ + + + + + + + + +asio-grpc: Member List + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    agrpc::detail::ReadFn Member List
    +
    +
    + +

    This is the complete list of members for agrpc::detail::ReadFn, including all inherited members.

    + + + +
    operator()(agrpc::ServerRPC< RequestRPC, Traits, Executor > &rpc, typename agrpc::ServerRPC< RequestRPC, Traits, Executor >::Request &req, CompletionToken &&token=CompletionToken{}) const noexcept(noexcept(rpc.read(req, static_cast< CompletionToken && >(token))))agrpc::detail::ReadFninline
    operator()(agrpc::ClientRPC< PrepareAsync, Executor > &rpc, typename agrpc::ClientRPC< PrepareAsync, Executor >::Response &response, CompletionToken &&token=CompletionToken{}) const noexcept(noexcept(rpc.read(response, static_cast< CompletionToken && >(token))))agrpc::detail::ReadFninline
    +
    + + + + diff --git a/docs/structagrpc_1_1detail_1_1_read_fn.html b/docs/structagrpc_1_1detail_1_1_read_fn.html new file mode 100644 index 00000000..ca3f1a4b --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_read_fn.html @@ -0,0 +1,225 @@ + + + + + + + + +asio-grpc: agrpc::detail::ReadFn Struct Reference + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    asio-grpc v3.2.1 +
    +
    Asynchronous gRPC with Asio/unified executors
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    agrpc::detail::ReadFn Struct Reference
    +
    +
    + +

    Server/ClientRPC.read in form of a function object. + More...

    + +

    #include <agrpc/read.hpp>

    + + + + + + + + + + +

    +Public Member Functions

    template<auto RequestRPC, class Traits , class Executor , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
    decltype(auto) operator() (agrpc::ServerRPC< RequestRPC, Traits, Executor > &rpc, typename agrpc::ServerRPC< RequestRPC, Traits, Executor >::Request &req, CompletionToken &&token=CompletionToken{}) const noexcept(noexcept(rpc.read(req, static_cast< CompletionToken && >(token))))
     Read from a ServerRPC.
     
    template<auto PrepareAsync, class Executor , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
    decltype(auto) operator() (agrpc::ClientRPC< PrepareAsync, Executor > &rpc, typename agrpc::ClientRPC< PrepareAsync, Executor >::Response &response, CompletionToken &&token=CompletionToken{}) const noexcept(noexcept(rpc.read(response, static_cast< CompletionToken && >(token))))
     Read from a Client.
     
    +

    Detailed Description

    +

    Server/ClientRPC.read in form of a function object.

    +

    Member Function Documentation

    + +

    ◆ operator()() [1/2]

    + +
    +
    +
    +template<auto RequestRPC, class Traits , class Executor , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
    + + + + + +
    + + + + + + + + + + + + + + + + +
    decltype(auto) agrpc::detail::ReadFn::operator() (agrpc::ServerRPC< RequestRPC, Traits, Executor > & rpc,
    typename agrpc::ServerRPC< RequestRPC, Traits, Executor >::Request & req,
    CompletionToken && token = CompletionToken{} ) const
    +
    +inlinenoexcept
    +
    + +

    Read from a ServerRPC.

    +

    Equivalent to performing rpc.read(req, token).

    +
    Since
    2.7.0
    + +
    +
    + +

    ◆ operator()() [2/2]

    + +
    +
    +
    +template<auto PrepareAsync, class Executor , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
    + + + + + +
    + + + + + + + + + + + + + + + + +
    decltype(auto) agrpc::detail::ReadFn::operator() (agrpc::ClientRPC< PrepareAsync, Executor > & rpc,
    typename agrpc::ClientRPC< PrepareAsync, Executor >::Response & response,
    CompletionToken && token = CompletionToken{} ) const
    +
    +inlinenoexcept
    +
    + +

    Read from a Client.

    +

    Equivalent to performing rpc.read(response, token).

    +
    Since
    2.7.0
    + +
    +
    +
    +
    + + + + diff --git a/docs/structagrpc_1_1detail_1_1_read_fn.js b/docs/structagrpc_1_1detail_1_1_read_fn.js new file mode 100644 index 00000000..13e50b17 --- /dev/null +++ b/docs/structagrpc_1_1detail_1_1_read_fn.js @@ -0,0 +1,5 @@ +var structagrpc_1_1detail_1_1_read_fn = +[ + [ "operator()", "structagrpc_1_1detail_1_1_read_fn.html#a7edcb49289d5cd355c10ce3cf901e0a4", null ], + [ "operator()", "structagrpc_1_1detail_1_1_read_fn.html#a7ab9e202fe6e4d6dc66e10c10db10d0f", null ] +]; \ No newline at end of file diff --git a/docs/sync_off.png b/docs/sync_off.png new file mode 100644 index 00000000..224ee1ee Binary files /dev/null and b/docs/sync_off.png differ diff --git a/docs/sync_on.png b/docs/sync_on.png new file mode 100644 index 00000000..c704bb74 Binary files /dev/null and b/docs/sync_on.png differ diff --git a/docs/tab_a.png b/docs/tab_a.png new file mode 100644 index 00000000..8200d145 Binary files /dev/null and b/docs/tab_a.png differ diff --git a/docs/tab_ad.png b/docs/tab_ad.png new file mode 100644 index 00000000..880241fc Binary files /dev/null and b/docs/tab_ad.png differ diff --git a/docs/tab_b.png b/docs/tab_b.png new file mode 100644 index 00000000..65e4a7c8 Binary files /dev/null and b/docs/tab_b.png differ diff --git a/docs/tab_bd.png b/docs/tab_bd.png new file mode 100644 index 00000000..589885cf Binary files /dev/null and b/docs/tab_bd.png differ diff --git a/docs/tab_h.png b/docs/tab_h.png new file mode 100644 index 00000000..f9ddf130 Binary files /dev/null and b/docs/tab_h.png differ diff --git a/docs/tab_hd.png b/docs/tab_hd.png new file mode 100644 index 00000000..0fd62f19 Binary files /dev/null and b/docs/tab_hd.png differ diff --git a/docs/tab_s.png b/docs/tab_s.png new file mode 100644 index 00000000..69bd9393 Binary files /dev/null and b/docs/tab_s.png differ diff --git a/docs/tab_sd.png b/docs/tab_sd.png new file mode 100644 index 00000000..b1a0f855 Binary files /dev/null and b/docs/tab_sd.png differ diff --git a/docs/tabs.css b/docs/tabs.css new file mode 100644 index 00000000..c18c68a0 --- /dev/null +++ b/docs/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#003C74;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#00274D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#00274D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}}