From b7911a8fb3a64747913370ec16b72e64c1a5b44e Mon Sep 17 00:00:00 2001 From: Nikita Date: Sun, 5 Jul 2015 15:15:25 +0300 Subject: [PATCH] Parameters encoding fixed --- .../org/redisson/client/handler/RedisEncoder.java | 15 ++++++++++----- .../org/redisson/client/protocol/Encoder.java | 2 +- .../redisson/client/protocol/RedisCommand.java | 11 ++++++++--- .../redisson/client/protocol/RedisCommands.java | 4 ++-- .../org/redisson/client/protocol/StringCodec.java | 10 ++++++++-- 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/redisson/client/handler/RedisEncoder.java b/src/main/java/org/redisson/client/handler/RedisEncoder.java index e3bcc3195..6fc599c0e 100644 --- a/src/main/java/org/redisson/client/handler/RedisEncoder.java +++ b/src/main/java/org/redisson/client/handler/RedisEncoder.java @@ -15,12 +15,11 @@ */ package org.redisson.client.handler; +import java.util.Arrays; + import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; -import io.netty.util.AttributeKey; -import io.netty.util.CharsetUtil; -import io.netty.util.concurrent.Promise; public class RedisEncoder extends MessageToByteEncoder> { @@ -34,9 +33,15 @@ public class RedisEncoder extends MessageToByteEncoder out.writeBytes(toChars(1 + msg.getParams().length)); out.writeBytes(CRLF); - writeArgument(out, msg.getCommand().getName().getBytes("UTF-8")); + if (Arrays.binarySearch(msg.getCommand().getEncodeParamIndexes(), 0) != -1) { + writeArgument(out, msg.getCodec().encode(msg.getCommand().getName())); + } + int i = 1; for (Object param : msg.getParams()) { - writeArgument(out, param.toString().getBytes("UTF-8")); + if (Arrays.binarySearch(msg.getCommand().getEncodeParamIndexes(), i) != -1) { + writeArgument(out, msg.getCodec().encode(param)); + } + i++; } // String o = out.toString(CharsetUtil.UTF_8); diff --git a/src/main/java/org/redisson/client/protocol/Encoder.java b/src/main/java/org/redisson/client/protocol/Encoder.java index 5920e5109..e7536688d 100644 --- a/src/main/java/org/redisson/client/protocol/Encoder.java +++ b/src/main/java/org/redisson/client/protocol/Encoder.java @@ -2,6 +2,6 @@ package org.redisson.client.protocol; public interface Encoder { - Object encode(Object in); + byte[] encode(Object in); } diff --git a/src/main/java/org/redisson/client/protocol/RedisCommand.java b/src/main/java/org/redisson/client/protocol/RedisCommand.java index 25c6bfb1b..39e8e67ef 100644 --- a/src/main/java/org/redisson/client/protocol/RedisCommand.java +++ b/src/main/java/org/redisson/client/protocol/RedisCommand.java @@ -18,16 +18,18 @@ package org.redisson.client.protocol; public class RedisCommand { private final String name; + private final int[] encodeParamIndexes; private Decoder reponseDecoder; - public RedisCommand(String name) { - this(name, null); + public RedisCommand(String name, int ... encodeParamIndexes) { + this(name, null, encodeParamIndexes); } - public RedisCommand(String name, Decoder reponseDecoder) { + public RedisCommand(String name, Decoder reponseDecoder, int ... encodeParamIndexes) { super(); this.name = name; this.reponseDecoder = reponseDecoder; + this.encodeParamIndexes = encodeParamIndexes; } public String getName() { @@ -38,5 +40,8 @@ public class RedisCommand { return reponseDecoder; } + public int[] getEncodeParamIndexes() { + return encodeParamIndexes; + } } diff --git a/src/main/java/org/redisson/client/protocol/RedisCommands.java b/src/main/java/org/redisson/client/protocol/RedisCommands.java index 6bcc6b21a..12936cbf3 100644 --- a/src/main/java/org/redisson/client/protocol/RedisCommands.java +++ b/src/main/java/org/redisson/client/protocol/RedisCommands.java @@ -17,7 +17,7 @@ package org.redisson.client.protocol; public interface RedisCommands { - RedisCommand GET = new RedisCommand("GET"); - RedisCommand SET = new RedisCommand("SET", new StringReplayDecoder()); + RedisCommand GET = new RedisCommand("GET", 0); + RedisCommand SET = new RedisCommand("SET", new StringReplayDecoder(), 0, 1); } diff --git a/src/main/java/org/redisson/client/protocol/StringCodec.java b/src/main/java/org/redisson/client/protocol/StringCodec.java index 20dc7709d..7d967ad02 100644 --- a/src/main/java/org/redisson/client/protocol/StringCodec.java +++ b/src/main/java/org/redisson/client/protocol/StringCodec.java @@ -1,13 +1,19 @@ package org.redisson.client.protocol; +import java.io.UnsupportedEncodingException; + import io.netty.buffer.ByteBuf; import io.netty.util.CharsetUtil; public class StringCodec implements Codec { @Override - public Object encode(Object in) { - return in.toString(); + public byte[] encode(Object in) { + try { + return in.toString().getBytes("UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new IllegalStateException(e); + } } @Override