34 #ifndef GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H 35 #define GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H 83 virtual bool Read(R* msg) = 0;
99 virtual bool Write(
const W& msg,
const WriteOptions& options) = 0;
119 virtual void WaitForInitialMetadata() = 0;
129 : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
133 ops.SendInitialMetadata(context->send_initial_metadata_,
134 context->initial_metadata_flags());
137 ops.ClientSendClose();
138 call_.PerformOps(&ops);
146 ops.RecvInitialMetadata(context_);
147 call_.PerformOps(&ops);
153 if (!context_->initial_metadata_received_) {
154 ops.RecvInitialMetadata(context_);
156 ops.RecvMessage(msg);
157 call_.PerformOps(&ops);
158 return cq_.Pluck(&ops) && ops.got_message;
164 ops.ClientRecvStatus(context_, &status);
165 call_.PerformOps(&ops);
186 virtual bool WritesDone() = 0;
196 : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
197 finish_ops_.RecvMessage(response);
198 finish_ops_.AllowNoMessage();
201 ops.SendInitialMetadata(context->send_initial_metadata_,
202 context->initial_metadata_flags());
203 call_.PerformOps(&ops);
211 ops.RecvInitialMetadata(context_);
212 call_.PerformOps(&ops);
219 if (!ops.SendMessage(msg, options).ok()) {
222 call_.PerformOps(&ops);
223 return cq_.Pluck(&ops);
228 ops.ClientSendClose();
229 call_.PerformOps(&ops);
230 return cq_.Pluck(&ops);
236 if (!context_->initial_metadata_received_) {
237 finish_ops_.RecvInitialMetadata(context_);
239 finish_ops_.ClientRecvStatus(context_, &status);
240 call_.PerformOps(&finish_ops_);
255 template <
class W,
class R>
264 virtual void WaitForInitialMetadata() = 0;
270 virtual bool WritesDone() = 0;
273 template <
class W,
class R>
279 : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
281 ops.SendInitialMetadata(context->send_initial_metadata_,
282 context->initial_metadata_flags());
283 call_.PerformOps(&ops);
291 ops.RecvInitialMetadata(context_);
292 call_.PerformOps(&ops);
298 if (!context_->initial_metadata_received_) {
299 ops.RecvInitialMetadata(context_);
301 ops.RecvMessage(msg);
302 call_.PerformOps(&ops);
303 return cq_.Pluck(&ops) && ops.got_message;
309 if (!ops.SendMessage(msg, options).ok())
return false;
310 call_.PerformOps(&ops);
311 return cq_.Pluck(&ops);
316 ops.ClientSendClose();
317 call_.PerformOps(&ops);
318 return cq_.Pluck(&ops);
323 if (!context_->initial_metadata_received_) {
324 ops.RecvInitialMetadata(context_);
327 ops.ClientRecvStatus(context_, &status);
328 call_.PerformOps(&ops);
348 ops.SendInitialMetadata(ctx_->initial_metadata_,
349 ctx_->initial_metadata_flags());
350 if (ctx_->compression_level_set()) {
351 ops.set_compression_level(ctx_->compression_level());
353 ctx_->sent_initial_metadata_ =
true;
354 call_->PerformOps(&ops);
355 call_->cq()->Pluck(&ops);
360 ops.RecvMessage(msg);
361 call_->PerformOps(&ops);
362 return call_->cq()->Pluck(&ops) && ops.got_message;
379 ops.SendInitialMetadata(ctx_->initial_metadata_,
380 ctx_->initial_metadata_flags());
381 if (ctx_->compression_level_set()) {
382 ops.set_compression_level(ctx_->compression_level());
384 ctx_->sent_initial_metadata_ =
true;
385 call_->PerformOps(&ops);
386 call_->cq()->Pluck(&ops);
392 if (!ops.SendMessage(msg, options).ok()) {
395 if (!ctx_->sent_initial_metadata_) {
396 ops.SendInitialMetadata(ctx_->initial_metadata_,
397 ctx_->initial_metadata_flags());
398 if (ctx_->compression_level_set()) {
399 ops.set_compression_level(ctx_->compression_level());
401 ctx_->sent_initial_metadata_ =
true;
403 call_->PerformOps(&ops);
404 return call_->cq()->Pluck(&ops);
413 template <
class W,
class R>
423 ops.SendInitialMetadata(ctx_->initial_metadata_,
424 ctx_->initial_metadata_flags());
425 if (ctx_->compression_level_set()) {
426 ops.set_compression_level(ctx_->compression_level());
428 ctx_->sent_initial_metadata_ =
true;
429 call_->PerformOps(&ops);
430 call_->cq()->Pluck(&ops);
435 ops.RecvMessage(msg);
436 call_->PerformOps(&ops);
437 return call_->cq()->Pluck(&ops) && ops.got_message;
443 if (!ops.SendMessage(msg, options).ok()) {
446 if (!ctx_->sent_initial_metadata_) {
447 ops.SendInitialMetadata(ctx_->initial_metadata_,
448 ctx_->initial_metadata_flags());
449 if (ctx_->compression_level_set()) {
450 ops.set_compression_level(ctx_->compression_level());
452 ctx_->sent_initial_metadata_ =
true;
454 call_->PerformOps(&ops);
455 return call_->cq()->Pluck(&ops);
465 #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:178
Client-side interface for streaming reads of message of type R.
Definition: sync_stream.h:112
bool Read(R *msg) GRPC_OVERRIDE
Blocking read a message and parse to msg.
Definition: sync_stream.h:433
void SendInitialMetadata()
Definition: sync_stream.h:375
An interface that yields a sequence of messages of type R.
Definition: sync_stream.h:69
#define GPR_CODEGEN_ASSERT(x)
Codegen specific version of GPR_ASSERT.
Definition: core_codegen_interface.h:97
void SendInitialMetadata()
Definition: sync_stream.h:344
bool Read(R *msg) GRPC_OVERRIDE
Blocking read a message and parse to msg.
Definition: sync_stream.h:296
virtual ~ReaderInterface()
Definition: sync_stream.h:71
bool Write(const W &msg, const WriteOptions &options) GRPC_OVERRIDE
Blocking write msg to the stream with options.
Definition: sync_stream.h:390
Status Finish() GRPC_OVERRIDE
Wait until the stream finishes, and return the final status.
Definition: sync_stream.h:161
Definition: client_context.h:154
Definition: completion_queue.h:68
void WaitForInitialMetadata() GRPC_OVERRIDE
Blocking wait for initial metadata from server.
Definition: sync_stream.h:142
bool WritesDone() GRPC_OVERRIDE
Block until currently-pending writes are completed.
Definition: sync_stream.h:314
ServerReader(Call *call, ServerContext *ctx)
Definition: sync_stream.h:342
void SendInitialMetadata()
Definition: sync_stream.h:419
bool WritesDone() GRPC_OVERRIDE
Half close writing from the client.
Definition: sync_stream.h:226
bool Write(const W &msg, const WriteOptions &options) GRPC_OVERRIDE
Blocking write msg to the stream with options.
Definition: sync_stream.h:441
bool Write(const W &msg, const WriteOptions &options) GRPC_OVERRIDE
Blocking write msg to the stream with options.
Definition: sync_stream.h:217
virtual ~ClientStreamingInterface()
Definition: sync_stream.h:52
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:127
Status Finish() GRPC_OVERRIDE
Read the final response and wait for the final status.
Definition: sync_stream.h:234
bool Read(R *msg) GRPC_OVERRIDE
Blocking read a message and parse to msg.
Definition: sync_stream.h:151
Codegen interface for grpc::Channel.
Definition: channel_interface.h:64
Primary implementaiton of CallOpSetInterface.
Definition: call.h:593
Definition: server_context.h:91
Per-message write options.
Definition: call.h:98
ClientReaderWriter(ChannelInterface *channel, const RpcMethod &method, ClientContext *context)
Blocking create a stream.
Definition: sync_stream.h:277
bool Write(const W &msg)
Blocking write msg to the stream with default options.
Definition: sync_stream.h:107
Definition: completion_queue.h:70
A thin wrapper around grpc_completion_queue (see / src/core/surface/completion_queue.h).
Definition: completion_queue.h:97
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:287
ServerReaderWriter(Call *call, ServerContext *ctx)
Definition: sync_stream.h:417
Server-side interface for bi-directional streaming.
Definition: completion_queue.h:72
An interface that can be fed a sequence of messages of type W.
Definition: sync_stream.h:88
Client-side interface for bi-directional streaming.
Definition: sync_stream.h:256
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:307
Common interface for all synchronous client side streaming.
Definition: sync_stream.h:50
ServerWriter(Call *call, ServerContext *ctx)
Definition: sync_stream.h:373
bool Read(R *msg) GRPC_OVERRIDE
Blocking read a message and parse to msg.
Definition: sync_stream.h:358
void WaitForInitialMetadata()
Definition: sync_stream.h:207
Definition: channel_interface.h:53
Definition: channel_interface.h:51
#define GRPC_OVERRIDE
Definition: config.h:78
ClientWriter(ChannelInterface *channel, const RpcMethod &method, ClientContext *context, R *response)
Blocking create a stream.
Definition: sync_stream.h:194
virtual ~WriterInterface()
Definition: sync_stream.h:90
Status Finish() GRPC_OVERRIDE
Wait until the stream finishes, and return the final status.
Definition: sync_stream.h:321