diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java b/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java index 5797f59..f83e9fa 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java @@ -199,7 +199,7 @@ public class SocketIOEncoder extends SimpleChannelDownstreamHandler implements M if (channel.isOpen()) { channel.write(res); } else { - log.trace("Channel was closed, for sessionId: {}", webSocketPacketMessage.getSessionId()); + log.debug("Channel was closed, for sessionId: {}", webSocketPacketMessage.getSessionId()); } } diff --git a/src/main/java/com/corundumstudio/socketio/annotation/OnConnectScanner.java b/src/main/java/com/corundumstudio/socketio/annotation/OnConnectScanner.java index 8508309..f1c84c7 100644 --- a/src/main/java/com/corundumstudio/socketio/annotation/OnConnectScanner.java +++ b/src/main/java/com/corundumstudio/socketio/annotation/OnConnectScanner.java @@ -18,17 +18,13 @@ package com.corundumstudio.socketio.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.corundumstudio.socketio.SocketIOClient; +import com.corundumstudio.socketio.handler.SocketIOException; import com.corundumstudio.socketio.listener.ConnectListener; import com.corundumstudio.socketio.namespace.Namespace; public class OnConnectScanner implements AnnotationScanner { - private final Logger log = LoggerFactory.getLogger(getClass()); - public Class getScanAnnotation() { return OnConnect.class; } @@ -40,7 +36,7 @@ public class OnConnectScanner implements AnnotationScanner { try { method.invoke(object, client); } catch (Exception e) { - log.error("Can't invoke OnConnect listener on: " + clazz.getName() + ", method: " + method.getName(), e); + throw new SocketIOException(e); } } }); diff --git a/src/main/java/com/corundumstudio/socketio/annotation/OnDisconnectScanner.java b/src/main/java/com/corundumstudio/socketio/annotation/OnDisconnectScanner.java index 2223689..5aef37c 100644 --- a/src/main/java/com/corundumstudio/socketio/annotation/OnDisconnectScanner.java +++ b/src/main/java/com/corundumstudio/socketio/annotation/OnDisconnectScanner.java @@ -22,6 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.corundumstudio.socketio.SocketIOClient; +import com.corundumstudio.socketio.handler.SocketIOException; import com.corundumstudio.socketio.listener.DisconnectListener; import com.corundumstudio.socketio.namespace.Namespace; @@ -42,7 +43,7 @@ public class OnDisconnectScanner implements AnnotationScanner { try { method.invoke(object, client); } catch (Exception e) { - log.error("Can't invoke OnDisconnect listener on: " + clazz.getName() + ", method: " + method.getName(), e); + throw new SocketIOException(e); } } }); diff --git a/src/main/java/com/corundumstudio/socketio/annotation/OnEventScanner.java b/src/main/java/com/corundumstudio/socketio/annotation/OnEventScanner.java index ab4381f..e765dda 100644 --- a/src/main/java/com/corundumstudio/socketio/annotation/OnEventScanner.java +++ b/src/main/java/com/corundumstudio/socketio/annotation/OnEventScanner.java @@ -18,18 +18,14 @@ package com.corundumstudio.socketio.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.corundumstudio.socketio.AckRequest; import com.corundumstudio.socketio.SocketIOClient; +import com.corundumstudio.socketio.handler.SocketIOException; import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.namespace.Namespace; public class OnEventScanner implements AnnotationScanner { - private final Logger log = LoggerFactory.getLogger(getClass()); - @Override public Class getScanAnnotation() { return OnEvent.class; @@ -65,8 +61,7 @@ public class OnEventScanner implements AnnotationScanner { } method.invoke(object, args); } catch (Exception e) { - log.error("Can't invoke OnEvent listener on: " + clazz.getName() + ", method: " - + method.getName(), e); + throw new SocketIOException(e); } } }); diff --git a/src/main/java/com/corundumstudio/socketio/annotation/OnJsonObjectScanner.java b/src/main/java/com/corundumstudio/socketio/annotation/OnJsonObjectScanner.java index 659e35f..88d0a3d 100644 --- a/src/main/java/com/corundumstudio/socketio/annotation/OnJsonObjectScanner.java +++ b/src/main/java/com/corundumstudio/socketio/annotation/OnJsonObjectScanner.java @@ -18,18 +18,14 @@ package com.corundumstudio.socketio.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.corundumstudio.socketio.AckRequest; import com.corundumstudio.socketio.SocketIOClient; +import com.corundumstudio.socketio.handler.SocketIOException; import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.namespace.Namespace; public class OnJsonObjectScanner implements AnnotationScanner { - private final Logger log = LoggerFactory.getLogger(getClass()); - @Override public Class getScanAnnotation() { return OnJsonObject.class; @@ -58,8 +54,7 @@ public class OnJsonObjectScanner implements AnnotationScanner { } method.invoke(object, args); } catch (Exception e) { - log.error("Can't invoke OnJsonObject listener on: " + clazz.getName() + ", method: " - + method.getName(), e); + throw new SocketIOException(e); } } }); diff --git a/src/main/java/com/corundumstudio/socketio/annotation/OnMessageScanner.java b/src/main/java/com/corundumstudio/socketio/annotation/OnMessageScanner.java index 941b206..52be25c 100644 --- a/src/main/java/com/corundumstudio/socketio/annotation/OnMessageScanner.java +++ b/src/main/java/com/corundumstudio/socketio/annotation/OnMessageScanner.java @@ -18,18 +18,14 @@ package com.corundumstudio.socketio.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Method; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.corundumstudio.socketio.AckRequest; import com.corundumstudio.socketio.SocketIOClient; +import com.corundumstudio.socketio.handler.SocketIOException; import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.namespace.Namespace; public class OnMessageScanner implements AnnotationScanner { - private final Logger log = LoggerFactory.getLogger(getClass()); - @Override public Class getScanAnnotation() { return OnMessage.class; @@ -56,8 +52,7 @@ public class OnMessageScanner implements AnnotationScanner { } method.invoke(object, args); } catch (Exception e) { - log.error("Can't invoke OnMessage listener on: " + clazz.getName() + ", method: " - + method.getName(), e); + throw new SocketIOException(e); } } }); diff --git a/src/main/java/com/corundumstudio/socketio/handler/PacketHandler.java b/src/main/java/com/corundumstudio/socketio/handler/PacketHandler.java index a2edafb..53b7353 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/PacketHandler.java +++ b/src/main/java/com/corundumstudio/socketio/handler/PacketHandler.java @@ -63,11 +63,16 @@ public class PacketHandler extends SimpleChannelUpstreamHandler { log.trace("In message: {} sessionId: {}", new Object[] {content.toString(CharsetUtil.UTF_8), client.getSessionId()}); } while (content.readable()) { - Packet packet = decoder.decodePackets(content, client.getSessionId()); - Namespace ns = namespacesHub.get(packet.getEndpoint()); + try { + Packet packet = decoder.decodePackets(content, client.getSessionId()); + Namespace ns = namespacesHub.get(packet.getEndpoint()); - NamespaceClient nClient = (NamespaceClient) client.getChildClient(ns); - packetListener.onPacket(packet, nClient); + NamespaceClient nClient = (NamespaceClient) client.getChildClient(ns); + packetListener.onPacket(packet, nClient); + } catch (Exception ex) { + String c = content.toString(CharsetUtil.UTF_8); + log.error("Error during data processing. Client sessionId: " + client.getSessionId() + ", data: " + c, ex); + } } } else { ctx.sendUpstream(e); diff --git a/src/main/java/com/corundumstudio/socketio/handler/SocketIOException.java b/src/main/java/com/corundumstudio/socketio/handler/SocketIOException.java new file mode 100644 index 0000000..b5638e7 --- /dev/null +++ b/src/main/java/com/corundumstudio/socketio/handler/SocketIOException.java @@ -0,0 +1,34 @@ +/** + * Copyright 2012 Nikita Koksharov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.corundumstudio.socketio.handler; + +public class SocketIOException extends RuntimeException { + + private static final long serialVersionUID = -9218908839842557188L; + + public SocketIOException(String message, Throwable cause) { + super(message, cause); + } + + public SocketIOException(String message) { + super(message); + } + + public SocketIOException(Throwable cause) { + super(cause); + } + +}