1 /* 2 * 3 * Copyright 2015 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 #include <iostream> 20 #include <memory> 21 #include <string> 22 23 #include <grpcpp/grpcpp.h> 24 25 #ifdef BAZEL_BUILD 26 #include "examples/protos/helloworld.grpc.pb.h" 27 #else 28 #include "helloworld.grpc.pb.h" 29 #endif 30 31 using grpc::Channel; 32 using grpc::ClientContext; 33 using grpc::Status; 34 using helloworld::HelloRequest; 35 using helloworld::HelloReply; 36 using helloworld::Greeter; 37 38 class GreeterClient { 39 public: 40 GreeterClient(std::shared_ptr<Channel> channel) 41 : stub_(Greeter::NewStub(channel)) {} 42 43 // Assembles the client's payload, sends it and presents the response back 44 // from the server. 45 std::string SayHello(const std::string& user) { 46 // Data we are sending to the server. 47 HelloRequest request; 48 request.set_name(user); 49 50 // Container for the data we expect from the server. 51 HelloReply reply; 52 53 // Context for the client. It could be used to convey extra information to 54 // the server and/or tweak certain RPC behaviors. 55 ClientContext context; 56 57 // The actual RPC. 58 Status status = stub_->SayHello(&context, request, &reply); 59 60 // Act upon its status. 61 if (status.ok()) { 62 return reply.message(); 63 } else { 64 std::cout << status.error_code() << ": " << status.error_message() 65 << std::endl; 66 return "RPC failed"; 67 } 68 } 69 70 private: 71 std::unique_ptr<Greeter::Stub> stub_; 72 }; 73 74 int main(int argc, char** argv) { 75 // Instantiate the client. It requires a channel, out of which the actual RPCs 76 // are created. This channel models a connection to an endpoint (in this case, 77 // localhost at port 50051). We indicate that the channel isn't authenticated 78 // (use of InsecureChannelCredentials()). 79 GreeterClient greeter(grpc::CreateChannel( 80 "localhost:50051", grpc::InsecureChannelCredentials())); 81 std::string user("world"); 82 std::string reply = greeter.SayHello(user); 83 std::cout << "Greeter received: " << reply << std::endl; 84 85 return 0; 86 } 87