Class ClientCall.Listener<T>
- java.lang.Object
-
- io.grpc.ClientCall.Listener<T>
-
- Type Parameters:
T
- type of message received.
- Direct Known Subclasses:
ForwardingClientCallListener
- Enclosing class:
- ClientCall<ReqT,RespT>
public abstract static class ClientCall.Listener<T> extends Object
Callbacks for receiving metadata, response messages and completion status from the server.Implementations are free to block for extended periods of time. Implementations are not required to be thread-safe, but they must not be thread-hostile. The caller is free to call an instance from multiple threads, but only one call simultaneously. A single thread may interleave calls to multiple instances, so implementations using ThreadLocals must be careful to avoid leaking inappropriate state (e.g., clearing the ThreadLocal before returning).
-
-
Constructor Summary
Constructors Constructor Description Listener()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
onClose(Status status, Metadata trailers)
The ClientCall has been closed.void
onHeaders(Metadata headers)
The response headers have been received.void
onMessage(T message)
A response message has been received.void
onReady()
This indicates that the ClientCall may now be capable of sending additional messages (viaClientCall.sendMessage(ReqT)
) without requiring excessive buffering internally.
-
-
-
Method Detail
-
onHeaders
public void onHeaders(Metadata headers)
The response headers have been received. Headers always precede messages.Since
Metadata
is not thread-safe, the caller must not access (read or write)headers
after this point.- Parameters:
headers
- containing metadata sent by the server at the start of the response.
-
onMessage
public void onMessage(T message)
A response message has been received. May be called zero or more times depending on whether the call response is empty, a single message or a stream of messages.- Parameters:
message
- returned by the server
-
onClose
public void onClose(Status status, Metadata trailers)
The ClientCall has been closed. Any additional calls to theClientCall
will not be processed by the server. No further receiving will occur and no further notifications will be made.Since
Metadata
is not thread-safe, the caller must not access (read or write)trailers
after this point.If
status
returns false forStatus.isOk()
, then the call failed. An additional block of trailer metadata may be received at the end of the call from the server. An emptyMetadata
object is passed if no trailers are received.This method should not throw. If this method throws, there is no way to be notified of the exception. Implementations should therefore be careful of exceptions which can accidentally leak resources.
- Parameters:
status
- the result of the remote call.trailers
- metadata provided at call completion.
-
onReady
public void onReady()
This indicates that the ClientCall may now be capable of sending additional messages (viaClientCall.sendMessage(ReqT)
) without requiring excessive buffering internally. This event is just a suggestion and the application is free to ignore it, however doing so may result in excessive buffering within the ClientCall.Because there is a processing delay to deliver this notification, it is possible for concurrent writes to cause
isReady() == false
within this callback. Handle "spurious" notifications by checkingisReady()
's current value instead of assuming it is nowtrue
. IfisReady() == false
the normal expectations apply, so there would be anotheronReady()
callback.If the type of a call is either
MethodDescriptor.MethodType.UNARY
orMethodDescriptor.MethodType.SERVER_STREAMING
, this callback may not be fired. Calls that send exactly one message should not await this callback.
-
-