Package io.grpc.internal
Class AbstractServerStream.TransportState
- java.lang.Object
-
- io.grpc.internal.AbstractStream.TransportState
-
- io.grpc.internal.AbstractServerStream.TransportState
-
- All Implemented Interfaces:
ApplicationThreadDeframer.TransportExecutor
,ApplicationThreadDeframerListener.TransportExecutor
,MessageDeframer.Listener
- Direct Known Subclasses:
NettyServerStream.TransportState
,ServletServerStream.ServletTransportState
,ServletServerStream.ServletTransportState
- Enclosing class:
- AbstractServerStream
protected abstract static class AbstractServerStream.TransportState extends AbstractStream.TransportState
This should only be called from the transport thread (except for private interactions withAbstractServerStream
).
-
-
Field Summary
Fields Modifier and Type Field Description private Status
closedStatus
The status that the application used to close this stream.private boolean
deframerClosed
private java.lang.Runnable
deframerClosedTask
private boolean
endOfStream
private boolean
immediateCloseRequested
private ServerStreamListener
listener
private boolean
listenerClosed
Whether listener.closed() has been called.private StatsTraceContext
statsTraceCtx
-
Fields inherited from class io.grpc.internal.AbstractStream.TransportState
DEFAULT_ONREADY_THRESHOLD
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
TransportState(int maxMessageSize, StatsTraceContext statsTraceCtx, TransportTracer transportTracer)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
closeListener(Status newStatus)
Closes the listener if not previously closed and frees resources.void
complete()
Indicates the stream is considered completely closed and there is no further opportunity for error.void
deframerClosed(boolean hasPartialMessage)
Called when the deframer closes.void
inboundDataReceived(ReadableBuffer frame, boolean endOfStream)
Called in the transport thread to process the content of an inbound DATA frame from the client.protected ServerStreamListener
listener()
Override this method to provide a stream listener.void
onStreamAllocated()
Event handler to be called by the subclass when the stream's headers have passed any connection flow control (i.e., MAX_CONCURRENT_STREAMS).private void
setClosedStatus(Status closeStatus)
Stores theStatus
that the application used to close this stream.void
setListener(ServerStreamListener listener)
Sets the listener to receive notifications.void
transportReportStatus(Status status)
Notifies failure to the listener of the stream.-
Methods inherited from class io.grpc.internal.AbstractStream.TransportState
closeDeframer, deframe, getStatsTraceContext, getTransportTracer, isStreamDeallocated, messagesAvailable, onSentBytes, onStreamDeallocated, optimizeForDirectExecutor, requestMessagesFromDeframerForTesting, setDecompressor, setFullStreamDecompressor, setMaxInboundMessageSize, setOnReadyThreshold
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.grpc.internal.ApplicationThreadDeframerListener.TransportExecutor
runOnTransportThread
-
Methods inherited from interface io.grpc.internal.MessageDeframer.Listener
bytesRead, deframeFailed
-
-
-
-
Field Detail
-
listenerClosed
private boolean listenerClosed
Whether listener.closed() has been called.
-
listener
private ServerStreamListener listener
-
statsTraceCtx
private final StatsTraceContext statsTraceCtx
-
endOfStream
private boolean endOfStream
-
deframerClosed
private boolean deframerClosed
-
immediateCloseRequested
private boolean immediateCloseRequested
-
deframerClosedTask
private java.lang.Runnable deframerClosedTask
-
closedStatus
@Nullable private Status closedStatus
The status that the application used to close this stream.
-
-
Constructor Detail
-
TransportState
protected TransportState(int maxMessageSize, StatsTraceContext statsTraceCtx, TransportTracer transportTracer)
-
-
Method Detail
-
setListener
public final void setListener(ServerStreamListener listener)
Sets the listener to receive notifications. Must be called in the context of the transport thread.
-
onStreamAllocated
public final void onStreamAllocated()
Description copied from class:AbstractStream.TransportState
Event handler to be called by the subclass when the stream's headers have passed any connection flow control (i.e., MAX_CONCURRENT_STREAMS). It may call the listener'sStreamListener.onReady()
handler if appropriate. This must be called from the transport thread, since the listener may be called back directly.- Overrides:
onStreamAllocated
in classAbstractStream.TransportState
-
deframerClosed
public void deframerClosed(boolean hasPartialMessage)
Description copied from interface:MessageDeframer.Listener
Called when the deframer closes.- Parameters:
hasPartialMessage
- whether the deframer contained an incomplete message at closing.
-
listener
protected ServerStreamListener listener()
Description copied from class:AbstractStream.TransportState
Override this method to provide a stream listener.- Specified by:
listener
in classAbstractStream.TransportState
-
inboundDataReceived
public void inboundDataReceived(ReadableBuffer frame, boolean endOfStream)
Called in the transport thread to process the content of an inbound DATA frame from the client.- Parameters:
frame
- the inbound HTTP/2 DATA frame. If this buffer is not used immediately, it must be retained.endOfStream
-true
if no more data will be received on the stream.
-
transportReportStatus
public final void transportReportStatus(Status status)
Notifies failure to the listener of the stream. The transport is responsible for notifying the client of the failure independent of this method.Unlike
AbstractServerStream.close(Status, Metadata)
, this method is only called from the transport. The transport should use this method instead ofclose(Status)
for internal errors to prevent exposing unexpected states and exceptions to the application.- Parameters:
status
- the error status. Must not beStatus.OK
.
-
complete
public void complete()
Indicates the stream is considered completely closed and there is no further opportunity for error. It calls the listener'sclosed()
if it was not already done bytransportReportStatus(io.grpc.Status)
.
-
closeListener
private void closeListener(Status newStatus)
Closes the listener if not previously closed and frees resources.newStatus
is a status generated by gRPC. It is not the status the stream closed with.
-
setClosedStatus
private void setClosedStatus(Status closeStatus)
Stores theStatus
that the application used to close this stream.
-
-