diff options
Diffstat (limited to 'include/grpc++/impl/codegen/async_unary_call.h')
-rw-r--r-- | include/grpc++/impl/codegen/async_unary_call.h | 92 |
1 files changed, 22 insertions, 70 deletions
diff --git a/include/grpc++/impl/codegen/async_unary_call.h b/include/grpc++/impl/codegen/async_unary_call.h index 6da64f0da1..f0f909686b 100644 --- a/include/grpc++/impl/codegen/async_unary_call.h +++ b/include/grpc++/impl/codegen/async_unary_call.h @@ -87,28 +87,6 @@ class ClientAsyncResponseReader final ClientAsyncResponseReader(call, context, request); } - /// TODO(vjpai): Delete the below constructor - /// PLEASE DO NOT USE THIS CONSTRUCTOR IN NEW CODE - /// This code is only present as a short-term workaround - /// for users that bypassed the code-generator and directly - /// created this struct rather than properly using a stub. - /// This code will not remain a valid public constructor for long. - template <class W> - ClientAsyncResponseReader(ChannelInterface* channel, CompletionQueue* cq, - const RpcMethod& method, ClientContext* context, - const W& request) - : context_(context), - call_(channel->CreateCall(method, context, cq)), - collection_(std::make_shared<Ops>()) { - collection_->init_buf.SetCollection(collection_); - collection_->init_buf.SendInitialMetadata( - context->send_initial_metadata_, context->initial_metadata_flags()); - // TODO(ctiller): don't assert - GPR_CODEGEN_ASSERT(collection_->init_buf.SendMessage(request).ok()); - collection_->init_buf.ClientSendClose(); - call_.PerformOps(&collection_->init_buf); - } - // always allocated against a call arena, no memory free required static void operator delete(void* ptr, std::size_t size) { assert(size == sizeof(ClientAsyncResponseReader)); @@ -119,22 +97,13 @@ class ClientAsyncResponseReader final /// /// Side effect: /// - the \a ClientContext associated with this call is updated with - /// possible initial and trailing metadata sent from the serve. + /// possible initial and trailing metadata sent from the server. void ReadInitialMetadata(void* tag) { GPR_CODEGEN_ASSERT(!context_->initial_metadata_received_); - Ops* o = &ops_; - - // TODO(vjpai): Remove the collection_ specialization as soon - // as the public constructor is deleted - if (collection_) { - o = collection_.get(); - collection_->meta_buf.SetCollection(collection_); - } - - o->meta_buf.set_output_tag(tag); - o->meta_buf.RecvInitialMetadata(context_); - call_.PerformOps(&o->meta_buf); + meta_buf.set_output_tag(tag); + meta_buf.RecvInitialMetadata(context_); + call_.PerformOps(&meta_buf); } /// See \a ClientAysncResponseReaderInterface::Finish for semantics. @@ -143,23 +112,14 @@ class ClientAsyncResponseReader final /// - the \a ClientContext associated with this call is updated with /// possible initial and trailing metadata sent from the server. void Finish(R* msg, Status* status, void* tag) { - Ops* o = &ops_; - - // TODO(vjpai): Remove the collection_ specialization as soon - // as the public constructor is deleted - if (collection_) { - o = collection_.get(); - collection_->finish_buf.SetCollection(collection_); - } - - o->finish_buf.set_output_tag(tag); + finish_buf.set_output_tag(tag); if (!context_->initial_metadata_received_) { - o->finish_buf.RecvInitialMetadata(context_); + finish_buf.RecvInitialMetadata(context_); } - o->finish_buf.RecvMessage(msg); - o->finish_buf.AllowNoMessage(); - o->finish_buf.ClientRecvStatus(context_, status); - call_.PerformOps(&o->finish_buf); + finish_buf.RecvMessage(msg); + finish_buf.AllowNoMessage(); + finish_buf.ClientRecvStatus(context_, status); + call_.PerformOps(&finish_buf); } private: @@ -169,33 +129,25 @@ class ClientAsyncResponseReader final template <class W> ClientAsyncResponseReader(Call call, ClientContext* context, const W& request) : context_(context), call_(call) { - ops_.init_buf.SendInitialMetadata(context->send_initial_metadata_, - context->initial_metadata_flags()); + init_buf.SendInitialMetadata(context->send_initial_metadata_, + context->initial_metadata_flags()); // TODO(ctiller): don't assert - GPR_CODEGEN_ASSERT(ops_.init_buf.SendMessage(request).ok()); - ops_.init_buf.ClientSendClose(); - call_.PerformOps(&ops_.init_buf); + GPR_CODEGEN_ASSERT(init_buf.SendMessage(request).ok()); + init_buf.ClientSendClose(); + call_.PerformOps(&init_buf); } // disable operator new static void* operator new(std::size_t size); static void* operator new(std::size_t size, void* p) { return p; } - // TODO(vjpai): Remove the reference to CallOpSetCollectionInterface - // as soon as the related workaround (public constructor) is deleted - struct Ops : public CallOpSetCollectionInterface { - SneakyCallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, - CallOpClientSendClose> - init_buf; - CallOpSet<CallOpRecvInitialMetadata> meta_buf; - CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>, - CallOpClientRecvStatus> - finish_buf; - } ops_; - - // TODO(vjpai): Remove the collection_ as soon as the related workaround - // (public constructor) is deleted - std::shared_ptr<Ops> collection_; + SneakyCallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, + CallOpClientSendClose> + init_buf; + CallOpSet<CallOpRecvInitialMetadata> meta_buf; + CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>, + CallOpClientRecvStatus> + finish_buf; }; /// Async server-side API for handling unary calls, where the single |