Go to the documentation of this file.
18 #ifndef GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_H
19 #define GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_H
48 template <
class InputMessage,
class OutputMessage,
49 class BaseInputMessage = InputMessage,
50 class BaseOutputMessage = OutputMessage>
57 "Invalid input message specification");
59 "Invalid output message specification");
64 template <
class InputMessage,
class OutputMessage>
65 class CallbackUnaryCallImpl {
88 const size_t alloc_sz =
sizeof(OpSetAndTag);
89 auto*
const alloced =
static_cast<OpSetAndTag*
>(
92 auto*
ops =
new (&alloced->opset) FullCallOpSet;
93 auto*
tag =
new (&alloced->tag)
106 ops->AllowNoMessage();
107 ops->ClientSendClose();
109 ops->set_core_cq_tag(
tag);
150 template <
class Request,
class Response>
152 template <
class Response>
154 template <
class Request>
161 template <
class Request,
class Response>
169 virtual void AddHold(
int holds) = 0;
178 template <
class Response>
184 virtual void AddHold(
int holds) = 0;
193 template <
class Request>
205 virtual void AddHold(
int holds) = 0;
239 template <
class Request,
class Response>
240 class ClientBidiReactor :
public internal::ClientReactor {
373 template <
class Response>
398 template <
class Request>
461 template <
class Request,
class Response>
462 class ClientCallbackReaderWriterFactory;
463 template <
class Response>
464 class ClientCallbackReaderFactory;
465 template <
class Request>
466 class ClientCallbackWriterFactory;
468 template <
class Request,
class Response>
473 static void operator delete(
void* , std::size_t
size) {
500 if (backlog_.read_ops) {
503 if (backlog_.write_ops) {
506 if (backlog_.writes_done_ops) {
512 started_.store(
true, std::memory_order_release);
526 backlog_.read_ops =
true;
535 if (
options.is_last_message()) {
551 backlog_.write_ops =
true;
562 reactor_->OnWritesDoneDone(ok);
576 backlog_.writes_done_ops =
true;
605 reactor_->OnReadInitialMetadataDone(
606 ok && !reactor_->InternalTrailersOnly(call_.call()));
616 reactor_->OnWriteDone(ok);
625 reactor_->OnReadDone(ok);
634 [
this](
bool ) { MaybeFinish(true); },
649 1, std::memory_order_acq_rel) == 1)) {
658 reactor->InternalScheduleOnDone(
std::move(s));
707 template <
class Request,
class Response>
725 template <
class Response>
729 static void operator delete(
void* , std::size_t
size) {
749 reactor_->OnReadInitialMetadataDone(
750 ok && !reactor_->InternalTrailersOnly(call_.call()));
764 reactor_->OnReadDone(ok);
772 if (backlog_.read_ops) {
775 started_.store(
true, std::memory_order_release);
780 [
this](
bool ) { MaybeFinish(true); },
793 backlog_.read_ops =
true;
808 template <
class Request>
822 1, std::memory_order_acq_rel) == 1)) {
831 reactor->InternalScheduleOnDone(
std::move(s));
866 template <
class Response>
869 template <
class Request>
884 template <
class Request>
888 static void operator delete(
void* , std::size_t
size) {
914 if (backlog_.write_ops) {
917 if (backlog_.writes_done_ops) {
923 started_.store(
true, std::memory_order_release);
950 backlog_.write_ops =
true;
962 reactor_->OnWritesDoneDone(ok);
978 backlog_.writes_done_ops =
true;
993 template <
class Response>
1008 reactor_->OnReadInitialMetadataDone(
1009 ok && !reactor_->InternalTrailersOnly(call_.call()));
1019 reactor_->OnWriteDone(ok);
1030 [
this](
bool ) { MaybeFinish(true); },
1040 1, std::memory_order_acq_rel) == 1)) {
1049 reactor->InternalScheduleOnDone(
std::move(s));
1095 template <
class Request>
1098 template <
class Response>
1116 static void operator delete(
void* , std::size_t
size) {
1135 reactor_->OnReadInitialMetadataDone(
1136 ok && !reactor_->InternalTrailersOnly(call_.call()));
1157 template <
class Request,
class Response>
1175 1, std::memory_order_acq_rel) == 1)) {
1222 static_cast<const BaseRequest*
>(
request),
1223 static_cast<BaseResponse*
>(
response), reactor);
1229 #endif // GRPCPP_IMPL_CODEGEN_CLIENT_CALLBACK_H
grpc::internal::CallOpSet< grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpRecvInitialMetadata > start_ops_
std::multimap< std::string, std::string > send_initial_metadata_
grpc::internal::Call call_
ClientWriteReactor< Request > *const reactor_
std::atomic< intptr_t > callbacks_outstanding_
grpc::internal::CallbackWithSuccessTag finish_tag_
grpc::internal::CallbackWithSuccessTag writes_done_tag_
grpc::internal::CallOpSet< grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpClientSendClose > write_ops_
grpc::internal::CallbackWithSuccessTag finish_tag_
ClientCallbackReader< Response > * reader_
virtual void AddHold(int holds)=0
static void Create(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, const Request *request, Response *response, ClientUnaryReactor *reactor)
void WritesDone() ABSL_LOCKS_EXCLUDED(start_mu_) override
virtual void OnReadInitialMetadataDone(bool)
grpc::internal::CallOpSet< grpc::internal::CallOpClientRecvStatus > finish_ops_
grpc::internal::CallOpSet< grpc::internal::CallOpGenericRecvMessage, grpc::internal::CallOpClientRecvStatus > finish_ops_
void OnDone(const grpc::Status &) override
virtual void RemoveHold()=0
void StartCall() override
virtual void WritesDone()=0
grpc::internal::CallbackWithSuccessTag read_tag_
grpc::internal::Call call_
ClientBidiReactor is the interface for a bidirectional streaming RPC.
void OnDone(const grpc::Status &) override
ClientCallbackWriter< Request > * writer_
static void Create(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, ClientBidiReactor< Request, Response > *reactor)
CallbackUnaryCallImpl(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, const InputMessage *request, OutputMessage *result, std::function< void(grpc::Status)> on_completion)
void Write(const Request *msg, grpc::WriteOptions options) ABSL_LOCKS_EXCLUDED(start_mu_) override
void StartWrite(const Request *req)
void MaybeFinish(bool from_reaction)
grpc::internal::CallOpSet< grpc::internal::CallOpRecvMessage< Response > > read_ops_
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)
void set_core_cq_tag(void *core_cq_tag)
StartCallBacklog backlog_ ABSL_GUARDED_BY(start_mu_)
virtual void * grpc_call_arena_alloc(grpc_call *call, size_t length)=0
void StartWrite(const Request *req)
virtual void StartCall()=0
virtual ~ClientCallbackReaderWriter()
std::atomic_bool started_
void AddHold(int holds) override
void RemoveHold() override
grpc::internal::Mutex start_mu_
virtual void OnReadDone(bool)
void WriteLast(const Request *req, grpc::WriteOptions options)
virtual void Read(Response *resp)=0
void BindReactor(ClientUnaryReactor *reactor)
void OnDone(const grpc::Status &) override
virtual void RemoveHold()=0
virtual ~ClientReactor()=default
virtual void OnReadDone(bool)
virtual ~ClientCallbackReader()
virtual void StartCall()=0
void Write(const Request *req)
virtual void OnDone(const grpc::Status &)=0
void BindStream(ClientCallbackReaderWriter< Request, Response > *stream)
Per-message write options.
std::atomic_bool started_
grpc::internal::CallbackWithSuccessTag write_tag_
static void Create(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, const Request *request, ClientReadReactor< Response > *reactor)
virtual void OnReadInitialMetadataDone(bool)
CoreCodegenInterface * g_core_codegen_interface
grpc::Status finish_status_
ClientCallbackReaderImpl(grpc::internal::Call call, grpc::ClientContext *context, Request *request, ClientReadReactor< Response > *reactor)
Codegen interface for grpc::Channel.
wrapped_grpc_channel * channel
ClientCallbackReaderWriter< Request, Response > * stream_
static void Create(grpc::ChannelInterface *channel, const grpc::internal::RpcMethod &method, grpc::ClientContext *context, Response *response, ClientWriteReactor< Request > *reactor)
std::atomic_bool started_
void StartWrite(const Request *req, grpc::WriteOptions options)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
grpc::internal::CallOpSet< grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpRecvInitialMetadata > start_ops_
Descriptor of an RPC method.
void StartWriteLast(const Request *req, grpc::WriteOptions options)
static void * tag(intptr_t t)
void Read(Response *msg) override
virtual void Read(Response *resp)=0
void WritesDone() ABSL_LOCKS_EXCLUDED(start_mu_) override
virtual void OnWriteDone(bool)
grpc::internal::CallbackWithSuccessTag writes_done_tag_
virtual ~ClientCallbackWriter()
virtual ~ClientCallbackUnary()
struct grpc_call grpc_call
ClientCallbackUnary * call_
void PerformOps(CallOpSetInterface *ops)
void StartWrite(const Request *req, grpc::WriteOptions options)
std::atomic< intptr_t > callbacks_outstanding_
void AddHold(int holds) override
void BindReactor(ClientWriteReactor< Request > *reactor)
grpc::internal::Call call_
grpc::internal::CallbackWithSuccessTag start_tag_
virtual void OnWriteDone(bool)
grpc::ClientContext *const context_
grpc::internal::Call call_
virtual void OnWritesDoneDone(bool)
void StartRead(Response *resp)
void StartCall() ABSL_LOCKS_EXCLUDED(start_mu_) override
void RemoveHold() override
ClientReadReactor< Response > *const reactor_
grpc::ClientContext *const context_
grpc::ClientContext *const context_
virtual void OnReadInitialMetadataDone(bool)
grpc::internal::CallOpSet< grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpRecvInitialMetadata > start_ops_
Straightforward wrapping of the C call object.
virtual void RemoveHold()=0
uint32_t initial_metadata_flags() const
grpc::Status finish_status_
grpc::internal::CallbackWithSuccessTag finish_tag_
void StartRead(Response *resp)
std::atomic< intptr_t > callbacks_outstanding_
void AddHold(int holds) override
bool corked_write_needed_
grpc::internal::CallbackWithSuccessTag start_tag_
grpc::internal::CallbackWithSuccessTag finish_tag_
grpc::internal::CallOpSet< grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpClientSendClose > writes_done_ops_
void StartWriteLast(const Request *req, grpc::WriteOptions options)
virtual void OnWritesDoneDone(bool)
virtual void StartCall()=0
virtual void AddHold(int holds)=0
void AddMultipleHolds(int holds)
virtual void AddHold(int holds)=0
void BindReactor(ClientBidiReactor< Request, Response > *reactor)
#define ABSL_LOCKS_EXCLUDED(...)
virtual void StartCall()=0
grpc::internal::CallOpSet< grpc::internal::CallOpGenericRecvMessage, grpc::internal::CallOpClientRecvStatus > finish_ops_
void Set(grpc_call *call, std::function< void(bool)> f, CompletionQueueTag *ops, bool can_inline)
void MaybeFinish(bool from_reaction)
bool corked_write_needed_
grpc::internal::CallbackWithSuccessTag start_tag_
grpc::internal::Mutex start_mu_
virtual void OnReadInitialMetadataDone(bool)
void OnDone(const grpc::Status &) override
grpc::internal::CallOpSet< grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpClientSendClose > write_ops_
StartCallBacklog backlog_ ABSL_GUARDED_BY(start_mu_)
virtual bool InternalTrailersOnly(const grpc_call *call) const
grpc::internal::CallbackWithSuccessTag start_tag_
void MaybeFinish(bool from_reaction)
grpc::internal::CallOpSet< grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpClientSendClose > writes_done_ops_
void Write(const Request *msg, grpc::WriteOptions options) ABSL_LOCKS_EXCLUDED(start_mu_) override
virtual void InternalScheduleOnDone(grpc::Status s)
void BindWriter(ClientCallbackWriter< Request > *writer)
ClientCallbackUnaryImpl(grpc::internal::Call call, grpc::ClientContext *context, Request *request, Response *response, ClientUnaryReactor *reactor)
grpc::ClientContext *const context_
virtual void grpc_call_ref(grpc_call *call)=0
grpc::internal::CallbackWithSuccessTag write_tag_
grpc::Status finish_status_
void AddMultipleHolds(int holds)
#define GPR_CODEGEN_ASSERT(x)
Codegen specific version of GPR_ASSERT.
grpc::internal::CallbackWithSuccessTag read_tag_
virtual void WritesDone()=0
grpc::ClientContext context
ClientCallbackWriterImpl(grpc::internal::Call call, grpc::ClientContext *context, Response *response, ClientWriteReactor< Request > *reactor)
grpc::Status finish_status_
grpc::internal::CallOpSet< grpc::internal::CallOpClientRecvStatus > finish_ops_
void StartCall() override
ClientBidiReactor< Request, Response > *const reactor_
grpc::internal::CallOpSet< grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpRecvInitialMetadata > start_ops_
ClientUnaryReactor *const reactor_
void BindReader(ClientCallbackReader< Response > *reader)
void StartCall() ABSL_LOCKS_EXCLUDED(start_mu_) override
grpc::internal::Mutex start_mu_
StartCallBacklog backlog_ ABSL_GUARDED_BY(start_mu_)
void BindCall(ClientCallbackUnary *call)
std::atomic< intptr_t > callbacks_outstanding_
virtual void Write(const Request *req, grpc::WriteOptions options)=0
virtual void grpc_call_unref(grpc_call *call)=0
static grpc_completion_queue * cq
ClientCallbackReaderWriterImpl(grpc::internal::Call call, grpc::ClientContext *context, ClientBidiReactor< Request, Response > *reactor)
void RemoveHold() override
void AddMultipleHolds(int holds)
void Read(Response *msg) override
grpc::internal::CallOpSet< grpc::internal::CallOpRecvMessage< Response > > read_ops_
#define GPR_CODEGEN_DEBUG_ASSERT(x)
Codegen specific version of GPR_DEBUG_ASSERT.
void BindReactor(ClientReadReactor< Response > *reactor)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:46