Class WebSocketServerExtensionHandler
- java.lang.Object
-
- io.netty.channel.ChannelHandlerAdapter
-
- io.netty.channel.ChannelInboundHandlerAdapter
-
- io.netty.channel.ChannelDuplexHandler
-
- io.netty.handler.codec.http.websocketx.extensions.WebSocketServerExtensionHandler
-
- All Implemented Interfaces:
ChannelHandler
,ChannelInboundHandler
,ChannelOutboundHandler
- Direct Known Subclasses:
WebSocketServerCompressionHandler
public class WebSocketServerExtensionHandler extends ChannelDuplexHandler
This handler negotiates and initializes the WebSocket Extensions. It negotiates the extensions based on the client desired order, ensures that the successfully negotiated extensions are consistent between them, and initializes the channel pipeline with the extension decoder and encoder. Find a basic implementation for compression extensions at io.netty.handler.codec.http.websocketx.extensions.compression.WebSocketServerCompressionHandler.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Constructor Summary
Constructors Constructor Description WebSocketServerExtensionHandler(WebSocketServerExtensionHandshaker... extensionHandshakers)
Constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
channelRead(ChannelHandlerContext ctx, java.lang.Object msg)
CallsChannelHandlerContext.fireChannelRead(Object)
to forward to the nextChannelInboundHandler
in theChannelPipeline
.protected void
onHttpRequestChannelRead(ChannelHandlerContext ctx, HttpRequest request)
This is a method exposed to perform fail-fast checks of user-defined http types.protected void
onHttpResponseWrite(ChannelHandlerContext ctx, HttpResponse response, ChannelPromise promise)
This is a method exposed to perform fail-fast checks of user-defined http types.void
write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
CallsChannelOutboundInvoker.write(Object, ChannelPromise)
to forward to the nextChannelOutboundHandler
in theChannelPipeline
.-
Methods inherited from class io.netty.channel.ChannelDuplexHandler
bind, close, connect, deregister, disconnect, flush, read
-
Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelInactive, channelReadComplete, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
-
Methods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerAdded, handlerRemoved, isSharable
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.netty.channel.ChannelHandler
handlerAdded, handlerRemoved
-
-
-
-
Constructor Detail
-
WebSocketServerExtensionHandler
public WebSocketServerExtensionHandler(WebSocketServerExtensionHandshaker... extensionHandshakers)
Constructor- Parameters:
extensionHandshakers
- The extension handshaker in priority order. A handshaker could be repeated many times with fallback configuration.
-
-
Method Detail
-
channelRead
public void channelRead(ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapter
CallsChannelHandlerContext.fireChannelRead(Object)
to forward to the nextChannelInboundHandler
in theChannelPipeline
. Sub-classes may override this method to change behavior.- Specified by:
channelRead
in interfaceChannelInboundHandler
- Overrides:
channelRead
in classChannelInboundHandlerAdapter
- Throws:
java.lang.Exception
-
onHttpRequestChannelRead
protected void onHttpRequestChannelRead(ChannelHandlerContext ctx, HttpRequest request) throws java.lang.Exception
This is a method exposed to perform fail-fast checks of user-defined http types.eg:
If the user has defined a specificHttpRequest
type i.e.CustomHttpRequest
andchannelRead(io.netty.channel.ChannelHandlerContext, java.lang.Object)
can receiveLastHttpContent.EMPTY_LAST_CONTENT
msg
types too, can override it like this:public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg != LastHttpContent.EMPTY_LAST_CONTENT) { if (msg instanceof CustomHttpRequest) { onHttpRequestChannelRead(ctx, (CustomHttpRequest) msg); } else { // if it's handling other HttpRequest types it MUST use onHttpRequestChannelRead again // or have to delegate it to super.channelRead (that can perform redundant checks). // If msg is not implementing HttpRequest, it can call ctx.fireChannelRead(msg) on it // ... super.channelRead(ctx, msg); } } else { // given that msg isn't a HttpRequest type we can just skip calling super.channelRead ctx.fireChannelRead(msg); } }
IMPORTANT: It already callsuper.channelRead(ctx, request)
before returning.- Throws:
java.lang.Exception
-
write
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise) throws java.lang.Exception
Description copied from class:ChannelDuplexHandler
CallsChannelOutboundInvoker.write(Object, ChannelPromise)
to forward to the nextChannelOutboundHandler
in theChannelPipeline
. Sub-classes may override this method to change behavior.- Specified by:
write
in interfaceChannelOutboundHandler
- Overrides:
write
in classChannelDuplexHandler
- Parameters:
ctx
- theChannelHandlerContext
for which the write operation is mademsg
- the message to writepromise
- theChannelPromise
to notify once the operation completes- Throws:
java.lang.Exception
- thrown if an error occurs
-
onHttpResponseWrite
protected void onHttpResponseWrite(ChannelHandlerContext ctx, HttpResponse response, ChannelPromise promise) throws java.lang.Exception
This is a method exposed to perform fail-fast checks of user-defined http types.eg:
If the user has defined a specificHttpResponse
type i.e.CustomHttpResponse
andwrite(io.netty.channel.ChannelHandlerContext, java.lang.Object, io.netty.channel.ChannelPromise)
can receiveByteBuf
msg
types too, it can be overridden like this:public void write(final ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (msg != Unpooled.EMPTY_BUFFER && !(msg instanceof ByteBuf)) { if (msg instanceof CustomHttpResponse) { onHttpResponseWrite(ctx, (CustomHttpResponse) msg, promise); } else { // if it's handling other HttpResponse types it MUST use onHttpResponseWrite again // or have to delegate it to super.write (that can perform redundant checks). // If msg is not implementing HttpResponse, it can call ctx.write(msg, promise) on it // ... super.write(ctx, msg, promise); } } else { // given that msg isn't a HttpResponse type we can just skip calling super.write ctx.write(msg, promise); } }
IMPORTANT: It already callsuper.write(ctx, response, promise)
before returning.- Throws:
java.lang.Exception
-
-