diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index 9ea9cfe8b9b8a8ccbdae16f0b33cd1e5ba2905b7..0bd0f176a86ce0fd37cba2f80f2c5f34838480dd 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -105,17 +105,24 @@ class ClientRpcContext { } virtual void report_stats(gpr_histogram *hist) = 0; }; + +template <class RequestType, class ResponseType> +using StartMethod = std::function< + std::unique_ptr<grpc::ClientAsyncResponseReader + <ResponseType>>(TestService::Stub *, grpc::ClientContext *, + const RequestType &, void *)> ; + +template <class ResponseType> using DoneMethod = + std::function<void(grpc::Status, ResponseType *)>; + template <class RequestType, class ResponseType> class ClientRpcContextUnaryImpl : public ClientRpcContext { public: ClientRpcContextUnaryImpl( TestService::Stub *stub, const RequestType &req, - std::function< - std::unique_ptr<grpc::ClientAsyncResponseReader<ResponseType>>( - TestService::Stub *, grpc::ClientContext *, const RequestType &, - void *)> start_req, - std::function<void(grpc::Status, ResponseType *)> on_done) + StartMethod<RequestType,ResponseType> start_req, + DoneMethod<ResponseType> on_done) : context_(), stub_(stub), req_(req), @@ -150,7 +157,7 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext { RequestType req_; ResponseType response_; bool (ClientRpcContextUnaryImpl::*next_state_)(); - std::function<void(grpc::Status, ResponseType *)> callback_; + DoneMethod<ResponseType> callback_; grpc::Status status_; double start_; std::unique_ptr<grpc::ClientAsyncResponseReader<ResponseType>> diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc index c797d8af9630bf4fdddee06c838b1e3ef39a5d94..3d6379b73f590232ee23eaf3c81bd6e1b34622fc 100644 --- a/test/cpp/qps/server_async.cc +++ b/test/cpp/qps/server_async.cc @@ -183,15 +183,19 @@ class AsyncQpsServerTest { return reinterpret_cast<ServerRpcContext *>(tag); } + template<class RequestType, class ResponseType> + using RequestMethod = std::function<void(ServerContext *, RequestType *, + grpc::ServerAsyncResponseWriter<ResponseType> *, + void *)>; + template<class RequestType, class ResponseType> using InvokeMethod = + std::function<grpc::Status(const RequestType *, ResponseType *)>; + template <class RequestType, class ResponseType> class ServerRpcContextUnaryImpl : public ServerRpcContext { public: ServerRpcContextUnaryImpl( - std::function<void(ServerContext *, RequestType *, - grpc::ServerAsyncResponseWriter<ResponseType> *, - void *)> request_method, - std::function<grpc::Status(const RequestType *, ResponseType *)> - invoke_method) + RequestMethod<RequestType,ResponseType> request_method, + InvokeMethod<RequestType,ResponseType> invoke_method) : next_state_(&ServerRpcContextUnaryImpl::invoker), request_method_(request_method), invoke_method_(invoke_method), @@ -229,11 +233,8 @@ class AsyncQpsServerTest { ServerContext srv_ctx_; RequestType req_; bool (ServerRpcContextUnaryImpl::*next_state_)(); - std::function<void(ServerContext *, RequestType *, - grpc::ServerAsyncResponseWriter<ResponseType> *, void *)> - request_method_; - std::function<grpc::Status(const RequestType *, ResponseType *)> - invoke_method_; + RequestMethod<RequestType,ResponseType> request_method_; + InvokeMethod<RequestType,ResponseType> invoke_method_; grpc::ServerAsyncResponseWriter<ResponseType> response_writer_; }; @@ -261,12 +262,8 @@ class AsyncQpsServerTest { CompletionQueue srv_cq_; TestService::AsyncService async_service_; std::unique_ptr<Server> server_; - std::function<void(ServerContext *, SimpleRequest *, - grpc::ServerAsyncResponseWriter<SimpleResponse> *, void *)> - request_unary_; - std::function<void(ServerContext *, StatsRequest *, - grpc::ServerAsyncResponseWriter<ServerStats> *, void *)> - request_stats_; + RequestMethod<SimpleRequest, SimpleResponse> request_unary_; + RequestMethod<StatsRequest, ServerStats> request_stats_; std::forward_list<ServerRpcContext *> contexts_; };