public
abstract
class
BidiStreamingCallable<RequestT
,
ResponseT
>
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.
Type Parameters
RequestT
ResponseT
Constructors
BidiStreamingCallable()
protected
BidiStreamingCallable
()
Methods
bidiStreamingCall(ApiStreamObserver<ResponseT> responseObserver) (deprecated)
public
ApiStreamObserver<RequestT>
bidiStreamingCall
(
ApiStreamObserver<ResponseT>
responseObserver
)
Deprecated. Please use <xref uid="com.google.api.gax.rpc.BidiStreamingCallable.splitCall(com.google.api.gax.rpc.ResponseObserver<ResponseT>)" data-throw-if-not-resolved="false">#splitCall(ResponseObserver) instead.
Conduct a bidirectional streaming call
responseObserver
ApiStreamObserver
< RequestT
>
ApiStreamObserver which is used for making streaming requests.
bidiStreamingCall(ApiStreamObserver<ResponseT> responseObserver, ApiCallContext context) (deprecated)
public
ApiStreamObserver<RequestT>
bidiStreamingCall
(
ApiStreamObserver<ResponseT>
responseObserver
,
ApiCallContext
context
)
Deprecated. Please use <xref uid="com.google.api.gax.rpc.BidiStreamingCallable.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 streaming call with the given ApiCallContext .
responseObserver
context
ApiStreamObserver
< RequestT
>
ApiStreamObserver which is used for making streaming 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
=
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(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.
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
();
}
};
bidiStreamingCallable
.
call
(
bidiStreamObserver
);
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.
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 call
s 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.
responseObserver
ResponseObserver
< ResponseT
>
onReady
ClientStreamReadyObserver
< RequestT
>
context
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
=
bidiStreamingCallable
.
splitCall
(
responseObserver
);
clientStream
.
send
(
42
);
clientStream
.
send
(
43
);
clientStream
.
close
();
splitCall(ResponseObserver<ResponseT> responseObserver, ApiCallContext context)
public
ClientStream<RequestT>
splitCall
(
ResponseObserver<ResponseT>
responseObserver
,
ApiCallContext
context
)
Send requests to the server and listens to responses.
withDefaultCallContext(ApiCallContext defaultCallContext)
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.

