From bd54dffed7832b6682b91a32c0ab46f896677d0a Mon Sep 17 00:00:00 2001 From: arches Date: Mon, 6 Jun 2016 07:57:19 -0400 Subject: [PATCH] Added new class AsyncRangeResponse --- v3/include/AsyncRangeResponse.hpp | 32 +++++++++++++++++++++ v3/src/AsyncRangeResponse.cpp | 48 +++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 v3/include/AsyncRangeResponse.hpp create mode 100644 v3/src/AsyncRangeResponse.cpp diff --git a/v3/include/AsyncRangeResponse.hpp b/v3/include/AsyncRangeResponse.hpp new file mode 100644 index 0000000..a0fec36 --- /dev/null +++ b/v3/include/AsyncRangeResponse.hpp @@ -0,0 +1,32 @@ +#ifndef __ASYNC_RANGERESPONSE_HPP__ +#define __ASYNC_RANGERESPONSE_HPP__ + +#include +#include "proto/rpc.grpc.pb.h" +#include "v3/include/V3Response.hpp" + + +using grpc::ClientAsyncResponseReader; +using grpc::ClientContext; +using grpc::CompletionQueue; +using grpc::Status; +using etcdserverpb::RangeResponse; + +namespace etcdv3 +{ + class AsyncRangeResponse : public etcdv3::V3Response + { + public: + AsyncRangeResponse(){}; + AsyncRangeResponse(const AsyncRangeResponse& other); + AsyncRangeResponse& operator=(const AsyncRangeResponse& other); + RangeResponse reply; + Status status; + ClientContext context; + CompletionQueue cq_; + std::unique_ptr> response_reader; + AsyncRangeResponse& ParseResponse(); + }; +} + +#endif diff --git a/v3/src/AsyncRangeResponse.cpp b/v3/src/AsyncRangeResponse.cpp new file mode 100644 index 0000000..c01e280 --- /dev/null +++ b/v3/src/AsyncRangeResponse.cpp @@ -0,0 +1,48 @@ +#include "v3/include/AsyncRangeResponse.hpp" + + +etcdv3::AsyncRangeResponse::AsyncRangeResponse(const etcdv3::AsyncRangeResponse& other) +{ + error_code = other.error_code; + error_message = other.error_message; + index = other.index; + action = other.action; + values = other.values; +} + +etcdv3::AsyncRangeResponse& etcdv3::AsyncRangeResponse::operator=(const etcdv3::AsyncRangeResponse& other) +{ + error_code = other.error_code; + error_message = other.error_message; + index = other.index; + action = other.action; + values = other.values; + return *this; +} + +etcdv3::AsyncRangeResponse& etcdv3::AsyncRangeResponse::ParseResponse() +{ + action = "get"; + + if(reply.kvs_size()) + { + if(reply.more()) + { + for(int index=0; reply.more(); index++) + { + values.push_back(reply.kvs(index)); + } + } + else + { + values.push_back(reply.kvs(0)); + } + } + else + { + error_code=100; + error_message="Key not found"; + } + + return *this; +}