Interface ChannelHandlerContext
- All Superinterfaces:
AttributeMap, ChannelInboundInvoker, ChannelOutboundInvoker
public interface ChannelHandlerContext
extends AttributeMap, ChannelInboundInvoker, ChannelOutboundInvoker
Enables a A handler can have more than one
Please note that a
ChannelHandler to interact with its ChannelPipeline
and other handlers. Among other things a handler can notify the next ChannelHandler in the
ChannelPipeline as well as modify the ChannelPipeline it belongs to dynamically.
Notify
You can notify the closest handler in the sameChannelPipeline by calling one of the various methods
provided here.
Please refer to ChannelPipeline to understand how an event flows.
Modifying a pipeline
You can get theChannelPipeline your handler belongs to by calling
pipeline(). A non-trivial application could insert, remove, or
replace handlers in the pipeline dynamically at runtime.
Retrieving for later use
You can keep theChannelHandlerContext for later use, such as
triggering an event outside the handler methods, even from a different thread.
public class MyHandler extendsChannelDuplexHandler{ privateChannelHandlerContextctx; public void beforeAdd(ChannelHandlerContextctx) { this.ctx = ctx; } public void login(String username, password) { ctx.write(new LoginMessage(username, password)); } ... }
Storing stateful information
attr(AttributeKey) allow you to
store and access stateful information that is related with a ChannelHandler / Channel and its
context. Please refer to ChannelHandler to learn various recommended
ways to manage stateful information.
A handler can have more than one ChannelHandlerContext
Please note that a ChannelHandler instance can be added to more than
one ChannelPipeline. It means a single ChannelHandler
instance can have more than one ChannelHandlerContext and therefore
the single instance can be invoked with different
ChannelHandlerContexts if it is added to one or more ChannelPipelines more than once.
Also note that a ChannelHandler that is supposed to be added to multiple ChannelPipelines should
be marked as ChannelHandler.Sharable.
Additional resources worth reading
Please refer to the ChannelHandler, and
ChannelPipeline to find out more about inbound and outbound operations,
what fundamental differences they have, how they flow in a pipeline, and how to handle
the operation in your application.
-
Method Summary
Modifier and TypeMethodDescriptionalloc()Return the assignedByteBufAllocatorwhich will be used to allocateByteBufs.<T> Attribute<T> attr(AttributeKey<T> key) Deprecated.channel()Return theChannelwhich is bound to theChannelHandlerContext.executor()Returns theEventExecutorwhich is used to execute an arbitrary task.AChannelis active now, which means it is connected.AChannelis inactive now, which means it is closed.fireChannelRead(Object msg) AChannelreceived a message.Triggers anChannelInboundHandler.channelReadComplete(ChannelHandlerContext)event to the nextChannelInboundHandlerin theChannelPipeline.Triggers anChannelInboundHandler.channelWritabilityChanged(ChannelHandlerContext)event to the nextChannelInboundHandlerin theChannelPipeline.fireExceptionCaught(Throwable cause) AChannelreceived an user defined event.flush()Request to flush all pending messages via this ChannelOutboundInvoker.handler()TheChannelHandlerthat is bound thisChannelHandlerContext.<T> booleanhasAttr(AttributeKey<T> key) Deprecated.booleanReturntrueif theChannelHandlerwhich belongs to this context was removed from theChannelPipeline.name()The unique name of theChannelHandlerContext.The name was used when thenChannelHandlerwas added to theChannelPipeline.pipeline()Return the assignedChannelPipelineread()Request to Read data from theChannelinto the first inbound buffer, triggers anChannelInboundHandler.channelRead(ChannelHandlerContext, Object)event if data was read, and triggers achannelReadCompleteevent so the handler can decide to continue reading.Methods inherited from interface ChannelOutboundInvoker
bind, bind, close, close, connect, connect, connect, connect, deregister, deregister, disconnect, disconnect, newFailedFuture, newProgressivePromise, newPromise, newSucceededFuture, voidPromise, write, write, writeAndFlush, writeAndFlush
-
Method Details
-
channel
Channel channel()Return theChannelwhich is bound to theChannelHandlerContext. -
executor
EventExecutor executor()Returns theEventExecutorwhich is used to execute an arbitrary task. -
name
String name()The unique name of theChannelHandlerContext.The name was used when thenChannelHandlerwas added to theChannelPipeline. This name can also be used to access the registeredChannelHandlerfrom theChannelPipeline. -
handler
ChannelHandler handler()TheChannelHandlerthat is bound thisChannelHandlerContext. -
isRemoved
boolean isRemoved()Returntrueif theChannelHandlerwhich belongs to this context was removed from theChannelPipeline. Note that this method is only meant to be called from with in theEventLoop. -
fireChannelRegistered
ChannelHandlerContext fireChannelRegistered()Description copied from interface:ChannelInboundInvokerAChannelwas registered to itsEventLoop. This will result in having theChannelInboundHandler.channelRegistered(ChannelHandlerContext)method called of the nextChannelInboundHandlercontained in theChannelPipelineof theChannel.- Specified by:
fireChannelRegisteredin interfaceChannelInboundInvoker
-
fireChannelUnregistered
ChannelHandlerContext fireChannelUnregistered()Description copied from interface:ChannelInboundInvokerAChannelwas unregistered from itsEventLoop. This will result in having theChannelInboundHandler.channelUnregistered(ChannelHandlerContext)method called of the nextChannelInboundHandlercontained in theChannelPipelineof theChannel.- Specified by:
fireChannelUnregisteredin interfaceChannelInboundInvoker
-
fireChannelActive
ChannelHandlerContext fireChannelActive()Description copied from interface:ChannelInboundInvokerAChannelis active now, which means it is connected. This will result in having theChannelInboundHandler.channelActive(ChannelHandlerContext)method called of the nextChannelInboundHandlercontained in theChannelPipelineof theChannel.- Specified by:
fireChannelActivein interfaceChannelInboundInvoker
-
fireChannelInactive
ChannelHandlerContext fireChannelInactive()Description copied from interface:ChannelInboundInvokerAChannelis inactive now, which means it is closed. This will result in having theChannelInboundHandler.channelInactive(ChannelHandlerContext)method called of the nextChannelInboundHandlercontained in theChannelPipelineof theChannel.- Specified by:
fireChannelInactivein interfaceChannelInboundInvoker
-
fireExceptionCaught
Description copied from interface:ChannelInboundInvokerAChannelreceived anThrowablein one of its inbound operations. This will result in having theChannelInboundHandler.exceptionCaught(ChannelHandlerContext, Throwable)method called of the nextChannelInboundHandlercontained in theChannelPipelineof theChannel.- Specified by:
fireExceptionCaughtin interfaceChannelInboundInvoker
-
fireUserEventTriggered
Description copied from interface:ChannelInboundInvokerAChannelreceived an user defined event. This will result in having theChannelInboundHandler.userEventTriggered(ChannelHandlerContext, Object)method called of the nextChannelInboundHandlercontained in theChannelPipelineof theChannel.- Specified by:
fireUserEventTriggeredin interfaceChannelInboundInvoker
-
fireChannelRead
Description copied from interface:ChannelInboundInvokerAChannelreceived a message. This will result in having theChannelInboundHandler.channelRead(ChannelHandlerContext, Object)method called of the nextChannelInboundHandlercontained in theChannelPipelineof theChannel.- Specified by:
fireChannelReadin interfaceChannelInboundInvoker
-
fireChannelReadComplete
ChannelHandlerContext fireChannelReadComplete()Description copied from interface:ChannelInboundInvokerTriggers anChannelInboundHandler.channelReadComplete(ChannelHandlerContext)event to the nextChannelInboundHandlerin theChannelPipeline.- Specified by:
fireChannelReadCompletein interfaceChannelInboundInvoker
-
fireChannelWritabilityChanged
ChannelHandlerContext fireChannelWritabilityChanged()Description copied from interface:ChannelInboundInvokerTriggers anChannelInboundHandler.channelWritabilityChanged(ChannelHandlerContext)event to the nextChannelInboundHandlerin theChannelPipeline.- Specified by:
fireChannelWritabilityChangedin interfaceChannelInboundInvoker
-
read
ChannelHandlerContext read()Description copied from interface:ChannelOutboundInvokerRequest to Read data from theChannelinto the first inbound buffer, triggers anChannelInboundHandler.channelRead(ChannelHandlerContext, Object)event if data was read, and triggers achannelReadCompleteevent so the handler can decide to continue reading. If there's a pending read operation already, this method does nothing.This will result in having the
ChannelOutboundHandler.read(ChannelHandlerContext)method called of the nextChannelOutboundHandlercontained in theChannelPipelineof theChannel.- Specified by:
readin interfaceChannelOutboundInvoker
-
flush
ChannelHandlerContext flush()Description copied from interface:ChannelOutboundInvokerRequest to flush all pending messages via this ChannelOutboundInvoker.- Specified by:
flushin interfaceChannelOutboundInvoker
-
pipeline
ChannelPipeline pipeline()Return the assignedChannelPipeline -
alloc
ByteBufAllocator alloc()Return the assignedByteBufAllocatorwhich will be used to allocateByteBufs. -
attr
Deprecated.Description copied from interface:AttributeMapGet theAttributefor the givenAttributeKey. This method will never return null, but may return anAttributewhich does not have a value set yet.- Specified by:
attrin interfaceAttributeMap
-
hasAttr
Deprecated.Description copied from interface:AttributeMap- Specified by:
hasAttrin interfaceAttributeMap
-
AttributeMap.attr(AttributeKey)