Package io.grpc.internal
Class AbstractServerStream
java.lang.Object
io.grpc.internal.AbstractStream
io.grpc.internal.AbstractServerStream
- All Implemented Interfaces:
MessageFramer.Sink
,ServerStream
,Stream
public abstract class AbstractServerStream
extends AbstractStream
implements ServerStream, MessageFramer.Sink
Abstract base class for
ServerStream
implementations. Extending classes only need to
implement transportState()
and abstractServerStreamSink()
. Must only be called
from the sending application thread.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static interface
A sink for outbound operations, separated from the stream simply to avoid name collisions/confusion.protected static class
This should only be called from the transport thread (except for private interactions withAbstractServerStream
). -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AbstractServerStream
(WritableBufferAllocator bufferAllocator, StatsTraceContext statsTraceCtx) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract AbstractServerStream.Sink
Sink for transport to be called to perform outbound operations.final void
Tears down the stream, typically in the event of a timeout.final void
Closes the stream for both reading and writing.final void
deliverFrame
(WritableBuffer frame, boolean endOfStream, boolean flush, int numMessages) Delivers a frame via the transport.protected final MessageFramer
framer()
The framer to use for sending messages.Attributes describing stream.Gets the authority this stream is addressed to.final boolean
isReady()
Iftrue
, indicates that the transport is capable of sending additional messages without requiring excessive buffering internally.final void
setDecompressor
(Decompressor decompressor) Sets the decompressor on the deframer.final void
setListener
(ServerStreamListener serverStreamListener) Sets the server stream listener.void
setOnReadyThreshold
(int numBytes) A hint to the stream that specifies how many bytes must be queued beforeisReady()
will return false.The context for recording stats and traces for this stream.protected abstract AbstractServerStream.TransportState
Obtain the transport state corresponding to this stream.final void
writeHeaders
(Metadata headers, boolean flush) Writes custom metadata as headers on the response stream sent to the client.Methods inherited from class io.grpc.internal.AbstractStream
endOfMessages, flush, onSendingBytes, optimizeForDirectExecutor, request, setCompressor, setMessageCompression, writeMessage
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.ServerStream
streamId
Methods inherited from interface io.grpc.internal.Stream
flush, optimizeForDirectExecutor, request, setCompressor, setMessageCompression, writeMessage
-
Constructor Details
-
AbstractServerStream
protected AbstractServerStream(WritableBufferAllocator bufferAllocator, StatsTraceContext statsTraceCtx)
-
-
Method Details
-
transportState
Description copied from class:AbstractStream
Obtain the transport state corresponding to this stream. Each stream must have its own unique transport state.- Specified by:
transportState
in classAbstractStream
-
abstractServerStreamSink
Sink for transport to be called to perform outbound operations. Each stream must have its own unique sink. -
framer
Description copied from class:AbstractStream
The framer to use for sending messages.- Specified by:
framer
in classAbstractStream
-
writeHeaders
Description copied from interface:ServerStream
Writes custom metadata as headers on the response stream sent to the client. This method may only be called once and cannot be called after calls toStream.writeMessage(java.io.InputStream)
orServerStream.close(io.grpc.Status, io.grpc.Metadata)
.- Specified by:
writeHeaders
in interfaceServerStream
- Parameters:
headers
- to send to client.
-
deliverFrame
public final void deliverFrame(WritableBuffer frame, boolean endOfStream, boolean flush, int numMessages) Description copied from interface:MessageFramer.Sink
Delivers a frame via the transport.- Specified by:
deliverFrame
in interfaceMessageFramer.Sink
- Parameters:
frame
- a non-empty buffer to deliver ornull
if the framer is being closed and there is no data to deliver.endOfStream
- whether the frame is the last one for the GRPC streamflush
-true
if more data may not be arriving soonnumMessages
- the number of messages that this series of frames represents
-
close
Description copied from interface:ServerStream
Closes the stream for both reading and writing. A status code ofStatus.Code.OK
implies normal termination of the stream. Any other value implies abnormal termination.Attempts to read from or write to the stream after closing should be ignored by implementations, and should not throw exceptions.
- Specified by:
close
in interfaceServerStream
- Parameters:
status
- details of the closuretrailers
- an additional block of metadata to pass to the client on stream closure.
-
cancel
Description copied from interface:ServerStream
Tears down the stream, typically in the event of a timeout. This method may be called multiple times and from any thread.- Specified by:
cancel
in interfaceServerStream
-
isReady
public final boolean isReady()Description copied from interface:Stream
Iftrue
, indicates that the transport is capable of sending additional messages without requiring excessive buffering internally. Otherwise,StreamListener.onReady()
will be called when it turnstrue
.This is just a suggestion and the application is free to ignore it, however doing so may result in excessive buffering within the transport.
- Specified by:
isReady
in interfaceStream
- Overrides:
isReady
in classAbstractStream
-
setDecompressor
Description copied from interface:ServerStream
Sets the decompressor on the deframer. If the transport does not support compression, this may do nothing.- Specified by:
setDecompressor
in interfaceServerStream
- Parameters:
decompressor
- the decompressor to use.
-
getAttributes
Description copied from interface:ServerStream
Attributes describing stream. This is inherited from the transport attributes, and used as the basis ofServerCall.getAttributes()
.- Specified by:
getAttributes
in interfaceServerStream
- Returns:
- Attributes container
-
getAuthority
Description copied from interface:ServerStream
Gets the authority this stream is addressed to.- Specified by:
getAuthority
in interfaceServerStream
- Returns:
- the authority string.
null
if not available.
-
setListener
Description copied from interface:ServerStream
Sets the server stream listener.- Specified by:
setListener
in interfaceServerStream
-
statsTraceContext
Description copied from interface:ServerStream
The context for recording stats and traces for this stream.- Specified by:
statsTraceContext
in interfaceServerStream
-
setOnReadyThreshold
public void setOnReadyThreshold(int numBytes) A hint to the stream that specifies how many bytes must be queued beforeisReady()
will return false. A stream may ignore this property if unsupported. This may only be set before any messages are sent.- Specified by:
setOnReadyThreshold
in interfaceServerStream
- Overrides:
setOnReadyThreshold
in classAbstractStream
- Parameters:
numBytes
- The number of bytes that must be queued. Must be a positive integer.
-