From d50660542f72e75b95716b1e71379e8a7625bb43 Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 27 Apr 2018 16:53:16 +0300 Subject: [PATCH] PING support for Pub/Sub. #1281 --- .../org/redisson/client/handler/CommandPubSubDecoder.java | 8 ++++++-- .../redisson/client/handler/PingConnectionHandler.java | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java b/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java index 262db3827..0f2253418 100644 --- a/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java +++ b/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java @@ -167,10 +167,10 @@ public class CommandPubSubDecoder extends CommandDecoder { return null; } return commandData.getCommand().getReplayMultiDecoder(); - } else if (parts.get(0).equals("message")) { + } else if (command.equals("message")) { String channelName = (String) parts.get(1); return entries.get(channelName).getDecoder(); - } else if (parts.get(0).equals("pmessage")) { + } else if (command.equals("pmessage")) { String patternName = (String) parts.get(1); return entries.get(patternName).getDecoder(); } @@ -191,6 +191,10 @@ public class CommandPubSubDecoder extends CommandDecoder { return entries.get(patternName).getDecoder().getDecoder(parts.size(), state()); } } + if (data != null && data.getCommand().getName().equals(RedisCommands.PING.getName())) { + return data.getCodec().getValueDecoder(); + } + return super.selectDecoder(data, parts); } diff --git a/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java b/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java index f5a2c64c7..64674248d 100644 --- a/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java +++ b/redisson/src/main/java/org/redisson/client/handler/PingConnectionHandler.java @@ -20,6 +20,7 @@ import java.util.concurrent.TimeUnit; import org.redisson.api.RFuture; import org.redisson.client.RedisClientConfig; import org.redisson.client.RedisConnection; +import org.redisson.client.codec.StringCodec; import org.redisson.client.protocol.RedisCommands; import io.netty.channel.ChannelHandler.Sharable; @@ -50,12 +51,12 @@ public class PingConnectionHandler extends ChannelInboundHandlerAdapter { protected void sendPing(final ChannelHandlerContext ctx) { RedisConnection connection = RedisConnection.getFrom(ctx.channel()); - final RFuture future = connection.async(RedisCommands.PING); + final RFuture future = connection.async(StringCodec.INSTANCE, RedisCommands.PING); config.getTimer().newTimeout(new TimerTask() { @Override public void run(Timeout timeout) throws Exception { - if (future.cancel(false)) { + if (future.cancel(false) || !future.isSuccess()) { ctx.channel().close(); } else { sendPing(ctx);