@ -72,22 +72,22 @@ template <class RequestType, class ResponseType>
class ClientRpcContextUnaryImpl : public ClientRpcContext {
public :
ClientRpcContextUnaryImpl (
TestService : : Stub * stub ,
const RequestType & req ,
TestService : : Stub * stub , const RequestType & req ,
std : : function <
std : : unique_ptr < grpc : : ClientAsyncResponseReader < ResponseType > > (
TestService : : Stub * , grpc : : ClientContext * , const RequestType & ,
void * ) > start_req ,
TestService : : Stub * , grpc : : ClientContext * , const RequestType & ,
void * ) > start_req ,
std : : function < void ( grpc : : Status , ResponseType * ) > on_done )
: context_ ( ) ,
stub_ ( stub ) ,
req_ ( req ) ,
response_ ( ) ,
next_state_ ( & ClientRpcContextUnaryImpl : : ReqSent ) ,
callback_ ( on_done ) , start_req_ ( start_req ) ,
callback_ ( on_done ) ,
start_req_ ( start_req ) ,
start_ ( Timer : : Now ( ) ) ,
response_reader_ (
start_req ( stub_ , & context_ , req_ , ClientRpcContext : : tag ( this ) ) ) { }
start_req ( stub_ , & context_ , req_ , ClientRpcContext : : tag ( this ) ) ) { }
~ ClientRpcContextUnaryImpl ( ) GRPC_OVERRIDE { }
bool RunNextState ( ) GRPC_OVERRIDE { return ( this - > * next_state_ ) ( ) ; }
void report_stats ( Histogram * hist ) GRPC_OVERRIDE {
@ -118,10 +118,9 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext {
ResponseType response_ ;
bool ( ClientRpcContextUnaryImpl : : * next_state_ ) ( ) ;
std : : function < void ( grpc : : Status , ResponseType * ) > callback_ ;
std : : function <
std : : unique_ptr < grpc : : ClientAsyncResponseReader < ResponseType > > (
TestService : : Stub * , grpc : : ClientContext * , const RequestType & ,
void * ) > start_req_ ;
std : : function < std : : unique_ptr < grpc : : ClientAsyncResponseReader < ResponseType > > (
TestService : : Stub * , grpc : : ClientContext * , const RequestType & , void * ) >
start_req_ ;
grpc : : Status status_ ;
double start_ ;
std : : unique_ptr < grpc : : ClientAsyncResponseReader < ResponseType > >
@ -130,7 +129,7 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext {
class AsyncClient GRPC_FINAL : public Client {
public :
explicit AsyncClient ( const ClientConfig & config ) : Client ( config ) {
explicit AsyncClient ( const ClientConfig & config ) : Client ( config ) {
for ( int i = 0 ; i < config . async_client_threads ( ) ; i + + ) {
cli_cqs_ . emplace_back ( new CompletionQueue ) ;
}
@ -145,16 +144,18 @@ class AsyncClient GRPC_FINAL : public Client {
int t = 0 ;
for ( int i = 0 ; i < config . outstanding_rpcs_per_channel ( ) ; i + + ) {
for ( auto & channel : channels_ ) {
for ( auto & channel : channels_ ) {
auto * cq = cli_cqs_ [ t ] . get ( ) ;
t = ( t + 1 ) % cli_cqs_ . size ( ) ;
auto start_req = [ cq ] ( TestService : : Stub * stub , grpc : : ClientContext * ctx , const SimpleRequest & request , void * tag ) {
auto start_req = [ cq ] ( TestService : : Stub * stub , grpc : : ClientContext * ctx ,
const SimpleRequest & request , void * tag ) {
return stub - > AsyncUnaryCall ( ctx , request , cq , tag ) ;
} ;
TestService : : Stub * stub = channel . get_stub ( ) ;
const SimpleRequest & request = request_ ;
new ClientRpcContextUnaryImpl < SimpleRequest , SimpleResponse > ( stub , request , start_req , check_done ) ;
TestService : : Stub * stub = channel . get_stub ( ) ;
const SimpleRequest & request = request_ ;
new ClientRpcContextUnaryImpl < SimpleRequest , SimpleResponse > (
stub , request , start_req , check_done ) ;
}
}
@ -164,7 +165,7 @@ class AsyncClient GRPC_FINAL : public Client {
~ AsyncClient ( ) GRPC_OVERRIDE {
EndThreads ( ) ;
for ( auto & cq : cli_cqs_ ) {
for ( auto & cq : cli_cqs_ ) {
cq - > Shutdown ( ) ;
void * got_tag ;
bool ok ;
@ -192,9 +193,9 @@ class AsyncClient GRPC_FINAL : public Client {
std : : vector < std : : unique_ptr < CompletionQueue > > cli_cqs_ ;
} ;
std : : unique_ptr < Client > CreateAsyncClient ( const ClientConfig & args ) {
std : : unique_ptr < Client > CreateAsyncClient ( const ClientConfig & args ) {
return std : : unique_ptr < Client > ( new AsyncClient ( args ) ) ;
}
} // namespace testing
} // namespace grpc
} // namespace testing
} // namespace grpc