From 7eb7d75c512020cc9ca43c12414281a2b7b45e78 Mon Sep 17 00:00:00 2001 From: Yang Gao Date: Tue, 10 Feb 2015 14:23:15 -0800 Subject: [PATCH] call implementation before the meeting --- include/grpc++/impl/call.h | 13 ++++++++--- src/cpp/common/call.cc | 46 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/include/grpc++/impl/call.h b/include/grpc++/impl/call.h index de789febe6e..91f3f584439 100644 --- a/include/grpc++/impl/call.h +++ b/include/grpc++/impl/call.h @@ -38,7 +38,7 @@ #include #include -#include +#include namespace google { namespace protobuf { @@ -59,7 +59,9 @@ class CallOpBuffer final : public CompletionQueueTag { void Reset(void *next_return_tag); - void AddSendInitialMetadata(std::vector > *metadata); + // Does not take ownership. + void AddSendInitialMetadata( + std::multimap *metadata); void AddSendMessage(const google::protobuf::Message &message); void AddRecvMessage(google::protobuf::Message *message); void AddClientSendClose(); @@ -74,7 +76,12 @@ class CallOpBuffer final : public CompletionQueueTag { void FinalizeResult(void *tag, bool *status) override; private: - void *return_tag_; + void *return_tag_ = nullptr; + std::multimap* metadata_ = nullptr; + const google::protobuf::Message* send_message_ = nullptr; + google::protobuf::Message* recv_message_ = nullptr; + bool client_send_close_ = false; + Status* status_ = nullptr; }; class CCallDeleter { diff --git a/src/cpp/common/call.cc b/src/cpp/common/call.cc index 0315ffb6bdd..37e374bad31 100644 --- a/src/cpp/common/call.cc +++ b/src/cpp/common/call.cc @@ -36,6 +36,52 @@ namespace grpc { +void CallOpBuffer::Reset(void* next_return_tag) { + return_tag_ = next_return_tag; + metadata_ = nullptr; + send_message_ = nullptr; + recv_message_ = nullptr; + client_send_close_ = false; + status_ = false; +} + +void CallOpBuffer::AddSendInitialMetadata( + std::multimap* metadata) { + metadata_ = metadata; +} + +void CallOpBuffer::AddSendMessage(const google::protobuf::Message& message) { + send_message_ = &message; +} + +void CallOpBuffer::AddRecvMessage(google::protobuf::Message *message) { + recv_message_ = message; +} + +void CallOpBuffer::AddClientSendClose() { + client_sent_close_ = true; +} + +void CallOpBuffer::AddClientRecvStatus(Status *status) { + status_ = status; +} + +void CallOpBuffer::FillOps(grpc_op *ops, size_t *nops) { + + +} + +void CallOpBuffer::FinalizeResult(void *tag, bool *status) { + +} + +void CCallDeleter::operator()(grpc_call* c) { + grpc_call_destroy(c); +} + +Call::Call(grpc_call* call, ChannelInterface* channel, CompletionQueue* cq) + : channel_(channel), cq_(cq), call_(call) {} + void Call::PerformOps(CallOpBuffer* buffer) { channel_->PerformOpsOnCall(buffer, this); }