Go to the documentation of this file.
19 #ifndef GRPCPP_SUPPORT_CLIENT_CALLBACK_H
20 #define GRPCPP_SUPPORT_CLIENT_CALLBACK_H
36 #include <type_traits>
39 #include "absl/log/absl_check.h"
54 template <
class InputMessage,
class OutputMessage,
55 class BaseInputMessage = InputMessage,
56 class BaseOutputMessage = OutputMessage>
60 const InputMessage* request, OutputMessage* result,
62 static_assert(std::is_base_of<BaseInputMessage, InputMessage>::value,
63 "Invalid input message specification");
64 static_assert(std::is_base_of<BaseOutputMessage, OutputMessage>::value,
65 "Invalid output message specification");
67 channel, method, context, request, result, std::move(on_completion));
70 template <
class InputMessage,
class OutputMessage>
71 class CallbackUnaryCallImpl {
76 const InputMessage* request, OutputMessage* result,
79 ABSL_CHECK_NE(cq,
nullptr);
94 const size_t alloc_sz =
sizeof(OpSetAndTag);
97 auto* ops =
new (&alloced->opset) FullCallOpSet;
99 call.
call(), std::move(on_completion), ops);
107 ops->SendInitialMetadata(&context->send_initial_metadata_,
108 context->initial_metadata_flags());
109 ops->RecvInitialMetadata(context);
110 ops->RecvMessage(result);
111 ops->AllowNoMessage();
112 ops->ClientSendClose();
113 ops->ClientRecvStatus(context, tag->status_ptr());
114 ops->set_core_cq_tag(tag);
145 namespace experimental {
146 template <
class RequestType,
class ResponseType>
154 template <
class Request,
class Response>
156 template <
class Response>
158 template <
class Request>
165 template <
class Request,
class Response>
172 virtual void Read(Response* resp) = 0;
173 virtual void AddHold(
int holds) = 0;
178 reactor->BindStream(
this);
182 template <
class Response>
187 virtual void Read(Response* resp) = 0;
188 virtual void AddHold(
int holds) = 0;
193 reactor->BindReader(
this);
197 template <
class Request>
209 virtual void AddHold(
int holds) = 0;
214 reactor->BindWriter(
this);
227 namespace experimental {
254 template <
class Request,
class Response>
255 class ClientBidiReactor :
public internal::ClientReactor {
285 stream_->Write(req, options);
332 ABSL_DCHECK_GT(holds, 0);
333 stream_->AddHold(holds);
391 template <
class Response>
392 class ClientReadReactor :
public internal::ClientReactor {
399 ABSL_DCHECK_GT(holds, 0);
400 reader_->AddHold(holds);
416 template <
class Request>
417 class ClientWriteReactor :
public internal::ClientReactor {
422 writer_->Write(req, options);
431 ABSL_DCHECK_GT(holds, 0);
432 writer_->AddHold(holds);
473 reactor->BindCall(
this);
476 namespace experimental {
495 reactor->BindCall(
this);
502 template <
class Request,
class Response>
503 class ClientCallbackReaderWriterFactory;
504 template <
class Response>
505 class ClientCallbackReaderFactory;
506 template <
class Request>
507 class ClientCallbackWriterFactory;
509 template <
class Request,
class Response>
510 class ClientCallbackReaderWriterImpl
514 static void operator delete(
void* , std::size_t size) {
523 static void operator delete(
void*,
void*) { ABSL_CHECK(
false); }
525 void StartCall() ABSL_LOCKS_EXCLUDED(start_mu_)
override {
531 if (!start_corked_) {
532 start_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
533 context_->initial_metadata_flags());
541 if (backlog_.read_ops) {
544 if (backlog_.write_ops) {
547 if (backlog_.writes_done_ops) {
548 writes_done_ops_.
FillOps(&call_);
553 started_.store(
true, std::memory_order_release);
558 this->MaybeFinish(
false);
561 void Read(Response* msg)
override {
562 read_ops_.RecvMessage(msg);
563 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
564 if (
GPR_UNLIKELY(!started_.load(std::memory_order_acquire))) {
566 if (
GPR_LIKELY(!started_.load(std::memory_order_relaxed))) {
567 backlog_.read_ops =
true;
575 ABSL_LOCKS_EXCLUDED(start_mu_)
override {
576 if (options.is_last_message()) {
577 options.set_buffer_hint();
578 write_ops_.ClientSendClose();
585 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
587 write_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
588 context_->initial_metadata_flags());
589 corked_write_needed_ =
false;
592 if (
GPR_UNLIKELY(!started_.load(std::memory_order_acquire))) {
594 if (
GPR_LIKELY(!started_.load(std::memory_order_relaxed))) {
595 backlog_.write_ops =
true;
602 writes_done_ops_.ClientSendClose();
603 writes_done_tag_.
Set(
606 reactor_->OnWritesDoneDone(ok);
609 &writes_done_ops_,
false);
611 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
613 writes_done_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
614 context_->initial_metadata_flags());
615 corked_write_needed_ =
false;
617 if (
GPR_UNLIKELY(!started_.load(std::memory_order_acquire))) {
619 if (
GPR_LIKELY(!started_.load(std::memory_order_relaxed))) {
620 backlog_.writes_done_ops =
true;
624 writes_done_ops_.
FillOps(&call_);
628 callbacks_outstanding_.fetch_add(holds, std::memory_order_relaxed);
643 start_corked_(context_->initial_metadata_corked_),
644 corked_write_needed_(start_corked_) {
645 this->BindReactor(reactor);
651 reactor_->OnReadInitialMetadataDone(
652 ok && !reactor_->InternalTrailersOnly(call_.call()));
656 start_ops_.RecvInitialMetadata(context_);
662 reactor_->OnWriteDone(ok);
671 reactor_->OnReadDone(ok);
680 [
this](
bool ) { MaybeFinish(true); },
683 finish_ops_.ClientRecvStatus(context_, &finish_status_);
693 void MaybeFinish(
bool from_reaction) {
695 1, std::memory_order_acq_rel) == 1)) {
697 auto* reactor = reactor_;
698 auto* call = call_.
call();
699 this->~ClientCallbackReaderWriterImpl();
705 call, [reactor, s = std::move(s)]() { reactor->OnDone(s); });
714 ClientBidiReactor<Request, Response>*
const reactor_;
720 const bool start_corked_;
721 bool corked_write_needed_;
743 struct StartCallBacklog {
744 bool write_ops =
false;
745 bool writes_done_ops =
false;
746 bool read_ops =
false;
748 StartCallBacklog backlog_ ABSL_GUARDED_BY(start_mu_);
751 std::atomic<intptr_t> callbacks_outstanding_{3};
752 std::atomic_bool started_{
false};
756 template <
class Request,
class Response>
757 class ClientCallbackReaderWriterFactory {
764 channel->CreateCall(method, context, channel->CallbackCQ());
774 template <
class Response>
778 static void operator delete(
void* , std::size_t size) {
787 static void operator delete(
void*,
void*) { ABSL_CHECK(
false); }
798 reactor_->OnReadInitialMetadataDone(
799 ok && !reactor_->InternalTrailersOnly(call_.call()));
803 start_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
804 context_->initial_metadata_flags());
805 start_ops_.RecvInitialMetadata(context_);
813 reactor_->OnReadDone(ok);
821 if (backlog_.read_ops) {
824 started_.store(
true, std::memory_order_release);
829 [
this](
bool ) { MaybeFinish(true); },
830 &finish_ops_,
false);
831 finish_ops_.ClientRecvStatus(context_, &finish_status_);
836 void Read(Response* msg)
override {
837 read_ops_.RecvMessage(msg);
838 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
839 if (
GPR_UNLIKELY(!started_.load(std::memory_order_acquire))) {
841 if (
GPR_LIKELY(!started_.load(std::memory_order_relaxed))) {
842 backlog_.read_ops =
true;
850 callbacks_outstanding_.fetch_add(holds, std::memory_order_relaxed);
857 template <
class Request>
862 : context_(context), call_(call), reactor_(reactor) {
863 this->BindReactor(reactor);
867 start_ops_.ClientSendClose();
871 void MaybeFinish(
bool from_reaction) {
873 1, std::memory_order_acq_rel) == 1)) {
875 auto* reactor = reactor_;
876 auto* call = call_.
call();
877 this->~ClientCallbackReaderImpl();
883 call, [reactor, s = std::move(s)]() { reactor->OnDone(s); });
891 ClientReadReactor<Response>*
const reactor_;
908 struct StartCallBacklog {
909 bool read_ops =
false;
911 StartCallBacklog backlog_ ABSL_GUARDED_BY(start_mu_);
914 std::atomic<intptr_t> callbacks_outstanding_{2};
915 std::atomic_bool started_{
false};
919 template <
class Response>
920 class ClientCallbackReaderFactory {
922 template <
class Request>
928 channel->CreateCall(method, context, channel->CallbackCQ());
938 template <
class Request>
942 static void operator delete(
void* , std::size_t size) {
951 static void operator delete(
void*,
void*) { ABSL_CHECK(
false); }
953 void StartCall() ABSL_LOCKS_EXCLUDED(start_mu_)
override {
959 if (!start_corked_) {
960 start_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
961 context_->initial_metadata_flags());
968 if (backlog_.write_ops) {
971 if (backlog_.writes_done_ops) {
972 writes_done_ops_.
FillOps(&call_);
977 started_.store(
true, std::memory_order_release);
982 this->MaybeFinish(
false);
986 ABSL_LOCKS_EXCLUDED(start_mu_)
override {
988 options.set_buffer_hint();
989 write_ops_.ClientSendClose();
996 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
999 write_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
1000 context_->initial_metadata_flags());
1001 corked_write_needed_ =
false;
1004 if (
GPR_UNLIKELY(!started_.load(std::memory_order_acquire))) {
1006 if (
GPR_LIKELY(!started_.load(std::memory_order_relaxed))) {
1007 backlog_.write_ops =
true;
1015 writes_done_ops_.ClientSendClose();
1016 writes_done_tag_.
Set(
1019 reactor_->OnWritesDoneDone(ok);
1022 &writes_done_ops_,
false);
1024 callbacks_outstanding_.fetch_add(1, std::memory_order_relaxed);
1027 writes_done_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
1028 context_->initial_metadata_flags());
1029 corked_write_needed_ =
false;
1032 if (
GPR_UNLIKELY(!started_.load(std::memory_order_acquire))) {
1034 if (
GPR_LIKELY(!started_.load(std::memory_order_relaxed))) {
1035 backlog_.writes_done_ops =
true;
1039 writes_done_ops_.
FillOps(&call_);
1043 callbacks_outstanding_.fetch_add(holds, std::memory_order_relaxed);
1050 template <
class Response>
1055 : channel_(channel),
1059 start_corked_(context_->initial_metadata_corked_),
1060 corked_write_needed_(start_corked_) {
1061 this->BindReactor(reactor);
1067 reactor_->OnReadInitialMetadataDone(
1068 ok && !reactor_->InternalTrailersOnly(call_.call()));
1071 &start_ops_,
false);
1072 start_ops_.RecvInitialMetadata(context_);
1078 reactor_->OnWriteDone(ok);
1081 &write_ops_,
false);
1085 finish_ops_.RecvMessage(response);
1086 finish_ops_.AllowNoMessage();
1089 [
this](
bool ) { MaybeFinish(true); },
1092 finish_ops_.ClientRecvStatus(context_, &finish_status_);
1097 void MaybeFinish(
bool from_reaction) {
1099 1, std::memory_order_acq_rel) == 1)) {
1101 auto* reactor = reactor_;
1102 auto* call = call_.
call();
1103 this->~ClientCallbackWriterImpl();
1109 call, [reactor, s = std::move(s)]() { reactor->OnDone(s); });
1118 ClientWriteReactor<Request>*
const reactor_;
1124 const bool start_corked_;
1125 bool corked_write_needed_;
1145 struct StartCallBacklog {
1146 bool write_ops =
false;
1147 bool writes_done_ops =
false;
1149 StartCallBacklog backlog_ ABSL_GUARDED_BY(start_mu_);
1152 std::atomic<intptr_t> callbacks_outstanding_{3};
1153 std::atomic_bool started_{
false};
1157 template <
class Request>
1158 class ClientCallbackWriterFactory {
1160 template <
class Response>
1166 channel->CreateCall(method, context, channel->CallbackCQ());
1179 static void operator delete(
void* , std::size_t size) {
1188 static void operator delete(
void*,
void*) { ABSL_CHECK(
false); }
1198 reactor_->OnReadInitialMetadataDone(
1199 ok && !reactor_->InternalTrailersOnly(call_.call()));
1202 &start_ops_,
false);
1203 start_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
1204 context_->initial_metadata_flags());
1205 start_ops_.RecvInitialMetadata(context_);
1210 call_.
call(), [
this](
bool ) { MaybeFinish(); }, &finish_ops_,
1212 finish_ops_.ClientRecvStatus(context_, &finish_status_);
1220 template <
class Request,
class Response>
1225 : context_(context), call_(call), reactor_(reactor) {
1231 start_ops_.ClientSendClose();
1232 finish_ops_.RecvMessage(response);
1233 finish_ops_.AllowNoMessage();
1239 void MaybeFinish() {
1241 1, std::memory_order_acq_rel) == 1)) {
1243 auto* reactor = reactor_;
1244 auto* call = call_.
call();
1253 ClientUnaryReactor*
const reactor_;
1269 std::atomic<intptr_t> callbacks_outstanding_{2};
1274 template <
class Request,
class Response,
class BaseRequest = Request,
1275 class BaseResponse = Response>
1281 channel->CreateCall(method, context, channel->CallbackCQ());
1287 static_cast<const BaseRequest*
>(request),
1288 static_cast<BaseResponse*
>(response), reactor);
1294 namespace experimental {
1295 namespace internal {
1299 static void operator delete(
void* , std::size_t size) {
1308 static void operator delete(
void*,
void*) { ABSL_CHECK(
false); }
1312 call_.
call(), [
this](
bool ok) { OnSendDone(ok); }, &send_ops_,
1315 send_ops_.SendInitialMetadata(&context_->send_initial_metadata_,
1316 context_->initial_metadata_flags());
1322 call_.
call(), [
this](
bool ok) { OnRecvInitialMetadataDone(ok); },
1325 meta_ops_.RecvInitialMetadata(context_);
1329 call_.
call(), [
this](
bool ok) { OnFinishDone(ok); }, &finish_ops_,
1331 finish_ops_.ClientRecvStatus(context_, &status_);
1339 template <
class Request>
1343 const Request* request,
1345 : context_(context), call_(call), reactor_(reactor) {
1351 void OnSendDone(
bool ok) {
1358 void OnRecvInitialMetadataDone(
bool ok) {
1364 void OnFinishDone(
bool ) { MaybeFinish(); }
1366 void MaybeFinish() {
1367 if (--ops_outstanding_ == 0) {
1369 auto* reactor = reactor_;
1370 auto* call = call_.
call();
1371 this->~ClientCallbackSessionImpl();
1373 [reactor, s]() { reactor->
OnDone(s); });
1391 std::atomic<int> ops_outstanding_{3};
1399 template <
class Request,
class BaseRequest = Request>
1405 channel->CreateCall(method, context, channel->CallbackCQ());
1411 static_cast<const BaseRequest*
>(request),
1415 template <
class RequestType,
class ResponseType>
1422 #endif // GRPCPP_SUPPORT_CLIENT_CALLBACK_H
Definition: client_callback.h:1176
CallbackWithSuccessTag can be reused multiple times, and will be used in this fashion for streaming o...
Definition: callback_common.h:153
virtual void OnReadInitialMetadataDone(bool)
Definition: client_callback.h:405
virtual void OnReadInitialMetadataDone(bool)
Definition: client_callback.h:437
void StartWritesDone()
Definition: client_callback.h:427
virtual ~ClientCallbackWriter()
Definition: client_callback.h:200
void Read(Response *msg) override
Definition: client_callback.h:561
void AddHold(int holds) override
Definition: client_callback.h:1042
void StartCall() ABSL_LOCKS_EXCLUDED(start_mu_) override
Definition: client_callback.h:525
CallbackUnaryCallImpl(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, const InputMessage *request, OutputMessage *result, std::function< void(grpc::Status)> &&on_completion)
Definition: client_callback.h:73
Definition: call_op_set.h:621
void StartWrite(const Request *req)
Initiate a write operation (or post it for later initiation if StartCall has not yet been invoked).
Definition: client_callback.h:276
GRPCAPI void * grpc_call_arena_alloc(grpc_call *call, size_t size)
Allocate memory in the grpc_call arena: this memory is automatically discarded at call completion.
Definition: call_op_set.h:528
void AddHold()
Holds are needed if (and only if) this stream has operations that take place on it after StartCall bu...
Definition: client_callback.h:330
Definition: client_context.h:72
virtual void OnReadDone(bool)
Definition: client_callback.h:406
An Alarm posts the user-provided tag to its associated completion queue or invokes the user-provided ...
Definition: alarm.h:33
Primary implementation of CallOpSetInterface.
Definition: completion_queue.h:97
void Write(const Request *msg, grpc::WriteOptions options) ABSL_LOCKS_EXCLUDED(start_mu_) override
Definition: client_callback.h:574
void RemoveHold() override
Definition: client_callback.h:852
Definition: call_op_set.h:287
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:156
ClientUnaryReactor is a reactor-style interface for a unary RPC.
Definition: client_callback.h:459
virtual void Read(Response *resp)=0
static void Create(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, ClientBidiReactor< Request, Response > *reactor)
Definition: client_callback.h:759
void StartWrite(const Request *req, grpc::WriteOptions options)
Definition: client_callback.h:421
void FillOps(Call *call) override
Definition: call_op_set.h:895
void StartCall()
Definition: client_callback.h:419
void OnDone(const grpc::Status &) override
Definition: client_callback.h:436
virtual void OnDone(const grpc::Status &)=0
Called by the library when all operations associated with this RPC have completed and all Holds have ...
void RemoveHold() override
Definition: client_callback.h:630
void OnDone(const grpc::Status &) override
Definition: client_callback.h:404
Definition: client_callback.h:228
Straightforward wrapping of the C call object.
Definition: call.h:34
virtual void WritesDone()=0
void RemoveHold() override
Definition: client_callback.h:1045
virtual void StartCall()=0
static void Create(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, Response *response, ClientWriteReactor< Request > *reactor)
Definition: client_callback.h:1161
virtual void OnReadInitialMetadataDone(bool)
Notifies the application that a read of initial metadata from the server is done.
Definition: client_callback.h:357
Definition: callback_common.h:74
void BindReactor(ClientBidiReactor< Request, Response > *reactor)
Definition: client_callback.h:177
void CallbackUnaryCall(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, const InputMessage *request, OutputMessage *result, std::function< void(grpc::Status)> &&on_completion)
Perform a callback-based unary call.
Definition: client_callback.h:57
bool ok() const
Is the status OK?
Definition: status.h:124
void BindReactor(ClientUnaryReactor *reactor)
Definition: client_callback.h:472
GRPCAPI void grpc_call_ref(grpc_call *call)
Ref a call.
void StartRead(Response *resp)
Initiate a read operation (or post it for later initiation if StartCall has not yet been invoked).
Definition: client_callback.h:268
void AddMultipleHolds(int holds)
Definition: client_callback.h:398
void StartCall() ABSL_LOCKS_EXCLUDED(start_mu_) override
Definition: client_callback.h:953
void Write(const Request *msg, grpc::WriteOptions options) ABSL_LOCKS_EXCLUDED(start_mu_) override
Definition: client_callback.h:985
void StartWrite(const Request *req, grpc::WriteOptions options)
Initiate/post a write operation with specified options.
Definition: client_callback.h:284
void OnDone(const grpc::Status &) override
Notifies the application that all operations associated with this RPC have completed and all Holds ha...
Definition: client_callback.h:348
void StartCall()
Definition: client_callback.h:482
virtual ~ClientReactor()=default
virtual void StartCall()=0
virtual void AddHold(int holds)=0
virtual void OnReadDone(bool)
Notifies the application that a StartRead operation completed.
Definition: client_callback.h:363
Did it work? If it didn't, why?
Definition: status.h:34
virtual void WritesDone()=0
GRPCAPI void grpc_call_unref(grpc_call *call)
Unref a call.
Definition: channel_interface.h:52
void StartCall()
Definition: client_callback.h:394
virtual void OnWriteDone(bool)
Notifies the application that a StartWrite or StartWriteLast operation completed.
Definition: client_callback.h:370
A ClientContext allows the person implementing a service client to:
Definition: client_context.h:203
void StartCall() override
Definition: client_callback.h:789
Definition: channel_interface.h:48
struct grpc_call grpc_call
A Call represents an RPC.
Definition: grpc_types.h:68
Definition: client_context.h:69
virtual void OnReadInitialMetadataDone(bool)
Definition: client_callback.h:463
void BindReactor(ClientWriteReactor< Request > *reactor)
Definition: client_callback.h:213
virtual void RemoveHold()=0
Definition: client_callback.h:166
void StartWritesDone()
Indicate that the RPC will have no more write operations.
Definition: client_callback.h:306
virtual void Read(Response *resp)=0
void StartRead(Response *resp)
Definition: client_callback.h:395
Codegen interface for grpc::Channel.
Definition: channel_interface.h:79
virtual void OnSessionReady(grpc::internal::Call call)=0
Definition: client_callback.h:120
void StartCall() override
Definition: client_callback.h:1310
Definition: client_callback.h:1272
void Read(Response *msg) override
Definition: client_callback.h:836
void StartWriteLast(const Request *req, grpc::WriteOptions options)
Definition: client_callback.h:424
Definition: client_context.h:76
virtual void Write(const Request *req, grpc::WriteOptions options)=0
ClientWriteReactor is the interface for a client-streaming RPC.
Definition: client_callback.h:159
void grpc_call_run_in_event_engine(const grpc_call *call, absl::AnyInvocable< void()> cb)
ClientSessionReactor is a reactor-style interface for a session RPC.
Definition: client_callback.h:480
Definition: client_callback.h:218
void AddMultipleHolds(int holds)
Definition: client_callback.h:331
virtual ~ClientCallbackSession()
Definition: client_callback.h:230
void RemoveHold()
Definition: client_callback.h:402
static void Create(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, const Request *request, Response *response, ClientUnaryReactor *reactor)
Definition: client_callback.h:1276
void StartWriteLast(const Request *req, grpc::WriteOptions options)
Initiate/post a write operation with specified options and an indication that this is the last write ...
Definition: client_callback.h:297
Per-message write options.
Definition: call_op_set.h:79
virtual void RemoveHold()=0
virtual void OnWritesDoneDone(bool)
Notifies the application that a StartWritesDone operation completed.
Definition: client_callback.h:379
void WritesDone() ABSL_LOCKS_EXCLUDED(start_mu_) override
Definition: client_callback.h:1014
virtual ~ClientCallbackReader()
Definition: client_callback.h:185
Definition: client_callback.h:147
void Set(grpc_call *call, std::function< void(bool)> f, CompletionQueueTag *ops, bool can_inline)
Definition: callback_common.h:180
void AddHold(int holds) override
Definition: client_callback.h:849
void BindReactor(ClientReadReactor< Response > *reactor)
Definition: client_callback.h:192
Definition: client_callback.h:198
virtual void AddHold(int holds)=0
void RemoveHold()
Definition: client_callback.h:335
virtual ~ClientCallbackReaderWriter()
Definition: client_callback.h:168
virtual void RemoveHold()=0
void Write(const Request *req)
Definition: client_callback.h:202
virtual void StartCall()=0
void AddHold()
Definition: client_callback.h:429
void BindReactor(ClientSessionReactor *reactor)
Definition: client_callback.h:494
grpc_call * call() const
Definition: call.h:55
void StartCall()
Definition: client_callback.h:461
virtual void StartCall()=0
Definition: call_op_set.h:771
A thin wrapper around grpc_completion_queue (see src/core/lib/surface/completion_queue....
Definition: completion_queue.h:104
ClientBidiReactor is the interface for a bidirectional streaming RPC.
Definition: client_callback.h:155
Definition: channel_interface.h:50
Definition: client_callback.h:1296
Definition: client_callback.h:1397
void WriteLast(const Request *req, grpc::WriteOptions options)
Definition: client_callback.h:204
Definition: client_context.h:74
virtual bool InternalTrailersOnly(const grpc_call *call) const
InternalTrailersOnly is not part of the API and is not meant to be overridden.
virtual void StartCall()=0
void StartCall() override
Definition: client_callback.h:1190
void StartWrite(const Request *req)
Definition: client_callback.h:420
virtual void OnSessionAcknowledged(bool)
Definition: client_callback.h:485
void StartCall()
Activate the RPC and initiate any reads or writes that have been Start'ed before this call.
Definition: client_callback.h:261
virtual void OnWriteDone(bool)
Definition: client_callback.h:438
Definition: call_op_set.h:427
Descriptor of an RPC method.
Definition: rpc_method.h:29
virtual void AddHold(int holds)=0
void AddMultipleHolds(int holds)
Definition: client_callback.h:430
Definition: client_callback.h:183
virtual ~ClientCallbackUnary()
Definition: client_callback.h:220
void set_core_cq_tag(void *core_cq_tag)
set_core_cq_tag is used to provide a different core CQ tag than "this".
Definition: call_op_set.h:947
void AddHold(int holds) override
Definition: client_callback.h:627
void OnDone(const grpc::Status &) override
Called by the library when all operations associated with this RPC have completed and all Holds have ...
Definition: client_callback.h:483
void RemoveHold()
Definition: client_callback.h:434
ClientReadReactor is the interface for a server-streaming RPC.
Definition: client_callback.h:157
void WritesDone() ABSL_LOCKS_EXCLUDED(start_mu_) override
Definition: client_callback.h:601
void AddHold()
Definition: client_callback.h:397
void OnDone(const grpc::Status &) override
Called by the library when all operations associated with this RPC have completed and all Holds have ...
Definition: client_callback.h:462
virtual grpc_event_engine::experimental::MemoryAllocator * memory_allocator() const
Definition: channel_interface.h:113
static void Create(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, const Request *request, ClientReadReactor< Response > *reactor)
Definition: client_callback.h:923
virtual void OnWritesDoneDone(bool)
Definition: client_callback.h:439