diff options
author | Yash Tibrewal <yashkt@google.com> | 2019-01-10 15:20:28 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-10 15:20:28 -0800 |
commit | 2ef35fe9db0057ad4fa0bfed66053b44df99bba8 (patch) | |
tree | 9a27dcb4ba1f6a656804c1559b54e47270950873 /examples/cpp/keyvaluestore/client.cc | |
parent | 34ca89765d70a9b173b6c2a507ef105c05b13dbf (diff) | |
parent | b72bb30126b8baf8b8140266bad2009e6d3c4ded (diff) |
Merge pull request #17687 from yashykt/interceptionexamples
Naive client server implementation for key value service example
Diffstat (limited to 'examples/cpp/keyvaluestore/client.cc')
-rw-r--r-- | examples/cpp/keyvaluestore/client.cc | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/examples/cpp/keyvaluestore/client.cc b/examples/cpp/keyvaluestore/client.cc new file mode 100644 index 0000000000..17e407c273 --- /dev/null +++ b/examples/cpp/keyvaluestore/client.cc @@ -0,0 +1,86 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <iostream> +#include <memory> +#include <string> +#include <vector> + +#include <grpcpp/grpcpp.h> + +#ifdef BAZEL_BUILD +#include "examples/protos/keyvaluestore.grpc.pb.h" +#else +#include "keyvaluestore.grpc.pb.h" +#endif + +using grpc::Channel; +using grpc::ClientContext; +using grpc::Status; +using keyvaluestore::KeyValueStore; +using keyvaluestore::Request; +using keyvaluestore::Response; + +class KeyValueStoreClient { + public: + KeyValueStoreClient(std::shared_ptr<Channel> channel) + : stub_(KeyValueStore::NewStub(channel)) {} + + // Requests each key in the vector and displays the key and its corresponding + // value as a pair + void GetValues(const std::vector<std::string>& keys) { + // Context for the client. It could be used to convey extra information to + // the server and/or tweak certain RPC behaviors. + ClientContext context; + auto stream = stub_->GetValues(&context); + for (const auto& key : keys) { + // Key we are sending to the server. + Request request; + request.set_key(key); + stream->Write(request); + + // Get the value for the sent key + Response response; + stream->Read(&response); + std::cout << key << " : " << response.value() << "\n"; + } + stream->WritesDone(); + Status status = stream->Finish(); + if (!status.ok()) { + std::cout << status.error_code() << ": " << status.error_message() + << std::endl; + std::cout << "RPC failed"; + } + } + + private: + std::unique_ptr<KeyValueStore::Stub> stub_; +}; + +int main(int argc, char** argv) { + // Instantiate the client. It requires a channel, out of which the actual RPCs + // are created. This channel models a connection to an endpoint (in this case, + // localhost at port 50051). We indicate that the channel isn't authenticated + // (use of InsecureChannelCredentials()). + KeyValueStoreClient client(grpc::CreateChannel( + "localhost:50051", grpc::InsecureChannelCredentials())); + std::vector<std::string> keys = {"key1", "key2", "key3", "key4", "key5"}; + client.GetValues(keys); + + return 0; +} |