Example usage for io.netty.handler.codec.http.websocketx WebSocketFrame release

List of usage examples for io.netty.handler.codec.http.websocketx WebSocketFrame release

Introduction

In this page you can find the example usage for io.netty.handler.codec.http.websocketx WebSocketFrame release.

Prototype

@Override
    public boolean release() 

Source Link

Usage

From source file:io.scalecube.socketio.pipeline.WebSocketHandler.java

License:Apache License

private void handleWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame msg) throws Exception {
    if (log.isDebugEnabled())
        log.debug("Received {} WebSocketFrame: {} from channel: {}", getTransportType().getName(), msg,
                ctx.channel());//from w  ww .  ja va  2  s .  c o  m

    if (msg instanceof CloseWebSocketFrame) {
        sessionIdByChannel.remove(ctx.channel());
        ChannelFuture f = ctx.writeAndFlush(msg);
        f.addListener(ChannelFutureListener.CLOSE);
        return;
    } else if (msg instanceof PingWebSocketFrame) {
        ctx.writeAndFlush(new PongWebSocketFrame(msg.content()));
        return;
    } else if (!(msg instanceof TextWebSocketFrame)) {
        msg.release();
        log.warn(String.format("%s frame types not supported", msg.getClass().getName()));
        return;
    }

    TextWebSocketFrame frame = (TextWebSocketFrame) msg;
    Packet packet = PacketDecoder.decodePacket(frame.content());
    packet.setTransportType(getTransportType());
    String sessionId = sessionIdByChannel.get(ctx.channel());
    packet.setSessionId(sessionId);
    msg.release();
    ctx.fireChannelRead(packet);
}

From source file:jlibs.wamp4j.netty.NettyWebSocket.java

License:Apache License

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    if (msg instanceof WebSocketFrame) {
        WebSocketFrame frame = (WebSocketFrame) msg;
        try {//from  w  ww.  jav a2 s. co  m
            if (frame instanceof TextWebSocketFrame || frame instanceof BinaryWebSocketFrame) {
                if (listener != null) {
                    MessageType type = frame instanceof TextWebSocketFrame ? MessageType.text
                            : MessageType.binary;
                    is.reset(frame.content());
                    listener.onMessage(this, type, is);
                }
            } else if (frame instanceof PingWebSocketFrame)
                ctx.write(new PongWebSocketFrame(frame.content().retain()));
            else if (frame instanceof CloseWebSocketFrame)
                handshaker.close(ctx.channel(), (CloseWebSocketFrame) frame.retain());
        } finally {
            frame.release();
        }
    } else
        ctx.fireChannelRead(msg);
}

From source file:org.asynchttpclient.netty.handler.WebSocketHandler.java

License:Open Source License

@Override
public void handleRead(Channel channel, NettyResponseFuture<?> future, Object e) throws Exception {

    if (e instanceof HttpResponse) {
        HttpResponse response = (HttpResponse) e;
        if (logger.isDebugEnabled()) {
            HttpRequest httpRequest = future.getNettyRequest().getHttpRequest();
            logger.debug("\n\nRequest {}\n\nResponse {}\n", httpRequest, response);
        }/*from   www  . j  av a2  s  .c om*/

        WebSocketUpgradeHandler handler = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler());
        HttpResponseStatus status = new NettyResponseStatus(future.getUri(), config, response, channel);
        HttpResponseHeaders responseHeaders = new HttpResponseHeaders(response.headers());

        if (!interceptors.exitAfterIntercept(channel, future, handler, response, status, responseHeaders)) {
            Channels.setAttribute(channel,
                    new UpgradeCallback(future, channel, response, handler, status, responseHeaders));
        }

    } else if (e instanceof WebSocketFrame) {
        final WebSocketFrame frame = (WebSocketFrame) e;
        WebSocketUpgradeHandler handler = (WebSocketUpgradeHandler) future.getAsyncHandler();
        NettyWebSocket webSocket = (NettyWebSocket) handler.onCompleted();

        if (webSocket != null) {
            handleFrame(channel, frame, handler, webSocket);
        } else {
            logger.debug("Frame received but WebSocket is not available yet, buffering frame");
            frame.retain();
            Runnable bufferedFrame = new Runnable() {
                public void run() {
                    try {
                        // WebSocket is now not null
                        NettyWebSocket webSocket = (NettyWebSocket) handler.onCompleted();
                        handleFrame(channel, frame, handler, webSocket);
                    } catch (Exception e) {
                        logger.debug("Failure while handling buffered frame", e);
                        handler.onFailure(e);
                    } finally {
                        frame.release();
                    }
                };
            };
            handler.bufferFrame(bufferedFrame);
        }
    } else {
        logger.error("Invalid message {}", e);
    }
}