Go to the documentation of this file.
18 #ifndef GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_H
19 #define GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_H
25 #include <type_traits>
42 template <
class Request,
class Response>
43 class CallbackUnaryHandler;
44 template <
class Request,
class Response>
46 template <
class Request,
class Response>
48 template <
class Request,
class Response>
64 template <
class Request,
class Response>
66 template <
class Request,
class Response>
68 template <
class Request,
class Response>
70 template <
class Request,
class Response>
149 1, std::memory_order_acq_rel) == 1;
162 template <
class Request,
class Response>
183 template <
class Request>
185 template <
class Response>
187 template <
class Request,
class Response>
202 template <
class Reactor>
204 reactor->InternalBindCall(
this);
208 template <
class Request>
218 reactor->InternalBindReader(
this);
222 template <
class Response>
235 reactor->InternalBindWriter(
this);
239 template <
class Request,
class Response>
253 reactor->InternalBindStream(
this);
269 template <
class Request,
class Response>
285 stream_.load(std::memory_order_acquire);
290 backlog_.send_initial_metadata_wanted =
true;
294 stream->SendInitialMetadata();
303 stream_.load(std::memory_order_acquire);
308 backlog_.read_wanted =
req;
333 stream_.load(std::memory_order_acquire);
338 backlog_.write_wanted =
resp;
339 backlog_.write_options_wanted =
options;
362 stream_.load(std::memory_order_acquire);
367 backlog_.write_and_finish_wanted =
true;
368 backlog_.write_wanted =
resp;
369 backlog_.write_options_wanted =
options;
397 stream_.load(std::memory_order_acquire);
402 backlog_.finish_wanted =
true;
434 void OnDone()
override = 0;
449 if (
GPR_UNLIKELY(backlog_.send_initial_metadata_wanted)) {
450 stream->SendInitialMetadata();
453 stream->Read(backlog_.read_wanted);
456 stream->WriteAndFinish(backlog_.write_wanted,
457 std::move(backlog_.write_options_wanted),
461 stream->Write(backlog_.write_wanted,
462 std::move(backlog_.write_options_wanted));
477 std::atomic<ServerCallbackReaderWriter<Request, Response>*>
stream_{
nullptr};
491 template <
class Request>
500 reader_.load(std::memory_order_acquire);
505 backlog_.send_initial_metadata_wanted =
true;
509 reader->SendInitialMetadata();
513 reader_.load(std::memory_order_acquire);
518 backlog_.read_wanted =
req;
526 reader_.load(std::memory_order_acquire);
531 backlog_.finish_wanted =
true;
542 void OnDone()
override = 0;
554 if (
GPR_UNLIKELY(backlog_.send_initial_metadata_wanted)) {
555 reader->SendInitialMetadata();
558 reader->Read(backlog_.read_wanted);
568 std::atomic<ServerCallbackReader<Request>*>
reader_{
nullptr};
579 template <
class Response>
588 writer_.load(std::memory_order_acquire);
593 backlog_.send_initial_metadata_wanted =
true;
597 writer->SendInitialMetadata();
605 writer_.load(std::memory_order_acquire);
610 backlog_.write_wanted =
resp;
611 backlog_.write_options_wanted =
options;
620 writer_.load(std::memory_order_acquire);
625 backlog_.write_and_finish_wanted =
true;
626 backlog_.write_wanted =
resp;
627 backlog_.write_options_wanted =
options;
639 writer_.load(std::memory_order_acquire);
644 backlog_.finish_wanted =
true;
655 void OnDone()
override = 0;
666 if (
GPR_UNLIKELY(backlog_.send_initial_metadata_wanted)) {
667 writer->SendInitialMetadata();
670 writer->WriteAndFinish(backlog_.write_wanted,
671 std::move(backlog_.write_options_wanted),
675 writer->Write(backlog_.write_wanted,
676 std::move(backlog_.write_options_wanted));
687 std::atomic<ServerCallbackWriter<Response>*>
writer_{
nullptr};
707 if (
call ==
nullptr) {
709 call =
call_.load(std::memory_order_relaxed);
710 if (
call ==
nullptr) {
711 backlog_.send_initial_metadata_wanted =
true;
715 call->SendInitialMetadata();
722 if (
call ==
nullptr) {
724 call =
call_.load(std::memory_order_relaxed);
725 if (
call ==
nullptr) {
726 backlog_.finish_wanted =
true;
736 void OnDone()
override = 0;
747 if (
GPR_UNLIKELY(backlog_.send_initial_metadata_wanted)) {
748 call->SendInitialMetadata();
754 call_.store(
call, std::memory_order_release);
758 std::atomic<ServerCallbackUnary*>
call_{
nullptr};
769 template <
class Base>
777 template <
class Request>
779 template <
class Response>
782 template <
class Request,
class Response>
790 namespace experimental {
792 template <
class Request,
class Response>
799 #endif // GRPCPP_IMPL_CODEGEN_SERVER_CALLBACK_H
void StartWrite(const Response *resp, grpc::WriteOptions options) ABSL_LOCKS_EXCLUDED(stream_mu_)
virtual void Finish(grpc::Status s)=0
virtual void InternalBindReader(ServerCallbackReader< Request > *reader) ABSL_LOCKS_EXCLUDED(reader_mu_)
void MaybeCallOnCancel(ServerReactor *reactor)
virtual void OnSendInitialMetadataDone(bool)
The following notifications are exactly like ServerBidiReactor.
const Response * write_wanted
virtual void WriteAndFinish(const Response *msg, grpc::WriteOptions options, grpc::Status s)=0
grpc::WriteOptions write_options_wanted
bool UnblockCancellation()
virtual void Write(const Response *msg, grpc::WriteOptions options)=0
virtual void OnSendInitialMetadataDone(bool)
bool send_initial_metadata_wanted
virtual void Read(Request *msg)=0
ServerReadReactor is the interface for a client-streaming RPC.
virtual bool InternalInlineable()
virtual ~ServerReactor()=default
~ServerReadReactor() override=default
~ServerCallbackWriter() override
virtual void Read(Request *msg)=0
The base class of ServerCallbackUnary etc.
void StartSendInitialMetadata() ABSL_LOCKS_EXCLUDED(call_mu_)
StartSendInitialMetadata is exactly like ServerBidiReactor.
void MaybeDone(bool inline_ondone)
void StartWriteAndFinish(const Response *resp, grpc::WriteOptions options, grpc::Status s) ABSL_LOCKS_EXCLUDED(writer_mu_)
const Response * write_wanted
virtual void SendInitialMetadata()=0
grpc::WriteOptions write_options_wanted
virtual ServerReactor * reactor()=0
ServerBidiReactor is the interface for a bidirectional streaming RPC.
std::atomic< ServerCallbackWriter< Response > * > writer_
grpc::internal::Mutex writer_mu_
void StartWriteLast(const Response *resp, grpc::WriteOptions options)
virtual void CallOnDone()=0
Per-message write options.
void Finish(grpc::Status s) ABSL_LOCKS_EXCLUDED(reader_mu_)
std::atomic_int on_cancel_conditions_remaining_
void StartRead(Request *req) ABSL_LOCKS_EXCLUDED(stream_mu_)
void StartWrite(const Response *resp)
void StartWriteLast(const Response *resp, grpc::WriteOptions options)
~ServerUnaryReactor() override=default
virtual void OnReadDone(bool)
virtual void OnCancel()=0
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
virtual void SendInitialMetadata()=0
~ServerCallbackReaderWriter() override
void Ref()
Increases the reference count.
FinishOnlyReactor(grpc::Status s)
bool write_and_finish_wanted
void StartSendInitialMetadata() ABSL_LOCKS_EXCLUDED(stream_mu_)
void BindReactor(Reactor *reactor)
void Finish(grpc::Status s) ABSL_LOCKS_EXCLUDED(call_mu_)
virtual void Finish(grpc::Status s)=0
void ScheduleOnDone(bool inline_ondone)
~ServerWriteReactor() override=default
~ServerCallbackReader() override
void StartSendInitialMetadata() ABSL_LOCKS_EXCLUDED(writer_mu_)
The following operation initiations are exactly like ServerBidiReactor.
virtual void Finish(grpc::Status s)=0
void BindReactor(ServerBidiReactor< Request, Response > *reactor)
virtual ~ServerCallbackCall()
virtual void WriteAndFinish(const Response *msg, grpc::WriteOptions options, grpc::Status s)=0
PreBindBacklog backlog_ ABSL_GUARDED_BY(call_mu_)
void BindReactor(ServerReadReactor< Request > *reactor)
grpc::Status status_wanted
bool send_initial_metadata_wanted
grpc::internal::Mutex reader_mu_
virtual void Write(const Response *msg, grpc::WriteOptions options)=0
grpc::internal::Mutex call_mu_
bool send_initial_metadata_wanted
void StartWrite(const Response *resp)
void set_response(Response *response)
~ServerCallbackUnary() override
grpc::Status status_wanted
std::atomic< ServerCallbackReader< Request > * > reader_
virtual void OnWriteDone(bool)
std::atomic_int callbacks_outstanding_
bool write_and_finish_wanted
int Unref()
Decreases the reference count and returns the previous value.
#define ABSL_LOCKS_EXCLUDED(...)
void StartRead(Request *req) ABSL_LOCKS_EXCLUDED(reader_mu_)
virtual void OnReadDone(bool)
double Finish(Counter const &c, IterationCount iterations, double cpu_time, double num_threads)
virtual void InternalBindWriter(ServerCallbackWriter< Response > *writer) ABSL_LOCKS_EXCLUDED(writer_mu_)
grpc::Status status_wanted
~ServerBidiReactor() override=default
std::atomic< ServerCallbackReaderWriter< Request, Response > * > stream_
void BindReactor(ServerWriteReactor< Response > *reactor)
void StartWriteAndFinish(const Response *resp, grpc::WriteOptions options, grpc::Status s) ABSL_LOCKS_EXCLUDED(stream_mu_)
virtual void OnWriteDone(bool)
bool send_initial_metadata_wanted
void Finish(grpc::Status s) ABSL_LOCKS_EXCLUDED(writer_mu_)
PreBindBacklog backlog_ ABSL_GUARDED_BY(stream_mu_)
void StartWrite(const Response *resp, grpc::WriteOptions options) ABSL_LOCKS_EXCLUDED(writer_mu_)
void StartSendInitialMetadata() ABSL_LOCKS_EXCLUDED(reader_mu_)
The following operation initiations are exactly like ServerBidiReactor.
virtual void Finish(grpc::Status s)=0
grpc::Status status_wanted
PreBindBacklog backlog_ ABSL_GUARDED_BY(writer_mu_)
grpc::internal::Mutex stream_mu_
PreBindBacklog backlog_ ABSL_GUARDED_BY(reader_mu_)
virtual void OnSendInitialMetadataDone(bool)
The following notifications are exactly like ServerBidiReactor.
virtual void InternalBindStream(ServerCallbackReaderWriter< Request, Response > *stream)
std::atomic< ServerCallbackUnary * > call_
ServerWriteReactor is the interface for a server-streaming RPC.
void Finish(grpc::Status s) ABSL_LOCKS_EXCLUDED(stream_mu_)
virtual void SendInitialMetadata()=0
virtual void OnSendInitialMetadataDone(bool)
The following notifications are exactly like ServerBidiReactor.
void CallOnCancel(ServerReactor *reactor)
::grpc::ServerBidiReactor< Request, Response > ServerBidiReactor
virtual void SendInitialMetadata()=0
virtual void InternalBindCall(ServerCallbackUnary *call) ABSL_LOCKS_EXCLUDED(call_mu_)
void set_request(Request *request)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:17