Class ConcatenatingSubscriber

java.lang.Object
io.micronaut.http.body.ConcatenatingSubscriber
All Implemented Interfaces:
BufferConsumer, BufferConsumer.Upstream, Subscriber<ByteBody>, reactor.core.CoreSubscriber<ByteBody>

@Internal public class ConcatenatingSubscriber extends Object implements BufferConsumer.Upstream, reactor.core.CoreSubscriber<ByteBody>, BufferConsumer
This is a reactive subscriber that accepts ByteBodys and concatenates them into a single BaseSharedBuffer, optionally with separators.
Since:
4.8.0
Author:
Jonas Konrad
  • Field Details

  • Constructor Details

  • Method Details

    • concatenate

      public static CloseableByteBody concatenate(ByteBodyFactory byteBodyFactory, Publisher<ByteBody> publisher, ConcatenatingSubscriber.Separators separators)
    • onSubscribe

      public final void onSubscribe(Subscription s)
      Specified by:
      onSubscribe in interface reactor.core.CoreSubscriber<ByteBody>
      Specified by:
      onSubscribe in interface Subscriber<ByteBody>
    • onComplete

      public final void onComplete()
      Specified by:
      onComplete in interface Subscriber<ByteBody>
    • onError

      public final void onError(Throwable t)
      Specified by:
      onError in interface Subscriber<ByteBody>
    • forward

      @Nullable protected final BufferConsumer.Upstream forward(ByteBody body)
      Forward the given body to the shared buffer.
      Parameters:
      body - The body
      Returns:
      The BufferConsumer.Upstream to control component backpressure, or null if all bytes were written immediately (as is the case for an AvailableByteBody)
    • onForward

      protected final void onForward(long n)
      Should be called by the subclass when bytes are sent to the sharedBuffer, for onBytesConsumed(long) accounting.
      Parameters:
      n - The number of bytes forwarded
    • onNext

      public final void onNext(ByteBody body)
      Specified by:
      onNext in interface Subscriber<ByteBody>
    • start

      public final void start()
      Description copied from interface: BufferConsumer.Upstream
      Signal that we want to start consuming bytes. This is an optional hint to the upstream, the upstream may ignore it and send bytes immediately. This is used for CONTINUE support.
      Specified by:
      start in interface BufferConsumer.Upstream
    • onBytesConsumed

      public final void onBytesConsumed(long bytesConsumed)
      Description copied from interface: BufferConsumer.Upstream
      Called when a number of bytes has been consumed by the downstream. Note that this can exceed the actual number of bytes written so far, if the downstream wants to signal it is ready consume much more data.
      Specified by:
      onBytesConsumed in interface BufferConsumer.Upstream
      Parameters:
      bytesConsumed - The number of bytes that were consumed
    • allowDiscard

      public final void allowDiscard()
      Description copied from interface: BufferConsumer.Upstream
      Allow the upstream to discard any further messages. Note that this does not actually mean the messages must be discarded: If another consumer still needs the body data, it may continue to be read and continue to be forwarded to this consumer.
      Specified by:
      allowDiscard in interface BufferConsumer.Upstream
    • disregardBackpressure

      public final void disregardBackpressure()
      Description copied from interface: BufferConsumer.Upstream
      Instruct the upstream to ignore backpressure from this consumer. This is slightly different from onBytesConsumed(Long.MAX_VALUE): If there are two consumers in ByteBody.SplitBackpressureMode.FASTEST mode, a MAX_VALUE requests all data from the common upstream, while a disregardBackpressure removes this downstream from consideration.
      Specified by:
      disregardBackpressure in interface BufferConsumer.Upstream
    • add

      public void add(@NonNull @NonNull ReadBuffer buffer)
      Description copied from interface: BufferConsumer
      Send a buffer to this consumer. Ownership of the buffer transfers to the consumer.
      Specified by:
      add in interface BufferConsumer
      Parameters:
      buffer - The buffer
    • complete

      public final void complete()
      Description copied from interface: BufferConsumer
      Signal normal completion of the stream.
      Specified by:
      complete in interface BufferConsumer
    • error

      public final void error(Throwable e)
      Description copied from interface: BufferConsumer
      Signal an upstream error.
      Specified by:
      error in interface BufferConsumer
      Parameters:
      e - The error
    • forwardComplete

      protected void forwardComplete()
      Forward completion to the shared buffer.
    • forwardError

      protected void forwardError(Throwable t)
      Forward an error to the shared buffer.
      Parameters:
      t - The error