Class BidiStream<RequestT,ResponseT>

java.lang.Object
com.google.api.gax.rpc.ServerStream<ResponseT>
com.google.api.gax.rpc.BidiStream<RequestT,ResponseT>
Type Parameters:
RequestT - The type of each request.
ResponseT - The type of each response.
All Implemented Interfaces:
ClientStream<RequestT>, Iterable<ResponseT>

public class BidiStream<RequestT,ResponseT> extends ServerStream<ResponseT> implements ClientStream<RequestT>
A wrapper around a bidirectional stream.

This class asynchronously pulls responses from upstream via StreamController.request(int) and exposes them via its Iterator. The implementation is back pressure aware and uses a constant buffer of 1 item.

Please note that the stream can only be consumed once and must either be fully consumed or be canceled.

This class can also be used to send requests to the server using send(Object).

Neither this class nor the iterator it returns is thread-safe.

In the example below, we iterate through responses from the server and echo back the items we see:


 BidiStream<Item> stream = ...;

 for (Item item : stream) {
   System.out.println(item.id());

   stream.send(item.id());

   // Allow for early termination
   if (item.id().equals("needle")) {
     // Cancelling the stream will cause `hasNext()` to return false on the next iteration,
     // naturally breaking the loop.
     stream.cancel();
   }
 }