Class AbstractClientStream

java.lang.Object
io.grpc.internal.AbstractStream
io.grpc.internal.AbstractClientStream
All Implemented Interfaces:
ClientStream, MessageFramer.Sink, Stream

public abstract class AbstractClientStream extends AbstractStream implements ClientStream, MessageFramer.Sink
The abstract base class for ClientStream implementations. Extending classes only need to implement transportState() and abstractClientStreamSink(). Must only be called from the sending application thread.
  • Constructor Details

  • Method Details

    • setDeadline

      public void setDeadline(Deadline deadline)
      Description copied from interface: ClientStream
      Sets the effective deadline of the RPC.
      Specified by:
      setDeadline in interface ClientStream
    • setMaxOutboundMessageSize

      public void setMaxOutboundMessageSize(int maxSize)
      Description copied from interface: ClientStream
      Sets the max size sent to the remote endpoint.
      Specified by:
      setMaxOutboundMessageSize in interface ClientStream
    • setMaxInboundMessageSize

      public void setMaxInboundMessageSize(int maxSize)
      Description copied from interface: ClientStream
      Sets the max size accepted from the remote endpoint.
      Specified by:
      setMaxInboundMessageSize in interface ClientStream
    • setFullStreamDecompression

      public final void setFullStreamDecompression(boolean fullStreamDecompression)
      Description copied from interface: ClientStream
      Enables full-stream decompression, allowing the client stream to use GzipInflatingBuffer to decode inbound GZIP compressed streams.
      Specified by:
      setFullStreamDecompression in interface ClientStream
    • setDecompressorRegistry

      public final void setDecompressorRegistry(DecompressorRegistry decompressorRegistry)
      Description copied from interface: ClientStream
      Sets the registry to find a decompressor for the framer. May only be called before ClientStream.start(io.grpc.internal.ClientStreamListener). If the transport does not support compression, this may do nothing.
      Specified by:
      setDecompressorRegistry in interface ClientStream
      Parameters:
      decompressorRegistry - the registry of decompressors for decoding responses
    • transportState

      protected abstract AbstractClientStream.TransportState transportState()
      Obtain the transport state corresponding to this stream. Each stream must have its own unique transport state.
      Specified by:
      transportState in class AbstractStream
    • start

      public final void start(ClientStreamListener listener)
      Description copied from interface: ClientStream
      Starts stream. This method may only be called once. It is safe to do latent initialization of the stream up until ClientStream.start(io.grpc.internal.ClientStreamListener) is called.

      This method should not throw any exceptions.

      Specified by:
      start in interface ClientStream
      Parameters:
      listener - non-null listener of stream events
    • abstractClientStreamSink

      protected abstract AbstractClientStream.Sink abstractClientStreamSink()
      Sink for transport to be called to perform outbound operations. Each stream must have its own unique sink.
    • framer

      protected final Framer framer()
      Description copied from class: AbstractStream
      The framer to use for sending messages.
      Specified by:
      framer in class AbstractStream
    • shouldBeCountedForInUse

      public final boolean shouldBeCountedForInUse()
      Returns true if this stream should be counted when determining the in-use state of the transport.
    • 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 interface MessageFramer.Sink
      Parameters:
      frame - a non-empty buffer to deliver or null if the framer is being closed and there is no data to deliver.
      endOfStream - whether the frame is the last one for the GRPC stream
      flush - true if more data may not be arriving soon
      numMessages - the number of messages that this series of frames represents
    • halfClose

      public final void halfClose()
      Description copied from interface: ClientStream
      Closes the local side of this stream and flushes any remaining messages. After this is called, no further messages may be sent on this stream, but additional messages may be received until the remote end-point is closed. This method may only be called once, and only after ClientStream.start(io.grpc.internal.ClientStreamListener).
      Specified by:
      halfClose in interface ClientStream
    • cancel

      public final void cancel(Status reason)
      Description copied from interface: ClientStream
      Abnormally terminates the stream. After calling this method, no further messages will be sent or received, however it may still be possible to receive buffered messages for a brief period until ClientStreamListener.closed(io.grpc.Status, io.grpc.internal.ClientStreamListener.RpcProgress, io.grpc.Metadata) is called. This method may only be called after ClientStream.start(io.grpc.internal.ClientStreamListener), but else is safe to be called at any time and multiple times and from any thread.
      Specified by:
      cancel in interface ClientStream
      Parameters:
      reason - must be non-OK
    • isReady

      public final boolean isReady()
      Description copied from interface: Stream
      If true, indicates that the transport is capable of sending additional messages without requiring excessive buffering internally. Otherwise, StreamListener.onReady() will be called when it turns true.

      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 interface Stream
      Overrides:
      isReady in class AbstractStream
    • appendTimeoutInsight

      public final void appendTimeoutInsight(InsightBuilder insight)
      Description copied from interface: ClientStream
      Append information that will be included in the locally generated DEADLINE_EXCEEDED errors to the given InsightBuilder, in order to tell the user about the state of the stream so that they can better diagnose the cause of the error.
      Specified by:
      appendTimeoutInsight in interface ClientStream
    • getTransportTracer

      protected TransportTracer getTransportTracer()