Class DelayedClientCall<ReqT,RespT>
ClientCall itself doesn't require thread-safety. However, the state of
DelayedCall may be internally altered by different threads, thus internal synchronization is
necessary.
-
Nested Class Summary
Nested classes/interfaces inherited from class ClientCall
ClientCall.Listener<T> -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedDelayedClientCall(Executor callExecutor, ScheduledExecutorService scheduler, Deadline deadline) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidfinal voidPrevent any further processing for thisClientCall.final AttributesReturns additional properties of the call.final voidClose the call for request message sending.final booleanisReady()Iftrue, indicates that the call is capable of sending additional messages without requiring excessive buffering internally.final voidrequest(int numMessages) Requests up to the given number of messages from the call to be delivered toClientCall.Listener.onMessage(Object).final voidsendMessage(ReqT message) Send a request message to the server.final RunnablesetCall(ClientCall<ReqT, RespT> call) Transfers all pending and future requests and mutations to the given call.final voidsetMessageCompression(boolean enable) Enables per-message compression, if an encoding type has been negotiated.final voidstart(ClientCall.Listener<RespT> listener, Metadata headers) Start a call, usingresponseListenerfor processing response messages.toString()
-
Constructor Details
-
DelayedClientCall
protected DelayedClientCall(Executor callExecutor, ScheduledExecutorService scheduler, @Nullable Deadline deadline)
-
-
Method Details
-
setCall
Transfers all pending and future requests and mutations to the given call.No-op if either this method or
cancel(String, Throwable)have already been called. -
start
Description copied from class:ClientCallStart a call, usingresponseListenerfor processing response messages.It must be called prior to any other method on this class, except for
ClientCall.cancel(String, Throwable)which may be called at any time.Since
Metadatais not thread-safe, the caller must not access (read or write)headersafter this point.- Specified by:
startin classClientCall<ReqT,RespT> - Parameters:
listener- receives response messagesheaders- which can contain extra call metadata, e.g. authentication credentials.
-
cancel
Description copied from class:ClientCallPrevent any further processing for thisClientCall. No further messages may be sent or will be received. The server is informed of cancellations, but may not stop processing the call. Cancellation is permitted even if previouslyClientCall.halfClose()d. Cancelling an alreadycancel()edClientCallhas no effect.No other methods on this class can be called after this method has been called.
It is recommended that at least one of the arguments to be non-
null, to provide useful debug information. Both argument being null may log warnings and result in suboptimal performance. Also note that the provided information will not be sent to the server.- Specified by:
cancelin classClientCall<ReqT,RespT> - Parameters:
message- if notnull, will appear as the description of the CANCELLED statuscause- if notnull, will appear as the cause of the CANCELLED status
-
callCancelled
protected void callCancelled() -
sendMessage
Description copied from class:ClientCallSend a request message to the server. May be called zero or more times depending on how many messages the server is willing to accept for the operation.- Specified by:
sendMessagein classClientCall<ReqT,RespT> - Parameters:
message- message to be sent to the server.
-
setMessageCompression
public final void setMessageCompression(boolean enable) Description copied from class:ClientCallEnables per-message compression, if an encoding type has been negotiated. If no message encoding has been negotiated, this is a no-op. By default per-message compression is enabled, but may not have any effect if compression is not enabled on the call.- Overrides:
setMessageCompressionin classClientCall<ReqT,RespT>
-
request
public final void request(int numMessages) Description copied from class:ClientCallRequests up to the given number of messages from the call to be delivered toClientCall.Listener.onMessage(Object). No additional messages will be delivered.Message delivery is guaranteed to be sequential in the order received. In addition, the listener methods will not be accessed concurrently. While it is not guaranteed that the same thread will always be used, it is guaranteed that only a single thread will access the listener at a time.
If it is desired to bypass inbound flow control, a very large number of messages can be specified (e.g.
Integer.MAX_VALUE).If called multiple times, the number of messages able to delivered will be the sum of the calls.
This method is safe to call from multiple threads without external synchronization.
- Specified by:
requestin classClientCall<ReqT,RespT> - Parameters:
numMessages- the requested number of messages to be delivered to the listener. Must be non-negative.
-
halfClose
public final void halfClose()Description copied from class:ClientCallClose the call for request message sending. Incoming response messages are unaffected. This should be called when no more messages will be sent from the client.- Specified by:
halfClosein classClientCall<ReqT,RespT>
-
isReady
public final boolean isReady()Description copied from class:ClientCallIftrue, indicates that the call is capable of sending additional messages 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 call.If
false,ClientCall.Listener.onReady()will be called afterisReady()transitions totrue.If the type of the call is either
MethodDescriptor.MethodType.UNARYorMethodDescriptor.MethodType.SERVER_STREAMING, this method may persistently return false. Calls that send exactly one message should not check this method.This abstract class's implementation always returns
true. Implementations generally override the method.- Overrides:
isReadyin classClientCall<ReqT,RespT>
-
getAttributes
Description copied from class:ClientCallReturns additional properties of the call. May only be called afterClientCall.Listener.onHeaders(Metadata)orClientCall.Listener.onClose(Status, Metadata). If called prematurely, the implementation may throwIllegalStateExceptionor return arbitraryAttributes.- Overrides:
getAttributesin classClientCall<ReqT,RespT> - Returns:
- non-
nullattributes
-
toString
-