Merge pull request #211 from raszi/9d4d11ef466d7a890e763bb1b98b044e3d8635b4

My previous static Protocol fix
This commit is contained in:
Eric Hauser
2012-04-19 11:51:29 -07:00
3 changed files with 33 additions and 36 deletions

View File

@@ -19,7 +19,6 @@ public class Connection {
private String host;
private int port = Protocol.DEFAULT_PORT;
private Socket socket;
private Protocol protocol = new Protocol();
private RedisOutputStream outputStream;
private RedisInputStream inputStream;
private int pipelinedCommands = 0;
@@ -78,14 +77,14 @@ public class Connection {
protected Connection sendCommand(final Command cmd, final byte[]... args) {
connect();
protocol.sendCommand(outputStream, cmd, args);
Protocol.sendCommand(outputStream, cmd, args);
pipelinedCommands++;
return this;
}
protected Connection sendCommand(final Command cmd) {
connect();
protocol.sendCommand(outputStream, cmd, new byte[0][]);
Protocol.sendCommand(outputStream, cmd, new byte[0][]);
pipelinedCommands++;
return this;
}
@@ -125,7 +124,7 @@ public class Connection {
socket.setTcpNoDelay(true); //Socket buffer Whetherclosed, to ensure timely delivery of data
socket.setSoLinger(true,0); //Control calls close () method, the underlying socket is closed immediately
//<-@wjw_add
socket.connect(new InetSocketAddress(host, port), timeout);
socket.setSoTimeout(timeout);
outputStream = new RedisOutputStream(socket.getOutputStream());
@@ -159,7 +158,7 @@ public class Connection {
protected String getStatusCodeReply() {
flush();
pipelinedCommands--;
final byte[] resp = (byte[]) protocol.read(inputStream);
final byte[] resp = (byte[]) Protocol.read(inputStream);
if (null == resp) {
return null;
} else {
@@ -179,13 +178,13 @@ public class Connection {
public byte[] getBinaryBulkReply() {
flush();
pipelinedCommands--;
return (byte[]) protocol.read(inputStream);
return (byte[]) Protocol.read(inputStream);
}
public Long getIntegerReply() {
flush();
pipelinedCommands--;
return (Long) protocol.read(inputStream);
return (Long) Protocol.read(inputStream);
}
public List<String> getMultiBulkReply() {
@@ -196,14 +195,14 @@ public class Connection {
public List<byte[]> getBinaryMultiBulkReply() {
flush();
pipelinedCommands--;
return (List<byte[]>) protocol.read(inputStream);
return (List<byte[]>) Protocol.read(inputStream);
}
@SuppressWarnings("unchecked")
public List<Object> getObjectMultiBulkReply() {
flush();
pipelinedCommands--;
return (List<Object>) protocol.read(inputStream);
return (List<Object>) Protocol.read(inputStream);
}
@SuppressWarnings("unchecked")
@@ -222,7 +221,7 @@ public class Connection {
flush();
while (pipelinedCommands > except) {
try{
all.add(protocol.read(inputStream));
all.add(Protocol.read(inputStream));
}catch(JedisDataException e){
all.add(e);
}
@@ -234,6 +233,6 @@ public class Connection {
public Object getOne() {
flush();
pipelinedCommands--;
return protocol.read(inputStream);
return Protocol.read(inputStream);
}
}

View File

@@ -24,12 +24,18 @@ public final class Protocol {
public static final byte MINUS_BYTE = '-';
public static final byte COLON_BYTE = ':';
public void sendCommand(final RedisOutputStream os, final Command command,
private Protocol() {
// this prevent the class from instantiation
}
public static void sendCommand(final RedisOutputStream os,
final Command command,
final byte[]... args) {
sendCommand(os, command.raw, args);
}
private void sendCommand(final RedisOutputStream os, final byte[] command,
private static void sendCommand(final RedisOutputStream os,
final byte[] command,
final byte[]... args) {
try {
os.write(ASTERISK_BYTE);
@@ -50,12 +56,12 @@ public final class Protocol {
}
}
private void processError(final RedisInputStream is) {
private static void processError(final RedisInputStream is) {
String message = is.readLine();
throw new JedisDataException(message);
}
private Object process(final RedisInputStream is) {
private static Object process(final RedisInputStream is) {
try {
byte b = is.readByte();
if (b == MINUS_BYTE) {
@@ -77,11 +83,11 @@ public final class Protocol {
return null;
}
private byte[] processStatusCodeReply(final RedisInputStream is) {
private static byte[] processStatusCodeReply(final RedisInputStream is) {
return SafeEncoder.encode(is.readLine());
}
private byte[] processBulkReply(final RedisInputStream is) {
private static byte[] processBulkReply(final RedisInputStream is) {
int len = Integer.parseInt(is.readLine());
if (len == -1) {
return null;
@@ -102,12 +108,12 @@ public final class Protocol {
return read;
}
private Long processInteger(final RedisInputStream is) {
private static Long processInteger(final RedisInputStream is) {
String num = is.readLine();
return Long.valueOf(num);
}
private List<Object> processMultiBulkReply(final RedisInputStream is) {
private static List<Object> processMultiBulkReply(final RedisInputStream is) {
int num = Integer.parseInt(is.readLine());
if (num == -1) {
return null;
@@ -123,7 +129,7 @@ public final class Protocol {
return ret;
}
public Object read(final RedisInputStream is) {
public static Object read(final RedisInputStream is) {
return process(is);
}

View File

@@ -24,8 +24,7 @@ public class ProtocolTest extends JedisTestBase {
PipedOutputStream pos = new PipedOutputStream(pis);
RedisOutputStream ros = new RedisOutputStream(pos);
Protocol protocol = new Protocol();
protocol.sendCommand(ros, Protocol.Command.GET,
Protocol.sendCommand(ros, Protocol.Command.GET,
"SOMEKEY".getBytes(Protocol.CHARSET));
ros.flush();
pos.close();
@@ -43,8 +42,7 @@ public class ProtocolTest extends JedisTestBase {
@Test
public void bulkReply() {
InputStream is = new ByteArrayInputStream("$6\r\nfoobar\r\n".getBytes());
Protocol protocol = new Protocol();
byte[] response = (byte[]) protocol.read(new RedisInputStream(is));
byte[] response = (byte[]) Protocol.read(new RedisInputStream(is));
assertArrayEquals(SafeEncoder.encode("foobar"), response);
}
@@ -52,8 +50,7 @@ public class ProtocolTest extends JedisTestBase {
public void fragmentedBulkReply() {
FragmentedByteArrayInputStream fis = new FragmentedByteArrayInputStream(
"$30\r\n012345678901234567890123456789\r\n".getBytes());
Protocol protocol = new Protocol();
byte[] response = (byte[]) protocol.read(new RedisInputStream(fis));
byte[] response = (byte[]) Protocol.read(new RedisInputStream(fis));
assertArrayEquals(SafeEncoder.encode("012345678901234567890123456789"),
response);
}
@@ -61,24 +58,21 @@ public class ProtocolTest extends JedisTestBase {
@Test
public void nullBulkReply() {
InputStream is = new ByteArrayInputStream("$-1\r\n".getBytes());
Protocol protocol = new Protocol();
String response = (String) protocol.read(new RedisInputStream(is));
String response = (String) Protocol.read(new RedisInputStream(is));
assertEquals(null, response);
}
@Test
public void singleLineReply() {
InputStream is = new ByteArrayInputStream("+OK\r\n".getBytes());
Protocol protocol = new Protocol();
byte[] response = (byte[]) protocol.read(new RedisInputStream(is));
byte[] response = (byte[]) Protocol.read(new RedisInputStream(is));
assertArrayEquals(SafeEncoder.encode("OK"), response);
}
@Test
public void integerReply() {
InputStream is = new ByteArrayInputStream(":123\r\n".getBytes());
Protocol protocol = new Protocol();
long response = (Long) protocol.read(new RedisInputStream(is));
long response = (Long) Protocol.read(new RedisInputStream(is));
assertEquals(123, response);
}
@@ -88,8 +82,7 @@ public class ProtocolTest extends JedisTestBase {
InputStream is = new ByteArrayInputStream(
"*4\r\n$3\r\nfoo\r\n$3\r\nbar\r\n$5\r\nHello\r\n$5\r\nWorld\r\n"
.getBytes());
Protocol protocol = new Protocol();
List<byte[]> response = (List<byte[]>) protocol
List<byte[]> response = (List<byte[]>) Protocol
.read(new RedisInputStream(is));
List<byte[]> expected = new ArrayList<byte[]>();
expected.add(SafeEncoder.encode("foo"));
@@ -104,8 +97,7 @@ public class ProtocolTest extends JedisTestBase {
@Test
public void nullMultiBulkReply() {
InputStream is = new ByteArrayInputStream("*-1\r\n".getBytes());
Protocol protocol = new Protocol();
List<String> response = (List<String>) protocol
List<String> response = (List<String>) Protocol
.read(new RedisInputStream(is));
assertNull(response);
}