Class BidiStream<RequestT,ResponseT>
- Type Parameters:
RequestT- The type of each request.ResponseT- The type of each response.
- All Implemented Interfaces:
ClientStream<RequestT>,Iterable<ResponseT>
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();
}
}
-
Method Summary
Modifier and TypeMethodDescriptionvoidCloses the sending side of the stream.voidCloses the sending side of the stream with error.booleanReports whether a message can be sent without requiring excessive buffering internally.voidSendreqto the server.Methods inherited from class com.google.api.gax.rpc.ServerStream
cancel, isReceiveReady, iterator, streamMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliterator
-
Method Details
-
send
Sendreqto the server.- Specified by:
sendin interfaceClientStream<RequestT>
-
isSendReady
public boolean isSendReady()Reports whether a message can be sent without requiring excessive buffering internally.This method only provides a hint. It is still correct for the user to call
send(Object)even when this method returnsfalse.- Specified by:
isSendReadyin interfaceClientStream<RequestT>
-
closeSend
public void closeSend()Closes the sending side of the stream. Once called, no further calls tosend(Object),closeSend(), orcloseSendWithError(Throwable)are allowed.Calling this method does not affect the receiving side, the iterator will continue to yield responses from the server.
- Specified by:
closeSendin interfaceClientStream<RequestT>
-
closeSendWithError
Closes the sending side of the stream with error. The error is propagated to the server. Once called, no further calls tosend(Object),closeSend(), orcloseSendWithError(Throwable)are allowed.Calling this method does not affect the receiving side, the iterator will continue to yield responses from the server.
- Specified by:
closeSendWithErrorin interfaceClientStream<RequestT>
-