34 #ifndef GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H
35 #define GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H
44 #include <grpc/impl/codegen/log.h>
79 virtual bool Read(R* msg) = 0;
123 : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
126 ops.SendInitialMetadata(context->send_initial_metadata_);
128 GPR_ASSERT(ops.SendMessage(request).ok());
135 GPR_ASSERT(!context_->initial_metadata_received_);
138 ops.RecvInitialMetadata(context_);
145 if (!context_->initial_metadata_received_) {
146 ops.RecvInitialMetadata(context_);
148 ops.RecvMessage(msg);
150 return cq_.Pluck(&ops) && ops.got_message;
156 ops.ClientRecvStatus(context_, &status);
158 GPR_ASSERT(cq_.Pluck(&ops));
187 : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
188 finish_ops_.RecvMessage(response);
191 ops.SendInitialMetadata(context->send_initial_metadata_);
197 GPR_ASSERT(!context_->initial_metadata_received_);
200 ops.RecvInitialMetadata(context_);
208 if (!ops.SendMessage(msg, options).ok()) {
212 return cq_.Pluck(&ops);
217 ops.ClientSendClose();
219 return cq_.Pluck(&ops);
225 if (!context_->initial_metadata_received_) {
226 finish_ops_.RecvInitialMetadata(context_);
228 finish_ops_.ClientRecvStatus(context_, &status);
230 GPR_ASSERT(cq_.Pluck(&finish_ops_));
243 template <
class W,
class R>
260 template <
class W,
class R>
266 : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
268 ops.SendInitialMetadata(context->send_initial_metadata_);
274 GPR_ASSERT(!context_->initial_metadata_received_);
277 ops.RecvInitialMetadata(context_);
284 if (!context_->initial_metadata_received_) {
285 ops.RecvInitialMetadata(context_);
287 ops.RecvMessage(msg);
289 return cq_.Pluck(&ops) && ops.got_message;
295 if (!ops.SendMessage(msg, options).ok())
return false;
297 return cq_.Pluck(&ops);
302 ops.ClientSendClose();
304 return cq_.Pluck(&ops);
309 if (!context_->initial_metadata_received_) {
310 ops.RecvInitialMetadata(context_);
313 ops.ClientRecvStatus(context_, &status);
315 GPR_ASSERT(cq_.Pluck(&ops));
326 class ServerReader
GRPC_FINAL :
public ReaderInterface<R> {
331 GPR_ASSERT(!ctx_->sent_initial_metadata_);
334 ops.SendInitialMetadata(ctx_->initial_metadata_);
335 ctx_->sent_initial_metadata_ =
true;
337 call_->
cq()->Pluck(&ops);
342 ops.RecvMessage(msg);
344 return call_->
cq()->Pluck(&ops) && ops.got_message;
353 class ServerWriter
GRPC_FINAL :
public WriterInterface<W> {
358 GPR_ASSERT(!ctx_->sent_initial_metadata_);
361 ops.SendInitialMetadata(ctx_->initial_metadata_);
362 ctx_->sent_initial_metadata_ =
true;
364 call_->
cq()->Pluck(&ops);
370 if (!ops.SendMessage(msg, options).ok()) {
373 if (!ctx_->sent_initial_metadata_) {
374 ops.SendInitialMetadata(ctx_->initial_metadata_);
375 ctx_->sent_initial_metadata_ =
true;
378 return call_->
cq()->Pluck(&ops);
387 template <
class W,
class R>
388 class ServerReaderWriter
GRPC_FINAL :
public WriterInterface<W>,
389 public ReaderInterface<R> {
394 GPR_ASSERT(!ctx_->sent_initial_metadata_);
397 ops.SendInitialMetadata(ctx_->initial_metadata_);
398 ctx_->sent_initial_metadata_ =
true;
400 call_->
cq()->Pluck(&ops);
405 ops.RecvMessage(msg);
407 return call_->
cq()->Pluck(&ops) && ops.got_message;
413 if (!ops.SendMessage(msg, options).ok()) {
416 if (!ctx_->sent_initial_metadata_) {
417 ops.SendInitialMetadata(ctx_->initial_metadata_);
418 ctx_->sent_initial_metadata_ =
true;
421 return call_->
cq()->Pluck(&ops);
431 #endif // GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H
Definition: channel_interface.h:49
Client-side interface for streaming writes of message of type W.
Definition: sync_stream.h:170
virtual void WaitForInitialMetadata()=0
Blocking wait for initial metadata from server.
CompletionQueue * cq()
Definition: call.h:586
Client-side interface for streaming reads of message of type R.
Definition: sync_stream.h:106
bool Read(R *msg) GRPC_OVERRIDE
Blocking read a message and parse to msg.
Definition: sync_stream.h:403
void SendInitialMetadata()
Definition: sync_stream.h:357
An interface that yields a sequence of messages of type R.
Definition: sync_stream.h:68
void SendInitialMetadata()
Definition: sync_stream.h:330
bool Read(R *msg) GRPC_OVERRIDE
Blocking read a message and parse to msg.
Definition: sync_stream.h:282
virtual ~ReaderInterface()
Definition: sync_stream.h:70
bool Write(const W &msg, const WriteOptions &options) GRPC_OVERRIDE
Blocking write msg to the stream with options.
Definition: sync_stream.h:368
Status Finish() GRPC_OVERRIDE
Wait until the stream finishes, and return the final status.
Definition: sync_stream.h:153
Definition: client_context.h:152
void WaitForInitialMetadata() GRPC_OVERRIDE
Blocking wait for initial metadata from server.
Definition: sync_stream.h:134
bool WritesDone() GRPC_OVERRIDE
Block until writes are completed.
Definition: sync_stream.h:300
ServerReader(Call *call, ServerContext *ctx)
Definition: sync_stream.h:328
void SendInitialMetadata()
Definition: sync_stream.h:393
bool WritesDone() GRPC_OVERRIDE
Half close writing from the client.
Definition: sync_stream.h:215
bool Write(const W &msg, const WriteOptions &options) GRPC_OVERRIDE
Blocking write msg to the stream with options.
Definition: sync_stream.h:411
bool Write(const W &msg, const WriteOptions &options) GRPC_OVERRIDE
Blocking write msg to the stream with options.
Definition: sync_stream.h:206
virtual ~ClientStreamingInterface()
Definition: sync_stream.h:51
ClientReader(ChannelInterface *channel, const RpcMethod &method, ClientContext *context, const W &request)
Blocking create a stream and write the first request out.
Definition: sync_stream.h:121
Status Finish() GRPC_OVERRIDE
Read the final response and wait for the final status.
Definition: sync_stream.h:223
bool Read(R *msg) GRPC_OVERRIDE
Blocking read a message and parse to msg.
Definition: sync_stream.h:143
virtual bool WritesDone()=0
Half close writing from the client.
Codegen interface for grpc::Channel.
Definition: channel_interface.h:64
Primary implementaiton of CallOpSetInterface.
Definition: call.h:524
void ClientSendClose()
Definition: call.h:342
Definition: server_context.h:90
Per-message write options.
Definition: call.h:67
ClientReaderWriter(ChannelInterface *channel, const RpcMethod &method, ClientContext *context)
Blocking create a stream.
Definition: sync_stream.h:264
virtual void WaitForInitialMetadata()=0
Blocking wait for initial metadata from server.
virtual bool WritesDone()=0
Block until writes are completed.
bool Write(const W &msg)
Blocking write msg to the stream with default options.
Definition: sync_stream.h:101
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
Definition: rpc_method.h:43
virtual Status Finish()=0
Wait until the stream finishes, and return the final status.
void WaitForInitialMetadata() GRPC_OVERRIDE
Blocking wait for initial metadata from server.
Definition: sync_stream.h:273
ServerReaderWriter(Call *call, ServerContext *ctx)
Definition: sync_stream.h:391
void PerformOps(CallOpSetInterface *ops)
An interface that can be fed a sequence of messages of type W.
Definition: sync_stream.h:84
Client-side interface for bi-directional streaming.
Definition: sync_stream.h:244
Did it work? If it didn't, why?
Definition: status.h:45
bool Write(const W &msg, const WriteOptions &options) GRPC_OVERRIDE
Blocking write msg to the stream with options.
Definition: sync_stream.h:293
virtual bool Read(R *msg)=0
Blocking read a message and parse to msg.
Common interface for all synchronous client side streaming.
Definition: sync_stream.h:49
ServerWriter(Call *call, ServerContext *ctx)
Definition: sync_stream.h:355
bool Read(R *msg) GRPC_OVERRIDE
Blocking read a message and parse to msg.
Definition: sync_stream.h:340
void WaitForInitialMetadata()
Definition: sync_stream.h:196
virtual bool Write(const W &msg, const WriteOptions &options)=0
Blocking write msg to the stream with options.
Definition: channel_interface.h:53
Definition: channel_interface.h:51
#define GRPC_OVERRIDE
Definition: config.h:77
ClientWriter(ChannelInterface *channel, const RpcMethod &method, ClientContext *context, R *response)
Blocking create a stream.
Definition: sync_stream.h:185
virtual ~WriterInterface()
Definition: sync_stream.h:86
Status Finish() GRPC_OVERRIDE
Wait until the stream finishes, and return the final status.
Definition: sync_stream.h:307