update code to reflect API changes

pull/3109/head
Yang Gao 10 years ago
parent 00019f5a62
commit 21c7f68bb0
  1. 10
      cpp/helloworld/greeter_async_client.cc
  2. 20
      cpp/helloworld/greeter_async_server.cc

@ -71,18 +71,14 @@ class GreeterClient {
Status status; Status status;
std::unique_ptr<ClientAsyncResponseReader<HelloReply> > rpc( std::unique_ptr<ClientAsyncResponseReader<HelloReply> > rpc(
stub_->AsyncSayHello(&context, request, &cq, (void*)1)); stub_->AsyncSayHello(&context, request, &cq));
rpc->Finish(&reply, &status, (void*)1);
void* got_tag; void* got_tag;
bool ok; bool ok = false;
cq.Next(&got_tag, &ok); cq.Next(&got_tag, &ok);
GPR_ASSERT(ok); GPR_ASSERT(ok);
GPR_ASSERT(got_tag == (void*)1); GPR_ASSERT(got_tag == (void*)1);
rpc->Finish(&reply, &status, (void*)2);
cq.Next(&got_tag, &ok);
GPR_ASSERT(ok);
GPR_ASSERT(got_tag == (void*)2);
if (status.IsOk()) { if (status.IsOk()) {
return reply.message(); return reply.message();
} else { } else {

@ -47,11 +47,11 @@
#include <grpc++/status.h> #include <grpc++/status.h>
#include "helloworld.grpc.pb.h" #include "helloworld.grpc.pb.h"
using grpc::CompletionQueue;
using grpc::Server; using grpc::Server;
using grpc::ServerAsyncResponseWriter; using grpc::ServerAsyncResponseWriter;
using grpc::ServerBuilder; using grpc::ServerBuilder;
using grpc::ServerContext; using grpc::ServerContext;
using grpc::ServerCompletionQueue;
using grpc::Status; using grpc::Status;
using helloworld::HelloRequest; using helloworld::HelloRequest;
using helloworld::HelloReply; using helloworld::HelloReply;
@ -59,11 +59,9 @@ using helloworld::Greeter;
class ServerImpl final { class ServerImpl final {
public: public:
ServerImpl() : service_(&cq_) {}
~ServerImpl() { ~ServerImpl() {
server_->Shutdown(); server_->Shutdown();
cq_.Shutdown(); cq_->Shutdown();
} }
// There is no shutdown handling in this code. // There is no shutdown handling in this code.
@ -73,6 +71,7 @@ class ServerImpl final {
ServerBuilder builder; ServerBuilder builder;
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
builder.RegisterAsyncService(&service_); builder.RegisterAsyncService(&service_);
cq_ = builder.AddCompletionQueue();
server_ = builder.BuildAndStart(); server_ = builder.BuildAndStart();
std::cout << "Server listening on " << server_address << std::endl; std::cout << "Server listening on " << server_address << std::endl;
@ -82,14 +81,15 @@ class ServerImpl final {
private: private:
class CallData { class CallData {
public: public:
CallData(Greeter::AsyncService* service, CompletionQueue* cq) CallData(Greeter::AsyncService* service, ServerCompletionQueue* cq)
: service_(service), cq_(cq), responder_(&ctx_), status_(CREATE) { : service_(service), cq_(cq), responder_(&ctx_), status_(CREATE) {
Proceed(); Proceed();
} }
void Proceed() { void Proceed() {
if (status_ == CREATE) { if (status_ == CREATE) {
service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, this); service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, cq_,
this);
status_ = PROCESS; status_ = PROCESS;
} else if (status_ == PROCESS) { } else if (status_ == PROCESS) {
new CallData(service_, cq_); new CallData(service_, cq_);
@ -104,7 +104,7 @@ class ServerImpl final {
private: private:
Greeter::AsyncService* service_; Greeter::AsyncService* service_;
CompletionQueue* cq_; ServerCompletionQueue* cq_;
ServerContext ctx_; ServerContext ctx_;
HelloRequest request_; HelloRequest request_;
HelloReply reply_; HelloReply reply_;
@ -115,17 +115,17 @@ class ServerImpl final {
// This can be run in multiple threads if needed. // This can be run in multiple threads if needed.
void HandleRpcs() { void HandleRpcs() {
new CallData(&service_, &cq_); new CallData(&service_, cq_.get());
void* tag; void* tag;
bool ok; bool ok;
while (true) { while (true) {
cq_.Next(&tag, &ok); cq_->Next(&tag, &ok);
GPR_ASSERT(ok); GPR_ASSERT(ok);
static_cast<CallData*>(tag)->Proceed(); static_cast<CallData*>(tag)->Proceed();
} }
} }
CompletionQueue cq_; std::unique_ptr<ServerCompletionQueue> cq_;
Greeter::AsyncService service_; Greeter::AsyncService service_;
std::unique_ptr<Server> server_; std::unique_ptr<Server> server_;
}; };

Loading…
Cancel
Save