aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Moiz Haidry <mhaidry@google.com>2018-12-11 13:12:39 -0800
committerGravatar Moiz Haidry <mhaidry@google.com>2018-12-11 13:12:39 -0800
commit3bc323977fb049ac0a10306ec9c964387b204d7c (patch)
tree7d575cbdd5e2ce884ea092992503192472bfde74 /test
parent9bd5b3778abbb2564544a69d9c99d3c87a3354eb (diff)
Streaming support for callback server
Diffstat (limited to 'test')
-rw-r--r--test/cpp/qps/server_callback.cc46
1 files changed, 43 insertions, 3 deletions
diff --git a/test/cpp/qps/server_callback.cc b/test/cpp/qps/server_callback.cc
index 8bedd44739..4a346dd017 100644
--- a/test/cpp/qps/server_callback.cc
+++ b/test/cpp/qps/server_callback.cc
@@ -34,13 +34,53 @@ class BenchmarkCallbackServiceImpl final
: public BenchmarkService::ExperimentalCallbackService {
public:
void UnaryCall(
- ServerContext* context, const SimpleRequest* request,
- SimpleResponse* response,
- experimental::ServerCallbackRpcController* controller) override {
+ ServerContext* context, const ::grpc::testing::SimpleRequest* request,
+ ::grpc::testing::SimpleResponse* response,
+ ::grpc::experimental::ServerCallbackRpcController* controller) override {
auto s = SetResponse(request, response);
controller->Finish(s);
}
+ ::grpc::experimental::ServerBidiReactor<::grpc::testing::SimpleRequest,
+ ::grpc::testing::SimpleResponse>*
+ StreamingCall() override {
+ class Reactor
+ : public ::grpc::experimental::ServerBidiReactor<
+ ::grpc::testing::SimpleRequest, ::grpc::testing::SimpleResponse> {
+ public:
+ Reactor() {}
+ void OnStarted(ServerContext* context) override { StartRead(&request_); }
+
+ void OnReadDone(bool ok) override {
+ if (!ok) {
+ Finish(::grpc::Status::OK);
+ return;
+ }
+ auto s = SetResponse(&request_, &response_);
+ if (!s.ok()) {
+ Finish(s);
+ return;
+ }
+ StartWrite(&response_);
+ }
+
+ void OnWriteDone(bool ok) override {
+ if (!ok) {
+ Finish(::grpc::Status::OK);
+ return;
+ }
+ StartRead(&request_);
+ }
+
+ void OnDone() override { delete (this); }
+
+ private:
+ SimpleRequest request_;
+ SimpleResponse response_;
+ };
+ return new Reactor;
+ }
+
private:
static Status SetResponse(const SimpleRequest* request,
SimpleResponse* response) {