Class BidiStreamingCallable<RequestT,ResponseT>

java.lang.Object
com.google.api.gax.rpc.BidiStreamingCallable<RequestT,ResponseT>
Direct Known Subclasses:
TracedBidiCallable

public abstract class BidiStreamingCallable<RequestT,ResponseT> extends Object
A BidiStreamingCallable is an immutable object which is capable of making RPC calls to bidirectional streaming API methods. Not all transports support streaming.

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

  • Constructor Details

    • BidiStreamingCallable

      protected BidiStreamingCallable()
  • Method Details

    • internalCall

      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.

    • call

      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();
         }
       };
      
       bidiStreamingCallable.call(bidiStreamObserver);
       
    • call

      public void call(BidiStreamObserver<RequestT,ResponseT> bidiObserver, ApiCallContext context)
      Listens to server responses and send requests when the network is free.
    • 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 = bidiStreamingCallable.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);
       }
       
    • call

      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.

    • splitCall

      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 = bidiStreamingCallable.splitCall(responseObserver);
       clientStream.send(42);
       clientStream.send(43);
       clientStream.close();
       
    • splitCall

      public ClientStream<RequestT> splitCall(ResponseObserver<ResponseT> responseObserver, ApiCallContext context)
      Send requests to the server and listens to responses.
    • bidiStreamingCall

      @Deprecated public ApiStreamObserver<RequestT> bidiStreamingCall(ApiStreamObserver<ResponseT> responseObserver, ApiCallContext context)
      Deprecated.
      Conduct a bidirectional streaming call with the given ApiCallContext.
      Parameters:
      responseObserver - ApiStreamObserver to observe the streaming responses
      context - ApiCallContext to provide context information for the RPC call.
      Returns:
      ApiStreamObserver which is used for making streaming requests.
    • bidiStreamingCall

      @Deprecated public ApiStreamObserver<RequestT> bidiStreamingCall(ApiStreamObserver<ResponseT> responseObserver)
      Deprecated.
      Please use splitCall(ResponseObserver) instead.
      Conduct a bidirectional streaming call
      Parameters:
      responseObserver - ApiStreamObserver to observe the streaming responses
      Returns:
      ApiStreamObserver which is used for making streaming requests.
    • withDefaultCallContext

      public BidiStreamingCallable<RequestT,ResponseT> withDefaultCallContext(ApiCallContext defaultCallContext)
      Returns a new BidiStreamingCallable with an ApiCallContext that is used as a default when none is supplied in individual calls.
      Parameters:
      defaultCallContext - the default ApiCallContext.