From 5207651b267d96ecfe23079f97be274680aaa4f8 Mon Sep 17 00:00:00 2001 From: atomicint Date: Wed, 22 Apr 2015 01:57:23 -0400 Subject: [PATCH 1/4] Potential fix for #16 --- src/org/apollo/net/session/GameSession.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/org/apollo/net/session/GameSession.java b/src/org/apollo/net/session/GameSession.java index 1880f83a..93883f6e 100644 --- a/src/org/apollo/net/session/GameSession.java +++ b/src/org/apollo/net/session/GameSession.java @@ -89,6 +89,7 @@ public final class GameSession extends Session { chainSet.notify(player, message); } catch (Exception reason) { logger.log(Level.SEVERE, "Uncaught exception thrown while handling message: " + message, reason); + destroy(); } } } From 470dbf3b9b5a0b02548b82a386384eab069957f7 Mon Sep 17 00:00:00 2001 From: atomicint Date: Tue, 28 Apr 2015 11:25:20 -0400 Subject: [PATCH 2/4] Temporary fix for #13 --- .../apollo/game/message/MessageHandlerChainSet.java | 11 ++++++++--- src/org/apollo/io/MessageHandlerChainSetParser.java | 3 +-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/org/apollo/game/message/MessageHandlerChainSet.java b/src/org/apollo/game/message/MessageHandlerChainSet.java index 95f67487..54c3fe11 100644 --- a/src/org/apollo/game/message/MessageHandlerChainSet.java +++ b/src/org/apollo/game/message/MessageHandlerChainSet.java @@ -21,15 +21,20 @@ public final class MessageHandlerChainSet { /** * Notifies the appropriate {@link MessageHandlerChain} that a {@link Message} has been received. - * + * * @param player The {@link Player} receiving the Message. * @param message The Message. * @return {@code true} if the Message propagated down the chain without being terminated or if the chain for the * Message was not found, otherwise {@code false}. */ + @SuppressWarnings("unchecked") public boolean notify(Player player, M message) { - @SuppressWarnings("unchecked") - MessageHandlerChain chain = (MessageHandlerChain) chains.get(message.getClass()); + Class clazz = (Class) message.getClass(); + while (clazz.getSuperclass() != Message.class) { + clazz = (Class) clazz.getSuperclass(); + } + + MessageHandlerChain chain = (MessageHandlerChain) chains.computeIfAbsent(clazz, MessageHandlerChain::new); return chain == null || chain.notify(player, message); } diff --git a/src/org/apollo/io/MessageHandlerChainSetParser.java b/src/org/apollo/io/MessageHandlerChainSetParser.java index 1b308551..1c34a088 100644 --- a/src/org/apollo/io/MessageHandlerChainSetParser.java +++ b/src/org/apollo/io/MessageHandlerChainSetParser.java @@ -48,6 +48,7 @@ public final class MessageHandlerChainSetParser { * @throws SAXException If a SAX error occurs. * @throws ReflectiveOperationException If a reflection error occurs. */ + @SuppressWarnings("unchecked") public MessageHandlerChainSet parse(World world) throws IOException, SAXException, ReflectiveOperationException { XmlNode messages = parser.parse(is); if (!messages.getName().equals("messages")) { @@ -75,7 +76,6 @@ public final class MessageHandlerChainSetParser { throw new IOException("Type node must have a value."); } - @SuppressWarnings("unchecked") Class messageClass = (Class) Class.forName(messageClassName); for (XmlNode handlerNode : chainNode) { @@ -88,7 +88,6 @@ public final class MessageHandlerChainSetParser { throw new IOException("Handler node must have a value."); } - @SuppressWarnings("unchecked") Class> handlerClass = (Class>) Class.forName(handlerClassName); MessageHandler handler = handlerClass.getConstructor(World.class).newInstance(world); chainSet.putHandler(messageClass, handler); From 670cf9d9023c7f3de79cac49692173b1c75e6758 Mon Sep 17 00:00:00 2001 From: atomicint Date: Tue, 28 Apr 2015 11:27:47 -0400 Subject: [PATCH 3/4] Revert 5207651 --- src/org/apollo/net/session/GameSession.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/org/apollo/net/session/GameSession.java b/src/org/apollo/net/session/GameSession.java index 93883f6e..1880f83a 100644 --- a/src/org/apollo/net/session/GameSession.java +++ b/src/org/apollo/net/session/GameSession.java @@ -89,7 +89,6 @@ public final class GameSession extends Session { chainSet.notify(player, message); } catch (Exception reason) { logger.log(Level.SEVERE, "Uncaught exception thrown while handling message: " + message, reason); - destroy(); } } } From da8626ce82c045e80b5ee0ca3ea475ba2004ab98 Mon Sep 17 00:00:00 2001 From: atomicint Date: Tue, 28 Apr 2015 11:32:52 -0400 Subject: [PATCH 4/4] Omit redundant null check --- src/org/apollo/game/message/MessageHandlerChainSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/apollo/game/message/MessageHandlerChainSet.java b/src/org/apollo/game/message/MessageHandlerChainSet.java index 54c3fe11..d9e25ef4 100644 --- a/src/org/apollo/game/message/MessageHandlerChainSet.java +++ b/src/org/apollo/game/message/MessageHandlerChainSet.java @@ -35,7 +35,7 @@ public final class MessageHandlerChainSet { } MessageHandlerChain chain = (MessageHandlerChain) chains.computeIfAbsent(clazz, MessageHandlerChain::new); - return chain == null || chain.notify(player, message); + return chain.notify(player, message); } /**