Class HandlerPublisher<T>
- Type Parameters:
T- The publisher type
- All Implemented Interfaces:
HotObservable<T>,io.netty.channel.ChannelHandler,io.netty.channel.ChannelInboundHandler,io.netty.channel.ChannelOutboundHandler,org.reactivestreams.Publisher<T>
This publisher supports only one subscriber.
All interactions with the subscriber are done from the handlers executor, hence, they provide the same happens before semantics that Netty provides.
The handler publishes all messages that match the type as specified by the passed in class. Any non matching messages are forwarded to the next handler.
The publisher will signal complete if it receives a channel inactive event.
The publisher will release any messages that it drops (for example, messages that are buffered when the subscriber cancels), but other than that, it does not release any messages. It is up to the subscriber to release messages.
If the subscriber cancels, the publisher will send a close event up the channel pipeline.
All errors will short circuit the buffer, and cause publisher to immediately call the subscribers onError method, dropping the buffer.
The publisher can be subscribed to or placed in a handler chain in any order.
- Since:
- 1.0
-
Nested Class Summary
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
io.netty.channel.ChannelHandler.Sharable -
Constructor Summary
ConstructorsConstructorDescriptionHandlerPublisher(io.netty.util.concurrent.EventExecutor executor) Create a handler publisher. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract booleanReturnstrueif the given message should be handled.protected voidOverride to handle when a subscriber cancels the subscription.voidchannelActive(io.netty.channel.ChannelHandlerContext ctx) voidchannelInactive(io.netty.channel.ChannelHandlerContext ctx) voidchannelRead(io.netty.channel.ChannelHandlerContext ctx, Object message) voidchannelRegistered(io.netty.channel.ChannelHandlerContext ctx) voidReleases buffered data if there is no subscriber.voidexceptionCaught(io.netty.channel.ChannelHandlerContext ctx, Throwable cause) voidhandlerAdded(io.netty.channel.ChannelHandlerContext ctx) voidhandlerRemoved(io.netty.channel.ChannelHandlerContext ctx) protected voidOverride to intercept when demand is requested.voidMethods inherited from class io.netty.channel.ChannelDuplexHandler
bind, close, connect, deregister, disconnect, flush, read, writeMethods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelReadComplete, channelUnregistered, channelWritabilityChanged, userEventTriggeredMethods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, isSharable
-
Constructor Details
-
HandlerPublisher
public HandlerPublisher(io.netty.util.concurrent.EventExecutor executor) Create a handler publisher.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 subscriber on.
-
-
Method Details
-
subscribe
- Specified by:
subscribein interfaceorg.reactivestreams.Publisher<T>
-
acceptInboundMessage
Returnstrueif the given message should be handled. Iffalseit will be passed to the nextChannelInboundHandlerin theChannelPipeline.- Parameters:
msg- The message to check.- Returns:
- True if the message should be accepted.
-
cancelled
protected void cancelled()Override to handle when a subscriber cancels the subscription.By default, this method will simply close the channel.
-
requestDemand
protected void requestDemand()Override to intercept when demand is requested.By default, a channel read is invoked.
-
handlerAdded
public void handlerAdded(io.netty.channel.ChannelHandlerContext ctx) - Specified by:
handlerAddedin interfaceio.netty.channel.ChannelHandler- Overrides:
handlerAddedin classio.netty.channel.ChannelHandlerAdapter
-
channelRegistered
public void channelRegistered(io.netty.channel.ChannelHandlerContext ctx) - Specified by:
channelRegisteredin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelRegisteredin classio.netty.channel.ChannelInboundHandlerAdapter
-
channelActive
public void channelActive(io.netty.channel.ChannelHandlerContext ctx) - Specified by:
channelActivein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelActivein classio.netty.channel.ChannelInboundHandlerAdapter
-
channelRead
- Specified by:
channelReadin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelReadin classio.netty.channel.ChannelInboundHandlerAdapter
-
channelInactive
public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) - Specified by:
channelInactivein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelInactivein classio.netty.channel.ChannelInboundHandlerAdapter
-
handlerRemoved
public void handlerRemoved(io.netty.channel.ChannelHandlerContext ctx) - Specified by:
handlerRemovedin interfaceio.netty.channel.ChannelHandler- Overrides:
handlerRemovedin classio.netty.channel.ChannelHandlerAdapter
-
exceptionCaught
- Specified by:
exceptionCaughtin interfaceio.netty.channel.ChannelHandler- Specified by:
exceptionCaughtin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
exceptionCaughtin classio.netty.channel.ChannelInboundHandlerAdapter
-
closeIfNoSubscriber
public void closeIfNoSubscriber()Description copied from interface:HotObservableReleases buffered data if there is no subscriber.- Specified by:
closeIfNoSubscriberin interfaceHotObservable<T>
-