Class 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.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      (package private) static class  HandlerSubscriber.State  
      • Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler

        io.netty.channel.ChannelHandler.Sharable
    • Constructor Summary

      Constructors 
      Constructor Description
      HandlerSubscriber​(io.netty.util.concurrent.EventExecutor executor)
      Create a new handler subscriber with the default low and high watermarks.
      HandlerSubscriber​(io.netty.util.concurrent.EventExecutor executor, long demandLowWatermark, long demandHighWatermark)
      Create a new handler subscriber.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void cancel()  
      void channelActive​(io.netty.channel.ChannelHandlerContext ctx)  
      void channelInactive​(io.netty.channel.ChannelHandlerContext ctx)  
      void channelRegistered​(io.netty.channel.ChannelHandlerContext ctx)  
      void channelWritabilityChanged​(io.netty.channel.ChannelHandlerContext ctx)  
      protected void complete()
      Override for custom completion handling.
      private void doClose()  
      protected void error​(java.lang.Throwable error)
      Override for custom error handling.
      void exceptionCaught​(io.netty.channel.ChannelHandlerContext ctx, java.lang.Throwable cause)  
      void handlerAdded​(io.netty.channel.ChannelHandlerContext ctx)  
      void handlerRemoved​(io.netty.channel.ChannelHandlerContext ctx)  
      private void maybeRequestMore()  
      private void maybeStart()  
      void onComplete()  
      void onError​(java.lang.Throwable error)  
      void onNext​(T t)  
      void onSubscribe​(org.reactivestreams.Subscription subscription)  
      private void provideSubscription()  
      private void verifyRegisteredWithRightExecutor​(io.netty.channel.ChannelHandlerContext ctx)  
      • Methods inherited from class io.netty.channel.ChannelDuplexHandler

        bind, close, connect, deregister, disconnect, flush, read, write
      • Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter

        channelRead, channelReadComplete, channelUnregistered, userEventTriggered
      • Methods inherited from class io.netty.channel.ChannelHandlerAdapter

        ensureNotSharable, isSharable
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • executor

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

        private final long demandLowWatermark
      • demandHighWatermark

        private final long demandHighWatermark
      • hasSubscription

        private final java.util.concurrent.atomic.AtomicBoolean hasSubscription
      • subscription

        private volatile org.reactivestreams.Subscription subscription
      • ctx

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

        private long outstandingDemand
      • lastWriteFuture

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

      • 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:
        HandlerSubscriber(EventExecutor, long, long)
    • Method Detail

      • error

        protected void error​(java.lang.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 java.lang.Exception
        Specified by:
        handlerAdded in interface io.netty.channel.ChannelHandler
        Overrides:
        handlerAdded in class io.netty.channel.ChannelHandlerAdapter
        Throws:
        java.lang.Exception
      • channelRegistered

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

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

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

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

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

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

        public void exceptionCaught​(io.netty.channel.ChannelHandlerContext ctx,
                                    java.lang.Throwable cause)
                             throws java.lang.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:
        java.lang.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​(java.lang.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()