From ddf1eaa7c889e6cd1f424c0f820627b8087ac031 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 19 Oct 2015 20:44:34 +0300 Subject: [PATCH] Skip repeated SUBSCRIBE/UNSUBSCRIBE handling. #253 --- .../org/redisson/client/handler/CommandDecoder.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/redisson/client/handler/CommandDecoder.java b/src/main/java/org/redisson/client/handler/CommandDecoder.java index 268ce8418..13113f756 100644 --- a/src/main/java/org/redisson/client/handler/CommandDecoder.java +++ b/src/main/java/org/redisson/client/handler/CommandDecoder.java @@ -199,7 +199,12 @@ public class CommandDecoder extends ReplayingDecoder { decode(in, data, respParts, channel, currentDecoder); } - Object result = messageDecoder(data, respParts).decode(respParts, state()); + MultiDecoder decoder = messageDecoder(data, respParts, channel); + if (decoder == null) { + return; + } + + Object result = decoder.decode(respParts, state()); if (result instanceof Message) { handleMultiResult(data, null, channel, result); @@ -258,13 +263,13 @@ public class CommandDecoder extends ReplayingDecoder { } } - private MultiDecoder messageDecoder(CommandData data, List parts) { + private MultiDecoder messageDecoder(CommandData data, List parts, Channel channel) { if (data == null) { if (Arrays.asList("subscribe", "psubscribe", "punsubscribe", "unsubscribe").contains(parts.get(0))) { String channelName = (String) parts.get(1); CommandData commandData = channels.get(channelName); if (commandData == null) { - throw new IllegalStateException("Can't find CommandData for command: " + parts); + return null; } return commandData.getCommand().getReplayMultiDecoder(); } else if (parts.get(0).equals("message")) {