Class HandlerSubscriber<T>

java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.channel.ChannelDuplexHandler
org.playframework.netty.HandlerSubscriber<T>
All Implemented Interfaces:
io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler, io.netty.channel.ChannelOutboundHandler, org.reactivestreams.Subscriber<T>

public class HandlerSubscriber<T> extends io.netty.channel.ChannelDuplexHandler implements org.reactivestreams.Subscriber<T>
Subscriber that publishes received messages to the handler pipeline.
  • Field Details

    • DEFAULT_LOW_WATERMARK

      static final long DEFAULT_LOW_WATERMARK
      See Also:
    • DEFAULT_HIGH_WATERMARK

      static final long DEFAULT_HIGH_WATERMARK
      See Also:
    • executor

      private final io.netty.util.concurrent.EventExecutor executor
    • demandLowWatermark

      private final long demandLowWatermark
    • demandHighWatermark

      private final long demandHighWatermark
    • hasSubscription

      private final AtomicBoolean hasSubscription
    • subscription

      private volatile org.reactivestreams.Subscription subscription
    • ctx

      private volatile io.netty.channel.ChannelHandlerContext ctx
    • state

      private HandlerSubscriber.State state
    • outstandingDemand

      private long outstandingDemand
    • lastWriteFuture

      private io.netty.channel.ChannelFuture lastWriteFuture
  • Constructor Details

    • HandlerSubscriber

      public HandlerSubscriber(io.netty.util.concurrent.EventExecutor executor, long demandLowWatermark, long demandHighWatermark)
      Create a new handler subscriber. The supplied executor must be the same event loop as the event loop that this handler is eventually registered with, if not, an exception will be thrown when the handler is registered.
      Parameters:
      executor - The executor to execute asynchronous events from the publisher on.
      demandLowWatermark - The low watermark for demand. When demand drops below this, more will be requested.
      demandHighWatermark - The high watermark for demand. This is the maximum that will be requested.
    • HandlerSubscriber

      public HandlerSubscriber(io.netty.util.concurrent.EventExecutor executor)
      Create a new handler subscriber with the default low and high watermarks. The supplied executor must be the same event loop as the event loop that this handler is eventually registered with, if not, an exception will be thrown when the handler is registered.
      Parameters:
      executor - The executor to execute asynchronous events from the publisher on.
      See Also:
  • Method Details

    • error

      protected void error(Throwable error)
      Override for custom error handling. By default, it closes the channel.
      Parameters:
      error - The error to handle.
    • complete

      protected void complete()
      Override for custom completion handling. By default, it closes the channel.
    • handlerAdded

      public void handlerAdded(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      handlerAdded in interface io.netty.channel.ChannelHandler
      Overrides:
      handlerAdded in class io.netty.channel.ChannelHandlerAdapter
      Throws:
      Exception
    • channelRegistered

      public void channelRegistered(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      channelRegistered in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelRegistered in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • verifyRegisteredWithRightExecutor

      private void verifyRegisteredWithRightExecutor(io.netty.channel.ChannelHandlerContext ctx)
    • channelWritabilityChanged

      public void channelWritabilityChanged(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      channelWritabilityChanged in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelWritabilityChanged in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • channelActive

      public void channelActive(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      channelActive in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelActive in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • channelInactive

      public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      channelInactive in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelInactive in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • handlerRemoved

      public void handlerRemoved(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      handlerRemoved in interface io.netty.channel.ChannelHandler
      Overrides:
      handlerRemoved in class io.netty.channel.ChannelHandlerAdapter
      Throws:
      Exception
    • exceptionCaught

      public void exceptionCaught(io.netty.channel.ChannelHandlerContext ctx, Throwable cause) throws Exception
      Specified by:
      exceptionCaught in interface io.netty.channel.ChannelHandler
      Specified by:
      exceptionCaught in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      exceptionCaught in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • cancel

      private void cancel()
    • onSubscribe

      public void onSubscribe(org.reactivestreams.Subscription subscription)
      Specified by:
      onSubscribe in interface org.reactivestreams.Subscriber<T>
    • provideSubscription

      private void provideSubscription()
    • maybeStart

      private void maybeStart()
    • onNext

      public void onNext(T t)
      Specified by:
      onNext in interface org.reactivestreams.Subscriber<T>
    • onError

      public void onError(Throwable error)
      Specified by:
      onError in interface org.reactivestreams.Subscriber<T>
    • onComplete

      public void onComplete()
      Specified by:
      onComplete in interface org.reactivestreams.Subscriber<T>
    • doClose

      private void doClose()
    • maybeRequestMore

      private void maybeRequestMore()