Class BidiCallable<RequestT,ResponseT> (2.59.1)

public abstract class BidiCallable<RequestT,ResponseT>

A BidiCallable is an immutable object which is capable of making RPC calls to bidirectional API methods. Not all transports support .

It is considered advanced usage for a user to create a BidiCallable themselves. This class is intended to be created by a generated client class, and configured by instances of CallSettings.Builder which are exposed through the client settings class.

Inheritance

java.lang.Object > BidiCallable<RequestT,ResponseT>

Type Parameters

NameDescription
RequestT
ResponseT

Constructors

BidiCallable()

protected BidiCallable()

Methods

bidiCall(ApiStreamObserver<ResponseT> responseObserver) (deprecated)

public ApiStreamObserver<RequestT> bidiCall(ApiStreamObserver<ResponseT> responseObserver)

Deprecated. Please use <xref uid="com.google.api.gax.rpc.BidiCallable.splitCall(com.google.api.gax.rpc.ResponseObserver<ResponseT>)" data-throw-if-not-resolved="false">#splitCall(ResponseObserver) instead.

Conduct a bidirectional call

Parameter
NameDescription
responseObserverApiStreamObserver<ResponseT>

ApiStreamObserver to observe the responses

Returns
TypeDescription
ApiStreamObserver<RequestT>

ApiStreamObserver which is used for making requests.

bidiCall(ApiStreamObserver<ResponseT> responseObserver, ApiCallContext context) (deprecated)

public ApiStreamObserver<RequestT> bidiCall(ApiStreamObserver<ResponseT> responseObserver, ApiCallContext context)

Deprecated. Please use <xref uid="com.google.api.gax.rpc.BidiCallable.splitCall(com.google.api.gax.rpc.ResponseObserver<ResponseT>,com.google.api.gax.rpc.ApiCallContext)" data-throw-if-not-resolved="false">#splitCall(ResponseObserver, ApiCallContext) instead.

Conduct a bidirectional call with the given ApiCallContext.

Parameters
NameDescription
responseObserverApiStreamObserver<ResponseT>

ApiStreamObserver to observe the responses

contextApiCallContext

ApiCallContext to provide context information for the RPC call.

Returns
TypeDescription
ApiStreamObserver<RequestT>

ApiStreamObserver which is used for making requests.

call()

public BidiStream<RequestT,ResponseT> call()

Send requests and iterate over server responses.

This returns a live stream that must either be fully consumed or cancelled. Example usage:


 BidiStream<String, String> stream = bidiCallable.call()
 for (String s : stream) {
   if ("needle".equals(s)) {
     // Cancelling the stream will cause hasNext() to return false on the next iteration,
     // naturally breaking the loop.
     stream.cancel();
   }
   stream.send(s);
 }
 
Returns
TypeDescription
BidiStream<RequestT,ResponseT>

call(ApiCallContext context)

public BidiStream<RequestT,ResponseT> call(ApiCallContext context)

Send requests and iterate over server responses.

This returns a live stream that must either be fully consumed or cancelled.

Parameter
NameDescription
contextApiCallContext
Returns
TypeDescription
BidiStream<RequestT,ResponseT>

call(BidiStreamObserver<RequestT,ResponseT> bidiObserver)

public void call(BidiStreamObserver<RequestT,ResponseT> bidiObserver)

Listens to server responses and send requests when the network is free. Example usage:


 final Iterator<Integer> sourceDataIterator = intCollection.iterator();
 BidiStreamObserver<Integer, String> bidiStreamObserver = new BidiStreamObserver<Integer, String>() {
   public void onStart(StreamController controller) {
     // no-op
   }

   public void onResponse(String response) {
     System.out.println(response);
   }

   public void onComplete() {
     System.out.println("done!");
   }

   public void onError(Throwable t) {
     System.out.println("error: " + t);
   }

   public void onReady(ClientStream<Integer> stream) {
     while (sourceDataIterator.hasNext()) {
       if (stream.isReady()) {
         stream.send(sourceDataIterator.next());
       } else {
         // It's OK we haven't consumed the whole iterator;
         // onReady will be called again when the network becomes free.
         return;
       }
     }
     // We ran out of things to send.
     stream.close();
   }
 };

 bidiCallable.call(bidiStreamObserver);
 
Parameter
NameDescription
bidiObserverBidiStreamObserver<RequestT,ResponseT>

call(BidiStreamObserver<RequestT,ResponseT> bidiObserver, ApiCallContext context)

public void call(BidiStreamObserver<RequestT,ResponseT> bidiObserver, ApiCallContext context)

Listens to server responses and send requests when the network is free.

Parameters
NameDescription
bidiObserverBidiStreamObserver<RequestT,ResponseT>
contextApiCallContext

internalCall(ResponseObserver<ResponseT> responseObserver, ClientStreamReadyObserver<RequestT> onReady, ApiCallContext context)

public abstract ClientStream<RequestT> internalCall(ResponseObserver<ResponseT> responseObserver, ClientStreamReadyObserver<RequestT> onReady, ApiCallContext context)

The "base" method from which other forms of calls are derived. Most users will not need to call this method directly.

However, it is public, since library authors might want to call this method in adaptor classes.

Parameters
NameDescription
responseObserverResponseObserver<ResponseT>
onReadyClientStreamReadyObserver<RequestT>
contextApiCallContext
Returns
TypeDescription
ClientStream<RequestT>

splitCall(ResponseObserver<ResponseT> responseObserver)

public ClientStream<RequestT> splitCall(ResponseObserver<ResponseT> responseObserver)

Send requests to the server and listens to responses.

Example usage:


 ResponseObserver<String> responseObserver = new ResponseObserver<String>() {
   public void onStart(StreamController controller) {
     // no-op
   }

  public void onResponse(String response) {
    System.out.println(response);
  }

  public void onComplete() {
    System.out.println("done!");
  }

  public void onError(Throwable t) {
    System.out.println("error: " + t);
  }
 };

 ClientStream<Integer> clientStream = bidiCallable.splitCall(responseObserver);
 clientStream.send(42);
 clientStream.send(43);
 clientStream.close();
 
Parameter
NameDescription
responseObserverResponseObserver<ResponseT>
Returns
TypeDescription
ClientStream<RequestT>

splitCall(ResponseObserver<ResponseT> responseObserver, ApiCallContext context)

public ClientStream<RequestT> splitCall(ResponseObserver<ResponseT> responseObserver, ApiCallContext context)

Send requests to the server and listens to responses.

Parameters
NameDescription
responseObserverResponseObserver<ResponseT>
contextApiCallContext
Returns
TypeDescription
ClientStream<RequestT>

withDefaultCallContext(ApiCallContext defaultCallContext)

public BidiCallable<RequestT,ResponseT> withDefaultCallContext(ApiCallContext defaultCallContext)

Returns a new BidiCallable with an ApiCallContext that is used as a default when none is supplied in individual calls.

Parameter
NameDescription
defaultCallContextApiCallContext

the default ApiCallContext.

Returns
TypeDescription
BidiCallable<RequestT,ResponseT>