...

Text file src/github.com/google/flatbuffers/grpc/samples/greeter/client.cpp

Documentation: github.com/google/flatbuffers/grpc/samples/greeter

     1#include "greeter.grpc.fb.h"
     2#include "greeter_generated.h"
     3
     4#include <grpcpp/grpcpp.h>
     5
     6#include <iostream>
     7#include <memory>
     8#include <string>
     9
    10class GreeterClient {
    11 public:
    12  GreeterClient(std::shared_ptr<grpc::Channel> channel)
    13    : stub_(Greeter::NewStub(channel)) {}
    14
    15  std::string SayHello(const std::string &name) {
    16    flatbuffers::grpc::MessageBuilder mb;
    17    auto name_offset = mb.CreateString(name);
    18    auto request_offset = CreateHelloRequest(mb, name_offset);
    19    mb.Finish(request_offset);
    20    auto request_msg = mb.ReleaseMessage<HelloRequest>();
    21
    22    flatbuffers::grpc::Message<HelloReply> response_msg;
    23
    24    grpc::ClientContext context;
    25
    26    auto status = stub_->SayHello(&context, request_msg, &response_msg);
    27    if (status.ok()) {
    28      const HelloReply *response = response_msg.GetRoot();
    29      return response->message()->str();
    30    } else {
    31      std::cerr << status.error_code() << ": " << status.error_message()
    32                << std::endl;
    33      return "RPC failed";
    34    }
    35  }
    36
    37  void SayManyHellos(const std::string &name, int num_greetings,
    38                     std::function<void(const std::string &)> callback) {
    39    flatbuffers::grpc::MessageBuilder mb;
    40    auto name_offset = mb.CreateString(name);
    41    auto request_offset =
    42        CreateManyHellosRequest(mb, name_offset, num_greetings);
    43    mb.Finish(request_offset);
    44    auto request_msg = mb.ReleaseMessage<ManyHellosRequest>();
    45
    46    flatbuffers::grpc::Message<HelloReply> response_msg;
    47
    48    grpc::ClientContext context;
    49
    50    auto stream = stub_->SayManyHellos(&context, request_msg);
    51    while (stream->Read(&response_msg)) {
    52      const HelloReply *response = response_msg.GetRoot();
    53      callback(response->message()->str());
    54    }
    55    auto status = stream->Finish();
    56    if (!status.ok()) {
    57      std::cerr << status.error_code() << ": " << status.error_message()
    58                << std::endl;
    59      callback("RPC failed");
    60    }
    61  }
    62
    63 private:
    64  std::unique_ptr<Greeter::Stub> stub_;
    65};
    66
    67int main(int argc, char **argv) {
    68  std::string server_address("localhost:50051");
    69
    70  auto channel =
    71      grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials());
    72  GreeterClient greeter(channel);
    73
    74  std::string name("world");
    75
    76  std::string message = greeter.SayHello(name);
    77  std::cerr << "Greeter received: " << message << std::endl;
    78
    79  int num_greetings = 10;
    80  greeter.SayManyHellos(name, num_greetings, [](const std::string &message) {
    81    std::cerr << "Greeter received: " << message << std::endl;
    82  });
    83
    84  return 0;
    85}

View as plain text