@BetaApi(value="The surface for streaming is not stable yet and may change in the future.") public abstract class BidiStreamingCallable<RequestT,ResponseT> extends Object
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.
| Modifier | Constructor and Description |
|---|---|
protected |
BidiStreamingCallable() |
| Modifier and Type | Method and Description |
|---|---|
ApiStreamObserver<RequestT> |
bidiStreamingCall(ApiStreamObserver<ResponseT> responseObserver)
Deprecated.
Please use
splitCall(ResponseObserver) instead. |
ApiStreamObserver<RequestT> |
bidiStreamingCall(ApiStreamObserver<ResponseT> responseObserver,
ApiCallContext context)
Deprecated.
Please use
splitCall(ResponseObserver, ApiCallContext) instead. |
BidiStream<RequestT,ResponseT> |
call()
Send requests and iterate over server responses.
|
BidiStream<RequestT,ResponseT> |
call(ApiCallContext context)
Send requests and iterate over server responses.
|
void |
call(BidiStreamObserver<RequestT,ResponseT> bidiObserver)
Listens to server responses and send requests when the network is free.
|
void |
call(BidiStreamObserver<RequestT,ResponseT> bidiObserver,
ApiCallContext context)
Listens to server responses and send requests when the network is free.
|
abstract ClientStream<RequestT> |
internalCall(ResponseObserver<ResponseT> responseObserver,
ClientStreamReadyObserver<RequestT> onReady,
ApiCallContext context)
The "base" method from which other forms of
calls are derived. |
ClientStream<RequestT> |
splitCall(ResponseObserver<ResponseT> responseObserver)
Send requests to the server and listens to responses.
|
ClientStream<RequestT> |
splitCall(ResponseObserver<ResponseT> responseObserver,
ApiCallContext context)
Send requests to the server and listens to responses.
|
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. |
public abstract ClientStream<RequestT> internalCall(ResponseObserver<ResponseT> responseObserver, ClientStreamReadyObserver<RequestT> onReady, ApiCallContext context)
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.
public void call(BidiStreamObserver<RequestT,ResponseT> bidiObserver)
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);
public void call(BidiStreamObserver<RequestT,ResponseT> bidiObserver, ApiCallContext context)
public BidiStream<RequestT,ResponseT> call()
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);
}
public BidiStream<RequestT,ResponseT> call(ApiCallContext context)
This returns a live stream that must either be fully consumed or cancelled.
public ClientStream<RequestT> splitCall(ResponseObserver<ResponseT> responseObserver)
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();
public ClientStream<RequestT> splitCall(ResponseObserver<ResponseT> responseObserver, ApiCallContext context)
@Deprecated public ApiStreamObserver<RequestT> bidiStreamingCall(ApiStreamObserver<ResponseT> responseObserver, ApiCallContext context)
splitCall(ResponseObserver, ApiCallContext) instead.ApiCallContext.responseObserver - ApiStreamObserver to observe the streaming responsescontext - ApiCallContext to provide context information for the RPC call.ApiStreamObserver which is used for making streaming requests.@Deprecated public ApiStreamObserver<RequestT> bidiStreamingCall(ApiStreamObserver<ResponseT> responseObserver)
splitCall(ResponseObserver) instead.responseObserver - ApiStreamObserver to observe the streaming responsesApiStreamObserver which is used for making streaming requests.public BidiStreamingCallable<RequestT,ResponseT> withDefaultCallContext(ApiCallContext defaultCallContext)
BidiStreamingCallable with an ApiCallContext that is used as a
default when none is supplied in individual calls.defaultCallContext - the default ApiCallContext.