34 #ifndef GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H
35 #define GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H
45 class CompletionQueue;
76 virtual void Read(R* msg,
void* tag) = 0;
93 virtual void Write(
const W& msg,
void* tag) = 0;
107 const W& request,
void* tag)
108 : context_(context), call_(channel->CreateCall(method, context, cq)) {
109 init_ops_.set_output_tag(tag);
110 init_ops_.SendInitialMetadata(context->send_initial_metadata_);
112 GPR_ASSERT(init_ops_.SendMessage(request).ok());
113 init_ops_.ClientSendClose();
118 GPR_ASSERT(!context_->initial_metadata_received_);
120 meta_ops_.set_output_tag(tag);
121 meta_ops_.RecvInitialMetadata(context_);
126 read_ops_.set_output_tag(tag);
127 if (!context_->initial_metadata_received_) {
128 read_ops_.RecvInitialMetadata(context_);
130 read_ops_.RecvMessage(msg);
135 finish_ops_.set_output_tag(tag);
136 if (!context_->initial_metadata_received_) {
137 finish_ops_.RecvInitialMetadata(context_);
139 finish_ops_.ClientRecvStatus(context_, status);
170 R* response,
void* tag)
171 : context_(context), call_(channel->CreateCall(method, context, cq)) {
172 finish_ops_.RecvMessage(response);
174 init_ops_.set_output_tag(tag);
175 init_ops_.SendInitialMetadata(context->send_initial_metadata_);
180 GPR_ASSERT(!context_->initial_metadata_received_);
182 meta_ops_.set_output_tag(tag);
183 meta_ops_.RecvInitialMetadata(context_);
188 write_ops_.set_output_tag(tag);
190 GPR_ASSERT(write_ops_.SendMessage(msg).ok());
195 writes_done_ops_.set_output_tag(tag);
196 writes_done_ops_.ClientSendClose();
201 finish_ops_.set_output_tag(tag);
202 if (!context_->initial_metadata_received_) {
203 finish_ops_.RecvInitialMetadata(context_);
205 finish_ops_.ClientRecvStatus(context_, status);
221 template <
class W,
class R>
232 template <
class W,
class R>
239 : context_(context), call_(channel->CreateCall(method, context, cq)) {
240 init_ops_.set_output_tag(tag);
241 init_ops_.SendInitialMetadata(context->send_initial_metadata_);
246 GPR_ASSERT(!context_->initial_metadata_received_);
248 meta_ops_.set_output_tag(tag);
249 meta_ops_.RecvInitialMetadata(context_);
254 read_ops_.set_output_tag(tag);
255 if (!context_->initial_metadata_received_) {
256 read_ops_.RecvInitialMetadata(context_);
258 read_ops_.RecvMessage(msg);
263 write_ops_.set_output_tag(tag);
265 GPR_ASSERT(write_ops_.SendMessage(msg).ok());
270 writes_done_ops_.set_output_tag(tag);
271 writes_done_ops_.ClientSendClose();
276 finish_ops_.set_output_tag(tag);
277 if (!context_->initial_metadata_received_) {
278 finish_ops_.RecvInitialMetadata(context_);
280 finish_ops_.ClientRecvStatus(context_, status);
295 template <
class W,
class R>
300 : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
303 GPR_ASSERT(!ctx_->sent_initial_metadata_);
305 meta_ops_.set_output_tag(tag);
306 meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
307 ctx_->sent_initial_metadata_ =
true;
312 read_ops_.set_output_tag(tag);
313 read_ops_.RecvMessage(msg);
318 finish_ops_.set_output_tag(tag);
319 if (!ctx_->sent_initial_metadata_) {
320 finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
321 ctx_->sent_initial_metadata_ =
true;
325 finish_ops_.ServerSendStatus(ctx_->trailing_metadata_,
326 finish_ops_.SendMessage(msg));
328 finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);
334 GPR_ASSERT(!status.
ok());
335 finish_ops_.set_output_tag(tag);
336 if (!ctx_->sent_initial_metadata_) {
337 finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
338 ctx_->sent_initial_metadata_ =
true;
340 finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);
349 CallOpSet<CallOpSendInitialMetadata> meta_ops_;
350 CallOpSet<CallOpRecvMessage<R>> read_ops_;
351 CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
352 CallOpServerSendStatus> finish_ops_;
360 : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
363 GPR_ASSERT(!ctx_->sent_initial_metadata_);
365 meta_ops_.set_output_tag(tag);
366 meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
367 ctx_->sent_initial_metadata_ =
true;
372 write_ops_.set_output_tag(tag);
373 if (!ctx_->sent_initial_metadata_) {
374 write_ops_.SendInitialMetadata(ctx_->initial_metadata_);
375 ctx_->sent_initial_metadata_ =
true;
378 GPR_ASSERT(write_ops_.SendMessage(msg).ok());
383 finish_ops_.set_output_tag(tag);
384 if (!ctx_->sent_initial_metadata_) {
385 finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
386 ctx_->sent_initial_metadata_ =
true;
388 finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);
397 CallOpSet<CallOpSendInitialMetadata> meta_ops_;
398 CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> write_ops_;
399 CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> finish_ops_;
403 template <
class W,
class R>
409 : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
412 GPR_ASSERT(!ctx_->sent_initial_metadata_);
414 meta_ops_.set_output_tag(tag);
415 meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);
416 ctx_->sent_initial_metadata_ =
true;
421 read_ops_.set_output_tag(tag);
422 read_ops_.RecvMessage(msg);
427 write_ops_.set_output_tag(tag);
428 if (!ctx_->sent_initial_metadata_) {
429 write_ops_.SendInitialMetadata(ctx_->initial_metadata_);
430 ctx_->sent_initial_metadata_ =
true;
433 GPR_ASSERT(write_ops_.SendMessage(msg).ok());
438 finish_ops_.set_output_tag(tag);
439 if (!ctx_->sent_initial_metadata_) {
440 finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);
441 ctx_->sent_initial_metadata_ =
true;
443 finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);
448 friend class ::grpc::Server;
462 #endif // GRPCXX_IMPL_CODEGEN_ASYNC_STREAM_H
Common interface for all client side asynchronous streaming.
Definition: async_stream.h:48
Definition: async_stream.h:233
void SendInitialMetadata(void *tag) GRPC_OVERRIDE
Definition: async_stream.h:411
void Write(const W &msg, void *tag) GRPC_OVERRIDE
Request the writing of msg with identifying tag tag.
Definition: async_stream.h:187
void WritesDone(void *tag) GRPC_OVERRIDE
Signal the client is done with the writes.
Definition: async_stream.h:194
void Read(R *msg, void *tag) GRPC_OVERRIDE
Read a message of type R into msg.
Definition: async_stream.h:420
void SendInitialMetadata(void *tag) GRPC_OVERRIDE
Definition: async_stream.h:362
void ReadInitialMetadata(void *tag) GRPC_OVERRIDE
Request notification of the reading of the initial metadata.
Definition: async_stream.h:245
virtual void WritesDone(void *tag)=0
Signal the client is done with the writes.
virtual void Write(const W &msg, void *tag)=0
Request the writing of msg with identifying tag tag.
Server-side interface for asynchronous bi-directional streaming.
Definition: async_stream.h:404
Definition: service_type.h:52
void Write(const W &msg, void *tag) GRPC_OVERRIDE
Request the writing of msg with identifying tag tag.
Definition: async_stream.h:371
void Read(R *msg, void *tag) GRPC_OVERRIDE
Read a message of type R into msg.
Definition: async_stream.h:253
void Read(R *msg, void *tag) GRPC_OVERRIDE
Read a message of type R into msg.
Definition: async_stream.h:311
virtual void WritesDone(void *tag)=0
Signal the client is done with the writes.
Definition: client_context.h:152
void FinishWithError(const Status &status, void *tag)
Definition: async_stream.h:333
Definition: async_stream.h:356
ClientAsyncWriter(ChannelInterface *channel, CompletionQueue *cq, const RpcMethod &method, ClientContext *context, R *response, void *tag)
Definition: async_stream.h:168
virtual ~AsyncReaderInterface()
Definition: async_stream.h:69
ServerAsyncReaderWriter(ServerContext *ctx)
Definition: async_stream.h:408
ClientAsyncReaderWriter(ChannelInterface *channel, CompletionQueue *cq, const RpcMethod &method, ClientContext *context, void *tag)
Definition: async_stream.h:236
Definition: async_stream.h:97
void Write(const W &msg, void *tag) GRPC_OVERRIDE
Request the writing of msg with identifying tag tag.
Definition: async_stream.h:262
Client-side interface for asynchronous bi-directional streaming.
Definition: async_stream.h:222
Codegen interface for grpc::Channel.
Definition: channel_interface.h:64
ServerAsyncWriter(ServerContext *ctx)
Definition: async_stream.h:359
void ReadInitialMetadata(void *tag) GRPC_OVERRIDE
Request notification of the reading of the initial metadata.
Definition: async_stream.h:179
An interface that can be fed a sequence of messages of type W.
Definition: async_stream.h:81
Definition: async_stream.h:165
Primary implementaiton of CallOpSetInterface.
Definition: call.h:524
Definition: server_context.h:90
void Finish(const W &msg, const Status &status, void *tag)
Definition: async_stream.h:317
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
virtual ~ClientAsyncStreamingInterface()
Definition: async_stream.h:50
void Finish(Status *status, void *tag) GRPC_OVERRIDE
Request notification completion.
Definition: async_stream.h:200
void Finish(const Status &status, void *tag)
Definition: async_stream.h:382
virtual void ReadInitialMetadata(void *tag)=0
Request notification of the reading of the initial metadata.
Definition: rpc_method.h:43
void Finish(Status *status, void *tag) GRPC_OVERRIDE
Request notification completion.
Definition: async_stream.h:134
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
void Finish(const Status &status, void *tag)
Definition: async_stream.h:437
void Write(const W &msg, void *tag) GRPC_OVERRIDE
Request the writing of msg with identifying tag tag.
Definition: async_stream.h:426
virtual void Finish(Status *status, void *tag)=0
Request notification completion.
void SendInitialMetadata(void *tag) GRPC_OVERRIDE
Definition: async_stream.h:302
void Read(R *msg, void *tag) GRPC_OVERRIDE
Read a message of type R into msg.
Definition: async_stream.h:125
Definition: async_stream.h:101
virtual ~AsyncWriterInterface()
Definition: async_stream.h:83
#define GRPC_OVERRIDE
Definition: config.h:77
void Finish(Status *status, void *tag) GRPC_OVERRIDE
Request notification completion.
Definition: async_stream.h:275
Definition: async_stream.h:296
void WritesDone(void *tag) GRPC_OVERRIDE
Signal the client is done with the writes.
Definition: async_stream.h:269
ClientAsyncReader(ChannelInterface *channel, CompletionQueue *cq, const RpcMethod &method, ClientContext *context, const W &request, void *tag)
Create a stream and write the first request out.
Definition: async_stream.h:105
virtual void Read(R *msg, void *tag)=0
Read a message of type R into msg.
ServerAsyncReader(ServerContext *ctx)
Definition: async_stream.h:299
An interface that yields a sequence of messages of type R.
Definition: async_stream.h:67
void ReadInitialMetadata(void *tag) GRPC_OVERRIDE
Request notification of the reading of the initial metadata.
Definition: async_stream.h:117
Common interface for client side asynchronous writing.
Definition: async_stream.h:155