18 #ifndef GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_IMPL_H 19 #define GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_IMPL_H 23 #include <type_traits> 41 template <
class Request,
class Response>
43 template <
class Request,
class Response>
45 template <
class Request,
class Response>
56 template <
class Request,
class Response>
58 template <
class Request,
class Response>
60 template <
class Request,
class Response>
69 void MaybeCallOnCancel() {
70 if (
GPR_UNLIKELY(on_cancel_conditions_remaining_.fetch_sub(
71 1, std::memory_order_acq_rel) == 1)) {
76 std::atomic<intptr_t> on_cancel_conditions_remaining_{2};
79 template <
class Request,
class Response>
84 this->set_request(&request_obj_);
85 this->set_response(&response_obj_);
94 Response response_obj_;
99 namespace experimental {
102 template <
class Request,
class Response>
104 template <
class Request,
class Response>
106 template <
class Request,
class Response>
121 virtual void SendInitialMetadata(std::function<
void(
bool)>) = 0;
154 virtual void SetCancelCallback(std::function<
void()> callback) = 0;
155 virtual void ClearCancelCallback() = 0;
165 template <
class Request>
170 virtual void SendInitialMetadata() = 0;
171 virtual void Read(Request* msg) = 0;
174 template <
class Response>
176 reactor->InternalBindReader(
this);
180 template <
class Response>
186 virtual void SendInitialMetadata() = 0;
191 Write(msg, std::move(options));
192 Finish(std::move(s));
196 template <
class Request>
198 reactor->InternalBindWriter(
this);
202 template <
class Request,
class Response>
208 virtual void SendInitialMetadata() = 0;
209 virtual void Read(Request* msg) = 0;
214 Write(msg, std::move(options));
215 Finish(std::move(s));
220 reactor->InternalBindStream(
this);
235 template <
class Request,
class Response>
270 stream_->Write(resp, std::move(options));
288 stream_->WriteAndFinish(resp, std::move(options), std::move(s));
354 virtual void InternalBindStream(
363 template <
class Request,
class Response>
400 template <
class Request,
class Response>
411 writer_->Write(resp, std::move(options));
415 writer_->WriteAndFinish(resp, std::move(options), std::move(s));
451 template <
class Request,
class Response>
461 template <
class Request,
class Response>
471 template <
class Request,
class Response>
481 template <
class RequestType,
class ResponseType>
494 allocator_ = allocator;
500 auto* allocator_state =
static_cast< 502 param.internal_data);
505 param.call->call(),
sizeof(ServerCallbackRpcControllerImpl)))
506 ServerCallbackRpcControllerImpl(param.server_context, param.call,
508 std::move(param.call_requester));
514 controller->
response(), controller);
517 controller->Finish(status);
525 RequestType* request =
nullptr;
527 allocator_state =
nullptr;
528 if (allocator_ !=
nullptr) {
529 allocator_state = allocator_->AllocateMessages();
536 *handler_data = allocator_state;
537 request = allocator_state->
request();
559 class ServerCallbackRpcControllerImpl
563 finish_tag_.Set(call_.call(), [
this](bool) { MaybeDone(); },
565 if (!ctx_->sent_initial_metadata_) {
567 ctx_->initial_metadata_flags());
568 if (ctx_->compression_level_set()) {
569 finish_ops_.set_compression_level(ctx_->compression_level());
571 ctx_->sent_initial_metadata_ =
true;
575 finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_,
576 finish_ops_.SendMessagePtr(response()));
578 finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, s);
580 finish_ops_.set_core_cq_tag(&finish_tag_);
581 call_.PerformOps(&finish_ops_);
584 void SendInitialMetadata(std::function<
void(
bool)> f)
override {
586 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
589 meta_tag_.Set(call_.call(),
595 meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_,
596 ctx_->initial_metadata_flags());
597 if (ctx_->compression_level_set()) {
598 meta_ops_.set_compression_level(ctx_->compression_level());
600 ctx_->sent_initial_metadata_ =
true;
601 meta_ops_.set_core_cq_tag(&meta_tag_);
602 call_.PerformOps(&meta_ops_);
608 void SetCancelCallback(std::function<
void()> callback)
override {
609 ctx_->SetCancelCallback(std::move(callback));
612 void ClearCancelCallback()
override { ctx_->ClearCancelCallback(); }
615 return allocator_state_;
621 ServerCallbackRpcControllerImpl(
625 std::function<
void()> call_requester)
628 allocator_state_(allocator_state),
629 call_requester_(std::move(call_requester)) {
630 ctx_->BeginCompletionOp(call, [
this](
bool) { MaybeDone(); },
nullptr);
633 const RequestType* request() {
return allocator_state_->request(); }
634 ResponseType* response() {
return allocator_state_->response(); }
638 1, std::memory_order_acq_rel) == 1)) {
640 auto call_requester = std::move(call_requester_);
641 allocator_state_->Release();
642 this->~ServerCallbackRpcControllerImpl();
661 std::function<void()> call_requester_;
662 std::atomic<intptr_t> callbacks_outstanding_{
667 template <
class RequestType,
class ResponseType>
674 : func_(
std::move(func)) {}
686 if (reactor ==
nullptr) {
692 param.call->call(),
sizeof(ServerCallbackReaderImpl)))
693 ServerCallbackReaderImpl(param.server_context, param.call,
694 std::move(param.call_requester), reactor);
696 reader->BindReactor(reactor);
697 reactor->
OnStarted(param.server_context, reader->response());
699 reactor->MaybeCallOnCancel();
704 std::function<experimental::ServerReadReactor<RequestType, ResponseType>*()>
707 class ServerCallbackReaderImpl
711 finish_tag_.Set(call_.call(), [
this](bool) { MaybeDone(); },
713 if (!ctx_->sent_initial_metadata_) {
715 ctx_->initial_metadata_flags());
716 if (ctx_->compression_level_set()) {
717 finish_ops_.set_compression_level(ctx_->compression_level());
719 ctx_->sent_initial_metadata_ =
true;
723 finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_,
724 finish_ops_.SendMessagePtr(&resp_));
726 finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, s);
728 finish_ops_.set_core_cq_tag(&finish_tag_);
729 call_.PerformOps(&finish_ops_);
732 void SendInitialMetadata()
override {
734 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
735 meta_tag_.Set(call_.call(),
737 reactor_->OnSendInitialMetadataDone(ok);
741 meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_,
742 ctx_->initial_metadata_flags());
743 if (ctx_->compression_level_set()) {
744 meta_ops_.set_compression_level(ctx_->compression_level());
746 ctx_->sent_initial_metadata_ =
true;
747 meta_ops_.set_core_cq_tag(&meta_tag_);
748 call_.PerformOps(&meta_ops_);
751 void Read(RequestType* req)
override {
752 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
753 read_ops_.RecvMessage(req);
754 call_.PerformOps(&read_ops_);
760 ServerCallbackReaderImpl(
762 std::function<
void()> call_requester,
766 call_requester_(std::move(call_requester)),
768 ctx_->BeginCompletionOp(call, [
this](
bool) { MaybeDone(); }, reactor);
769 read_tag_.Set(call_.call(),
771 reactor_->OnReadDone(ok);
775 read_ops_.set_core_cq_tag(&read_tag_);
778 ~ServerCallbackReaderImpl() {}
780 ResponseType* response() {
return &resp_; }
784 1, std::memory_order_acq_rel) == 1)) {
787 auto call_requester = std::move(call_requester_);
788 this->~ServerCallbackReaderImpl();
809 std::function<void()> call_requester_;
811 std::atomic<intptr_t> callbacks_outstanding_{
816 template <
class RequestType,
class ResponseType>
823 : func_(
std::move(func)) {}
835 if (reactor ==
nullptr) {
841 param.call->call(),
sizeof(ServerCallbackWriterImpl)))
842 ServerCallbackWriterImpl(param.server_context, param.call,
843 static_cast<RequestType*>(param.request),
844 std::move(param.call_requester), reactor);
845 writer->BindReactor(reactor);
846 reactor->
OnStarted(param.server_context, writer->request());
848 reactor->MaybeCallOnCancel();
858 call,
sizeof(RequestType))) RequestType();
865 request->~RequestType();
870 std::function<experimental::ServerWriteReactor<RequestType, ResponseType>*()>
873 class ServerCallbackWriterImpl
877 finish_tag_.Set(call_.call(), [
this](bool) { MaybeDone(); },
879 finish_ops_.set_core_cq_tag(&finish_tag_);
881 if (!ctx_->sent_initial_metadata_) {
883 ctx_->initial_metadata_flags());
884 if (ctx_->compression_level_set()) {
885 finish_ops_.set_compression_level(ctx_->compression_level());
887 ctx_->sent_initial_metadata_ =
true;
889 finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, s);
890 call_.PerformOps(&finish_ops_);
893 void SendInitialMetadata()
override {
895 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
896 meta_tag_.Set(call_.call(),
898 reactor_->OnSendInitialMetadataDone(ok);
902 meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_,
903 ctx_->initial_metadata_flags());
904 if (ctx_->compression_level_set()) {
905 meta_ops_.set_compression_level(ctx_->compression_level());
907 ctx_->sent_initial_metadata_ =
true;
908 meta_ops_.set_core_cq_tag(&meta_tag_);
909 call_.PerformOps(&meta_ops_);
912 void Write(
const ResponseType* resp,
914 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
918 if (!ctx_->sent_initial_metadata_) {
919 write_ops_.SendInitialMetadata(&ctx_->initial_metadata_,
920 ctx_->initial_metadata_flags());
921 if (ctx_->compression_level_set()) {
922 write_ops_.set_compression_level(ctx_->compression_level());
924 ctx_->sent_initial_metadata_ =
true;
928 call_.PerformOps(&write_ops_);
939 Finish(std::move(s));
945 ServerCallbackWriterImpl(
947 const RequestType* req, std::function<
void()> call_requester,
952 call_requester_(std::move(call_requester)),
954 ctx_->BeginCompletionOp(call, [
this](
bool) { MaybeDone(); }, reactor);
955 write_tag_.Set(call_.call(),
957 reactor_->OnWriteDone(ok);
961 write_ops_.set_core_cq_tag(&write_tag_);
963 ~ServerCallbackWriterImpl() { req_->~RequestType(); }
965 const RequestType* request() {
return req_; }
969 1, std::memory_order_acq_rel) == 1)) {
972 auto call_requester = std::move(call_requester_);
973 this->~ServerCallbackWriterImpl();
988 grpc::internal::CallOpSendMessage>
994 const RequestType* req_;
995 std::function<void()> call_requester_;
997 std::atomic<intptr_t> callbacks_outstanding_{
1002 template <
class RequestType,
class ResponseType>
1009 : func_(
std::move(func)) {}
1020 if (reactor ==
nullptr) {
1026 param.call->call(),
sizeof(ServerCallbackReaderWriterImpl)))
1027 ServerCallbackReaderWriterImpl(param.server_context, param.call,
1028 std::move(param.call_requester),
1031 stream->BindReactor(reactor);
1032 reactor->
OnStarted(param.server_context);
1034 reactor->MaybeCallOnCancel();
1035 stream->MaybeDone();
1039 std::function<experimental::ServerBidiReactor<RequestType, ResponseType>*()>
1042 class ServerCallbackReaderWriterImpl
1047 finish_tag_.Set(call_.call(), [
this](bool) { MaybeDone(); },
1049 finish_ops_.set_core_cq_tag(&finish_tag_);
1051 if (!ctx_->sent_initial_metadata_) {
1053 ctx_->initial_metadata_flags());
1054 if (ctx_->compression_level_set()) {
1055 finish_ops_.set_compression_level(ctx_->compression_level());
1057 ctx_->sent_initial_metadata_ =
true;
1059 finish_ops_.ServerSendStatus(&ctx_->trailing_metadata_, s);
1060 call_.PerformOps(&finish_ops_);
1063 void SendInitialMetadata()
override {
1065 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
1066 meta_tag_.Set(call_.call(),
1068 reactor_->OnSendInitialMetadataDone(ok);
1072 meta_ops_.SendInitialMetadata(&ctx_->initial_metadata_,
1073 ctx_->initial_metadata_flags());
1074 if (ctx_->compression_level_set()) {
1075 meta_ops_.set_compression_level(ctx_->compression_level());
1077 ctx_->sent_initial_metadata_ =
true;
1078 meta_ops_.set_core_cq_tag(&meta_tag_);
1079 call_.PerformOps(&meta_ops_);
1082 void Write(
const ResponseType* resp,
1084 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
1088 if (!ctx_->sent_initial_metadata_) {
1089 write_ops_.SendInitialMetadata(&ctx_->initial_metadata_,
1090 ctx_->initial_metadata_flags());
1091 if (ctx_->compression_level_set()) {
1092 write_ops_.set_compression_level(ctx_->compression_level());
1094 ctx_->sent_initial_metadata_ =
true;
1098 call_.PerformOps(&write_ops_);
1108 Finish(std::move(s));
1111 void Read(RequestType* req)
override {
1112 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
1113 read_ops_.RecvMessage(req);
1114 call_.PerformOps(&read_ops_);
1120 ServerCallbackReaderWriterImpl(
1122 std::function<
void()> call_requester,
1126 call_requester_(std::move(call_requester)),
1128 ctx_->BeginCompletionOp(call, [
this](
bool) { MaybeDone(); }, reactor);
1129 write_tag_.Set(call_.call(),
1131 reactor_->OnWriteDone(ok);
1135 write_ops_.set_core_cq_tag(&write_tag_);
1136 read_tag_.Set(call_.call(),
1138 reactor_->OnReadDone(ok);
1142 read_ops_.set_core_cq_tag(&read_tag_);
1144 ~ServerCallbackReaderWriterImpl() {}
1148 1, std::memory_order_acq_rel) == 1)) {
1151 auto call_requester = std::move(call_requester_);
1152 this->~ServerCallbackReaderWriterImpl();
1167 grpc::internal::CallOpSendMessage>
1176 std::function<void()> call_requester_;
1178 std::atomic<intptr_t> callbacks_outstanding_{
1187 #endif // GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_IMPL_H ServerReadReactor is the interface for a client-streaming RPC.
Definition: server_callback_impl.h:103
struct grpc_call grpc_call
A Call represents an RPC.
Definition: grpc_types.h:70
void RunHandler(const HandlerParameter ¶m) final
Definition: server_callback_impl.h:497
void OnStarted(::grpc_impl::ServerContext *) override
Notify the application that a streaming RPC has started and that it is now ok to call any operation i...
Definition: server_callback_impl.h:476
void OnStarted(::grpc_impl::ServerContext *, Response *) override
Similar to ServerBidiReactor::OnStarted, except that this also provides the response object that the ...
Definition: server_callback_impl.h:456
void StartWrite(const Response *resp, ::grpc::WriteOptions options)
Initiate a write operation with specified options.
Definition: server_callback_impl.h:269
void StartRead(Request *req)
Initiate a read operation.
Definition: server_callback_impl.h:252
Definition: byte_buffer.h:38
virtual void WriteAndFinish(const Response *msg, ::grpc::WriteOptions options, ::grpc::Status s)
Definition: server_callback_impl.h:188
virtual ~ServerCallbackWriter()
Definition: server_callback_impl.h:183
void BindReactor(ServerReadReactor< Request, Response > *reactor)
Definition: server_callback_impl.h:175
virtual void OnStarted(::grpc_impl::ServerContext *)
Notify the application that a streaming RPC has started and that it is now ok to call any operation i...
Definition: server_callback_impl.h:317
WriteOptions & set_buffer_hint()
Sets flag indicating that the write may be buffered and need not go out on the wire immediately...
Definition: call_op_set.h:128
#define GPR_CODEGEN_ASSERT(x)
Codegen specific version of GPR_ASSERT.
Definition: core_codegen_interface.h:145
virtual void grpc_call_ref(grpc_call *call)=0
virtual void OnSendInitialMetadataDone(bool)
The following notifications are exactly like ServerBidiReactor.
Definition: server_callback_impl.h:383
virtual ~ServerCallbackReaderWriter()
Definition: server_callback_impl.h:205
ServerWriteReactor is the interface for a server-streaming RPC.
Definition: server_callback_impl.h:105
Definition: server_callback_impl.h:80
Definition: server_callback_impl.h:472
WriteOptions & set_last_message()
last-message bit: indicates this is the last message in a stream client-side: makes Write the equival...
Definition: call_op_set.h:167
void RunHandler(const HandlerParameter ¶m) final
Definition: server_callback_impl.h:675
void OnCancel() override
Notifies the application that this RPC has been cancelled.
Definition: server_callback_impl.h:348
void SetMessageAllocator(::grpc::experimental::MessageAllocator< RequestType, ResponseType > *allocator)
Definition: server_callback_impl.h:491
void StartSendInitialMetadata()
The following operation initiations are exactly like ServerBidiReactor.
Definition: server_callback_impl.h:406
virtual void OnWriteDone(bool)
Notifies the application that a StartWrite (or StartWriteLast) operation completed.
Definition: server_callback_impl.h:338
void * Deserialize(grpc_call *call, grpc_byte_buffer *req, ::grpc::Status *status, void **) final
Definition: server_callback_impl.h:852
virtual void grpc_call_unref(grpc_call *call)=0
Definition: server_callback_impl.h:181
Definition: server_callback_impl.h:203
Definition: async_unary_call_impl.h:302
void StartWrite(const Response *resp)
Initiate a write operation.
Definition: server_callback_impl.h:259
void Finish(::grpc::Status s)
Definition: server_callback_impl.h:420
void OnCancel() override
Definition: server_callback_impl.h:434
Definition: grpc_types.h:40
virtual void SendInitialMetadata()=0
void StartSendInitialMetadata()
The following operation initiations are exactly like ServerBidiReactor.
Definition: server_callback_impl.h:369
virtual void WriteAndFinish(const Response *msg, ::grpc::WriteOptions options, ::grpc::Status s)
Definition: server_callback_impl.h:211
grpc_call * call() const
Definition: call.h:72
void Finish(::grpc::Status s)
Definition: server_callback_impl.h:371
::grpc_impl::ServerContext ServerContext
Definition: server_context.h:25
A ServerContext allows the person implementing a service handler to:
Definition: server_context_impl.h:118
void OnDone() override
Definition: server_callback_impl.h:455
void StartWriteAndFinish(const Response *resp, ::grpc::WriteOptions options, ::grpc::Status s)
Initiate a write operation with specified options and final RPC Status, which also causes any trailin...
Definition: server_callback_impl.h:286
Definition: server_callback_impl.h:462
void BindReactor(ServerWriteReactor< Request, Response > *reactor)
Definition: server_callback_impl.h:197
void OnDone() override
Notifies the application that all operations associated with this RPC have completed.
Definition: server_callback_impl.h:475
virtual void OnSendInitialMetadataDone(bool)
Notifies the application that an explicit StartSendInitialMetadata operation completed.
Definition: server_callback_impl.h:325
void StartWrite(const Response *resp, ::grpc::WriteOptions options)
Definition: server_callback_impl.h:410
Defines how to serialize and deserialize some type.
Definition: serialization_traits.h:58
virtual ~ServerCallbackReader()
Definition: server_callback_impl.h:168
CallbackServerStreamingHandler(std::function< experimental::ServerWriteReactor< RequestType, ResponseType > *()> func)
Definition: server_callback_impl.h:819
void StartWriteLast(const Response *resp, ::grpc::WriteOptions options)
Inform system of a planned write operation with specified options, but allow the library to schedule ...
Definition: server_callback_impl.h:299
ResponseT * response()
Definition: message_allocator.h:47
Definition: call_op_set.h:633
RequestT * request()
Definition: message_allocator.h:46
CallbackBidiHandler(std::function< experimental::ServerBidiReactor< RequestType, ResponseType > *()> func)
Definition: server_callback_impl.h:1005
void StartRead(Request *req)
Definition: server_callback_impl.h:370
void RunHandler(const HandlerParameter ¶m) final
Definition: server_callback_impl.h:824
virtual void OnSendInitialMetadataDone(bool)
The following notifications are exactly like ServerBidiReactor.
Definition: server_callback_impl.h:431
void OnCancel() override
Definition: server_callback_impl.h:386
void StartSendInitialMetadata()
Do NOT call any operation initiation method (names that start with Start) until after the library has...
Definition: server_callback_impl.h:246
void Release()
Forget underlying byte buffer without destroying Use this only for un-owned byte buffers.
Definition: byte_buffer.h:151
Definition: call_op_set.h:292
Definition: server_callback_impl.h:111
void OnDone() override
Definition: server_callback_impl.h:385
virtual void OnReadDone(bool)
Definition: server_callback_impl.h:384
void BindReactor(ServerBidiReactor< Request, Response > *reactor)
Definition: server_callback_impl.h:219
Definition: server_callback_impl.h:166
virtual void OnWriteDone(bool)
Definition: server_callback_impl.h:432
Definition: byte_buffer.h:36
CoreCodegenInterface * g_core_codegen_interface
Definition: completion_queue_impl.h:91
virtual void SendInitialMetadata()=0
Definition: message_allocator.h:40
void StartWriteLast(const Response *resp, ::grpc::WriteOptions options)
Definition: server_callback_impl.h:417
ReturnType * CatchingReactorCreator(Func &&func, Args &&... args)
Definition: callback_common.h:51
Definition: rpc_service_method.h:44
DefaultMessageHolder()
Definition: server_callback_impl.h:83
Per-message write options.
Definition: call_op_set.h:85
void OnDone() override
Notifies the application that all operations associated with this RPC have completed.
Definition: server_callback_impl.h:343
void OnDone() override
Definition: server_callback_impl.h:433
CallbackUnaryHandler(std::function< void(::grpc_impl::ServerContext *, const RequestType *, ResponseType *, experimental::ServerCallbackRpcController *)> func)
Definition: server_callback_impl.h:484
virtual void OnReadDone(bool)
Notifies the application that a StartRead operation completed.
Definition: server_callback_impl.h:331
An Alarm posts the user-provided tag to its associated completion queue or invokes the user-provided ...
Definition: alarm_impl.h:33
Definition: server_callback_impl.h:46
void Finish(::grpc::Status s)
Indicate that the stream is to be finished and the trailing metadata and RPC status are to be sent...
Definition: server_callback_impl.h:309
virtual ~ServerReactor()=default
virtual void * grpc_call_arena_alloc(grpc_call *call, size_t length)=0
void Release() override
Definition: server_callback_impl.h:87
CallbackWithSuccessTag can be reused multiple times, and will be used in this fashion for streaming o...
Definition: callback_common.h:132
bool ok() const
Is the status OK?
Definition: status.h:118
Base class for running an RPC handler.
Definition: rpc_service_method.h:41
void StartWrite(const Response *resp)
Definition: server_callback_impl.h:407
void * Deserialize(grpc_call *call, grpc_byte_buffer *req, ::grpc::Status *status, void **handler_data) final
Definition: server_callback_impl.h:521
Did it work? If it didn't, why?
Definition: status.h:31
Operation is not implemented or not supported/enabled in this service.
Definition: status_code_enum.h:115
void CatchingCallback(Func &&func, Args &&... args)
An exception-safe way of invoking a user-specified callback function.
Definition: callback_common.h:38
void OnDone() override
Definition: server_callback_impl.h:465
Definition: message_allocator.h:27
bool is_last_message() const
Get value for the flag indicating that this is the last message, and should be coalesced with trailin...
Definition: call_op_set.h:192
virtual void SendInitialMetadata(std::function< void(bool)>)=0
Definition: server_callback_impl.h:42
virtual void OnStarted(::grpc_impl::ServerContext *, const Request *)
Similar to ServerBidiReactor::OnStarted, except that this also provides the request object sent by th...
Definition: server_callback_impl.h:427
void RunHandler(const HandlerParameter ¶m) final
Definition: server_callback_impl.h:1010
CallbackClientStreamingHandler(std::function< experimental::ServerReadReactor< RequestType, ResponseType > *()> func)
Definition: server_callback_impl.h:670
Definition: server_callback_impl.h:48
void StartWriteAndFinish(const Response *resp, ::grpc::WriteOptions options, ::grpc::Status s)
Definition: server_callback_impl.h:413
void OnStarted(::grpc_impl::ServerContext *, const Request *) override
Similar to ServerBidiReactor::OnStarted, except that this also provides the request object sent by th...
Definition: server_callback_impl.h:466
A sequence of bytes.
Definition: byte_buffer.h:72
ServerBidiReactor is the interface for a bidirectional streaming RPC.
Definition: server_callback_impl.h:107
virtual void OnStarted(::grpc_impl::ServerContext *, Response *)
Similar to ServerBidiReactor::OnStarted, except that this also provides the response object that the ...
Definition: server_callback_impl.h:379
virtual void OnCancel()=0
Definition: server_callback_impl.h:452
Straightforward wrapping of the C call object.
Definition: call.h:38
virtual void SendInitialMetadata()=0