Package org.playframework.netty
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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classHandlerSubscriber.State
-
Field Summary
Fields Modifier and Type Field Description private io.netty.channel.ChannelHandlerContextctx(package private) static longDEFAULT_HIGH_WATERMARK(package private) static longDEFAULT_LOW_WATERMARKprivate longdemandHighWatermarkprivate longdemandLowWatermarkprivate io.netty.util.concurrent.EventExecutorexecutorprivate java.util.concurrent.atomic.AtomicBooleanhasSubscriptionprivate io.netty.channel.ChannelFuturelastWriteFutureprivate longoutstandingDemandprivate HandlerSubscriber.Statestateprivate org.reactivestreams.Subscriptionsubscription
-
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 voidcancel()voidchannelActive(io.netty.channel.ChannelHandlerContext ctx)voidchannelInactive(io.netty.channel.ChannelHandlerContext ctx)voidchannelRegistered(io.netty.channel.ChannelHandlerContext ctx)voidchannelWritabilityChanged(io.netty.channel.ChannelHandlerContext ctx)protected voidcomplete()Override for custom completion handling.private voiddoClose()protected voiderror(java.lang.Throwable error)Override for custom error handling.voidexceptionCaught(io.netty.channel.ChannelHandlerContext ctx, java.lang.Throwable cause)voidhandlerAdded(io.netty.channel.ChannelHandlerContext ctx)voidhandlerRemoved(io.netty.channel.ChannelHandlerContext ctx)private voidmaybeRequestMore()private voidmaybeStart()voidonComplete()voidonError(java.lang.Throwable error)voidonNext(T t)voidonSubscribe(org.reactivestreams.Subscription subscription)private voidprovideSubscription()private voidverifyRegisteredWithRightExecutor(io.netty.channel.ChannelHandlerContext ctx)-
Methods inherited from class io.netty.channel.ChannelDuplexHandler
bind, close, connect, deregister, disconnect, flush, read, write
-
-
-
-
Field Detail
-
DEFAULT_LOW_WATERMARK
static final long DEFAULT_LOW_WATERMARK
- See Also:
- Constant Field Values
-
DEFAULT_HIGH_WATERMARK
static final long DEFAULT_HIGH_WATERMARK
- See Also:
- Constant Field Values
-
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
-
state
private HandlerSubscriber.State state
-
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:
handlerAddedin interfaceio.netty.channel.ChannelHandler- Overrides:
handlerAddedin classio.netty.channel.ChannelHandlerAdapter- Throws:
java.lang.Exception
-
channelRegistered
public void channelRegistered(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception- Specified by:
channelRegisteredin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelRegisteredin classio.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:
channelWritabilityChangedin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelWritabilityChangedin classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
channelActive
public void channelActive(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception- Specified by:
channelActivein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelActivein classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
channelInactive
public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception- Specified by:
channelInactivein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelInactivein classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
handlerRemoved
public void handlerRemoved(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception- Specified by:
handlerRemovedin interfaceio.netty.channel.ChannelHandler- Overrides:
handlerRemovedin classio.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:
exceptionCaughtin interfaceio.netty.channel.ChannelHandler- Specified by:
exceptionCaughtin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
exceptionCaughtin classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
cancel
private void cancel()
-
onSubscribe
public void onSubscribe(org.reactivestreams.Subscription subscription)
- Specified by:
onSubscribein interfaceorg.reactivestreams.Subscriber<T>
-
provideSubscription
private void provideSubscription()
-
maybeStart
private void maybeStart()
-
onError
public void onError(java.lang.Throwable error)
- Specified by:
onErrorin interfaceorg.reactivestreams.Subscriber<T>
-
onComplete
public void onComplete()
- Specified by:
onCompletein interfaceorg.reactivestreams.Subscriber<T>
-
doClose
private void doClose()
-
maybeRequestMore
private void maybeRequestMore()
-
-