34 #ifndef GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H
35 #define GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H
43 #include <grpc/impl/codegen/log.h>
47 class CompletionQueue;
54 virtual void Finish(R* msg,
Status* status,
void* tag) = 0;
66 call_(channel->CreateCall(method, context, cq)),
67 collection_(new CallOpSetCollection) {
68 collection_->init_buf_.SetCollection(collection_);
69 collection_->init_buf_.SendInitialMetadata(context->send_initial_metadata_);
71 GPR_ASSERT(collection_->init_buf_.SendMessage(request).ok());
72 collection_->init_buf_.ClientSendClose();
77 GPR_ASSERT(!context_->initial_metadata_received_);
79 collection_->meta_buf_.SetCollection(collection_);
80 collection_->meta_buf_.set_output_tag(tag);
81 collection_->meta_buf_.RecvInitialMetadata(context_);
86 collection_->finish_buf_.SetCollection(collection_);
87 collection_->finish_buf_.set_output_tag(tag);
88 if (!context_->initial_metadata_received_) {
89 collection_->finish_buf_.RecvInitialMetadata(context_);
91 collection_->finish_buf_.RecvMessage(msg);
92 collection_->finish_buf_.ClientRecvStatus(context_, status);
108 std::shared_ptr<CallOpSetCollection> collection_;
116 : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
119 GPR_ASSERT(!ctx_->sent_initial_metadata_);
121 meta_buf_.set_output_tag(tag);
122 meta_buf_.SendInitialMetadata(ctx_->initial_metadata_);
123 ctx_->sent_initial_metadata_ =
true;
128 finish_buf_.set_output_tag(tag);
129 if (!ctx_->sent_initial_metadata_) {
130 finish_buf_.SendInitialMetadata(ctx_->initial_metadata_);
131 ctx_->sent_initial_metadata_ =
true;
135 finish_buf_.ServerSendStatus(ctx_->trailing_metadata_,
136 finish_buf_.SendMessage(msg));
138 finish_buf_.ServerSendStatus(ctx_->trailing_metadata_, status);
144 GPR_ASSERT(!status.
ok());
145 finish_buf_.set_output_tag(tag);
146 if (!ctx_->sent_initial_metadata_) {
147 finish_buf_.SendInitialMetadata(ctx_->initial_metadata_);
148 ctx_->sent_initial_metadata_ =
true;
150 finish_buf_.ServerSendStatus(ctx_->trailing_metadata_, status);
159 CallOpSet<CallOpSendInitialMetadata> meta_buf_;
160 CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
161 CallOpServerSendStatus> finish_buf_;
166 #endif // GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H
void FinishWithError(const Status &status, void *tag)
Definition: async_unary_call.h:143
virtual ~ClientAsyncResponseReaderInterface()
Definition: async_unary_call.h:52
virtual void Finish(R *msg, Status *status, void *tag)=0
void Finish(const W &msg, const Status &status, void *tag)
Definition: async_unary_call.h:127
Definition: service_type.h:52
void SendInitialMetadata(void *tag) GRPC_OVERRIDE
Definition: async_unary_call.h:118
void Finish(R *msg, Status *status, void *tag)
Definition: async_unary_call.h:85
virtual void ReadInitialMetadata(void *tag)=0
An abstract collection of CallOpSet's, to be used whenever CallOpSet objects must be thought of as a ...
Definition: call.h:486
Definition: async_unary_call.h:58
Definition: client_context.h:152
void ReadInitialMetadata(void *tag)
Definition: async_unary_call.h:76
Definition: async_unary_call.h:50
Codegen interface for grpc::Channel.
Definition: channel_interface.h:64
Primary implementaiton of CallOpSetInterface.
Definition: call.h:524
Definition: server_context.h:90
A thin wrapper around grpc_completion_queue (see / src/core/surface/completion_queue.h).
Definition: completion_queue.h:81
#define GRPC_FINAL
Definition: config.h:71
ClientAsyncResponseReader(ChannelInterface *channel, CompletionQueue *cq, const RpcMethod &method, ClientContext *context, const W &request)
Definition: async_unary_call.h:62
ServerAsyncResponseWriter(ServerContext *ctx)
Definition: async_unary_call.h:115
Definition: rpc_method.h:43
void PerformOps(CallOpSetInterface *ops)
bool ok() const
Is the status OK?
Definition: status.h:67
Did it work? If it didn't, why?
Definition: status.h:45
Definition: async_unary_call.h:112
A CallOpSet that does not post completions to the completion queue.
Definition: call.h:567
#define GRPC_OVERRIDE
Definition: config.h:77