From b39adf0c03cf32df2fdef3a8ecf820f992099263 Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 12 Oct 2012 17:02:15 +0400 Subject: [PATCH] Exception handling & packet decoding bug fixed --- .../java/com/corundumstudio/socketio/SocketIOEncoder.java | 6 +++++- .../com/corundumstudio/socketio/handler/PacketHandler.java | 6 ++++++ .../java/com/corundumstudio/socketio/parser/Decoder.java | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java b/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java index a855fd7..c100411 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java @@ -196,7 +196,11 @@ public class SocketIOEncoder extends SimpleChannelDownstreamHandler implements M WebSocketFrame res = new TextWebSocketFrame(message); log.trace("Out message: {} sessionId: {}", new Object[] { message.toString(CharsetUtil.UTF_8), webSocketPacketMessage.getSessionId()}); - channel.write(res); + if (channel.isOpen()) { + channel.write(res); + } else { + log.trace("Channel was closed, for sessionId: {}", webSocketPacketMessage.getSessionId()); + } } @Override diff --git a/src/main/java/com/corundumstudio/socketio/handler/PacketHandler.java b/src/main/java/com/corundumstudio/socketio/handler/PacketHandler.java index 031a170..9d2d4bf 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/PacketHandler.java +++ b/src/main/java/com/corundumstudio/socketio/handler/PacketHandler.java @@ -20,6 +20,7 @@ import java.util.Collections; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.ChannelHandler.Sharable; import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.ExceptionEvent; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.channel.SimpleChannelUpstreamHandler; import org.jboss.netty.util.CharsetUtil; @@ -76,4 +77,9 @@ public class PacketHandler extends SimpleChannelUpstreamHandler { } } + @Override + public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { + log.error("Exception occurs", e.getCause()); + } + } diff --git a/src/main/java/com/corundumstudio/socketio/parser/Decoder.java b/src/main/java/com/corundumstudio/socketio/parser/Decoder.java index 13a828b..4ba5549 100644 --- a/src/main/java/com/corundumstudio/socketio/parser/Decoder.java +++ b/src/main/java/com/corundumstudio/socketio/parser/Decoder.java @@ -227,6 +227,7 @@ public class Decoder { break; } + buffer.readerIndex(buffer.readerIndex() + buffer.readableBytes()); return packet; }