diff --git a/pom.xml b/pom.xml
index 6f88e59..c2f8f1d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.github.nkzawa
socket.io-client
- 0.1.4-SNAPSHOT
+ 0.2.0-SNAPSHOT
jar
socket.io-client
Socket.IO Client Library for Java
@@ -58,7 +58,7 @@
com.github.nkzawa
engine.io-client
- 0.2.3
+ 0.3.0-SNAPSHOT
org.json
diff --git a/src/main/java/com/github/nkzawa/hasbinarydata/HasBinaryData.java b/src/main/java/com/github/nkzawa/hasbinary/HasBinary.java
similarity index 79%
rename from src/main/java/com/github/nkzawa/hasbinarydata/HasBinaryData.java
rename to src/main/java/com/github/nkzawa/hasbinary/HasBinary.java
index f57f3eb..bcd8b93 100644
--- a/src/main/java/com/github/nkzawa/hasbinarydata/HasBinaryData.java
+++ b/src/main/java/com/github/nkzawa/hasbinary/HasBinary.java
@@ -1,4 +1,4 @@
-package com.github.nkzawa.hasbinarydata;
+package com.github.nkzawa.hasbinary;
import org.json.JSONArray;
import org.json.JSONException;
@@ -6,15 +6,15 @@ import org.json.JSONObject;
import java.util.Iterator;
-public class HasBinaryData {
+public class HasBinary {
- private HasBinaryData() {}
+ private HasBinary() {}
public static boolean hasBinary(Object data) {
- return recursiveCheckForBinary(data);
+ return _hasBinary(data);
}
- private static boolean recursiveCheckForBinary(Object obj) {
+ private static boolean _hasBinary(Object obj) {
if (obj == null) return false;
if (obj instanceof byte[]) {
@@ -31,7 +31,7 @@ public class HasBinaryData {
} catch (JSONException e) {
return false;
}
- if (recursiveCheckForBinary(v)) {
+ if (_hasBinary(v)) {
return true;
}
}
@@ -46,7 +46,7 @@ public class HasBinaryData {
} catch (JSONException e) {
return false;
}
- if (recursiveCheckForBinary(v)) {
+ if (_hasBinary(v)) {
return true;
}
}
diff --git a/src/main/java/com/github/nkzawa/socketio/client/Manager.java b/src/main/java/com/github/nkzawa/socketio/client/Manager.java
index 52745e1..c76dae9 100644
--- a/src/main/java/com/github/nkzawa/socketio/client/Manager.java
+++ b/src/main/java/com/github/nkzawa/socketio/client/Manager.java
@@ -196,7 +196,8 @@ public class Manager extends Emitter {
}
private void maybeReconnectOnOpen() {
- if (!this.openReconnect && !this.reconnecting && this._reconnection) {
+ // Only try to reconnect if it's the first time we're connecting
+ if (!this.openReconnect && !this.reconnecting && this._reconnection && this.attempts == 0) {
this.openReconnect = true;
this.reconnect();
}
@@ -425,7 +426,7 @@ public class Manager extends Emitter {
while ((sub = this.subs.poll()) != null) sub.destroy();
}
- private void close() {
+ /*package*/ void close() {
this.skipReconnect = true;
this.engine.close();
}
diff --git a/src/main/java/com/github/nkzawa/socketio/client/Socket.java b/src/main/java/com/github/nkzawa/socketio/client/Socket.java
index 446cae7..e22dd7a 100644
--- a/src/main/java/com/github/nkzawa/socketio/client/Socket.java
+++ b/src/main/java/com/github/nkzawa/socketio/client/Socket.java
@@ -1,7 +1,7 @@
package com.github.nkzawa.socketio.client;
import com.github.nkzawa.emitter.Emitter;
-import com.github.nkzawa.hasbinarydata.HasBinaryData;
+import com.github.nkzawa.hasbinary.HasBinary;
import com.github.nkzawa.socketio.parser.Packet;
import com.github.nkzawa.socketio.parser.Parser;
import com.github.nkzawa.thread.EventThread;
@@ -173,7 +173,7 @@ public class Socket extends Emitter {
jsonArgs.put(arg);
}
int parserType = Parser.EVENT;
- if (HasBinaryData.hasBinary(jsonArgs)) { parserType = Parser.BINARY_EVENT; }
+ if (HasBinary.hasBinary(jsonArgs)) { parserType = Parser.BINARY_EVENT; }
Packet packet = new Packet(parserType, jsonArgs);
if (_args.get(_args.size() - 1) instanceof Ack) {
@@ -324,7 +324,7 @@ public class Socket extends Emitter {
sent[0] = true;
logger.fine(String.format("sending ack %s", args.length != 0 ? args : null));
- int type = HasBinaryData.hasBinary(args) ? Parser.BINARY_ACK : Parser.ACK;
+ int type = HasBinary.hasBinary(args) ? Parser.BINARY_ACK : Parser.ACK;
Packet packet = new Packet(type, new JSONArray(Arrays.asList(args)));
packet.id = id;
self.packet(packet);
diff --git a/src/test/java/com/github/nkzawa/hasbinary/HasBinaryTest.java b/src/test/java/com/github/nkzawa/hasbinary/HasBinaryTest.java
new file mode 100644
index 0000000..81b1f1f
--- /dev/null
+++ b/src/test/java/com/github/nkzawa/hasbinary/HasBinaryTest.java
@@ -0,0 +1,73 @@
+package com.github.nkzawa.hasbinary;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.nio.charset.Charset;
+
+import static org.junit.Assert.assertTrue;
+
+@RunWith(JUnit4.class)
+public class HasBinaryTest {
+
+ @Test
+ public void byteArray() {
+ assertTrue(HasBinary.hasBinary(new byte[0]));
+ }
+
+ @Test
+ public void anArrayThatDoesNotContainByteArray() throws JSONException {
+ JSONArray arr = new JSONArray("[1, \"cool\", 2]");
+ assertTrue(!HasBinary.hasBinary(arr));
+ }
+
+ @Test
+ public void anArrayContainsByteArray() throws JSONException {
+ JSONArray arr = new JSONArray("[1, null, 2]");
+ arr.put(1, "asdfasdf".getBytes(Charset.forName("UTF-8")));
+ assertTrue(HasBinary.hasBinary(arr));
+ }
+
+ @Test
+ public void anObjectThatDoesNotContainByteArray() throws JSONException {
+ JSONObject ob = new JSONObject("{\"a\": \"a\", \"b\": [], \"c\": 1234}");
+ assertTrue(!HasBinary.hasBinary(ob));
+ }
+
+ @Test
+ public void anObjectThatContainsByteArray() throws JSONException {
+ JSONObject ob = new JSONObject("{\"a\": \"a\", \"b\": null, \"c\": 1234}");
+ ob.put("b", "abc".getBytes(Charset.forName("UTF-8")));
+ assertTrue(HasBinary.hasBinary(ob));
+ }
+
+ @Test
+ public void testNull() {
+ assertTrue(!HasBinary.hasBinary(null));
+ }
+
+ @Test
+ public void aComplexObjectThatContainsNoBinary() throws JSONException {
+ JSONObject ob = new JSONObject();
+ ob.put("x", new JSONArray("[\"a\", \"b\", 123]"));
+ ob.put("y", JSONObject.NULL);
+ ob.put("z", new JSONObject("{\"a\": \"x\", \"b\": \"y\", \"c\": 3, \"d\": null}"));
+ ob.put("w", new JSONArray());
+ assertTrue(!HasBinary.hasBinary(ob));
+ }
+
+ @Test
+ public void aComplexObjectThatContainsBinary() throws JSONException {
+ JSONObject ob = new JSONObject();
+ ob.put("x", new JSONArray("[\"a\", \"b\", 123]"));
+ ob.put("y", JSONObject.NULL);
+ ob.put("z", new JSONObject("{\"a\": \"x\", \"b\": \"y\", \"c\": 3, \"d\": null}"));
+ ob.put("w", new JSONArray());
+ ob.put("bin", "xxx".getBytes(Charset.forName("UTF-8")));
+ assertTrue(HasBinary.hasBinary(ob));
+ }
+}
diff --git a/src/test/java/com/github/nkzawa/hasbinarydata/HasBinaryDataTest.java b/src/test/java/com/github/nkzawa/hasbinarydata/HasBinaryDataTest.java
deleted file mode 100644
index 98a0ef5..0000000
--- a/src/test/java/com/github/nkzawa/hasbinarydata/HasBinaryDataTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.github.nkzawa.hasbinarydata;
-
-import org.json.JSONArray;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.nio.charset.Charset;
-
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4.class)
-public class HasBinaryDataTest {
-
- @Test
- public void arrayContainsByteArray() throws Exception {
- JSONArray arr = new JSONArray("[1, null, 2]");
- arr.put(1, "asdfasdf".getBytes(Charset.forName("UTF-8")));
- assertTrue(HasBinaryData.hasBinary(arr));
- }
-
- @Test
- public void byteArray() {
- assertTrue(HasBinaryData.hasBinary(new byte[0]));
- }
-}
diff --git a/src/test/java/com/github/nkzawa/socketio/client/Connection.java b/src/test/java/com/github/nkzawa/socketio/client/Connection.java
index 22dcf56..1cba22e 100644
--- a/src/test/java/com/github/nkzawa/socketio/client/Connection.java
+++ b/src/test/java/com/github/nkzawa/socketio/client/Connection.java
@@ -11,7 +11,7 @@ import java.util.concurrent.*;
public abstract class Connection {
- final static int TIMEOUT = 3000;
+ final static int TIMEOUT = 7000;
final static int PORT = 3000;
private Process serverProcess;
diff --git a/src/test/java/com/github/nkzawa/socketio/client/ConnectionTest.java b/src/test/java/com/github/nkzawa/socketio/client/ConnectionTest.java
index ccf42c5..49fd4ad 100644
--- a/src/test/java/com/github/nkzawa/socketio/client/ConnectionTest.java
+++ b/src/test/java/com/github/nkzawa/socketio/client/ConnectionTest.java
@@ -144,7 +144,6 @@ public class ConnectionTest extends Connection {
};
socket = client();
- final int[] i = new int[] {0};
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... objects) {
@@ -178,8 +177,39 @@ public class ConnectionTest extends Connection {
foo.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
- values.offer("done");
foo.close();
+ socket.close();
+ manager.close();
+ values.offer("done");
+ }
+ });
+ foo.open();
+ }
+ });
+ socket.open();
+ values.take();
+ }
+
+ @Test(timeout = TIMEOUT)
+ public void connectToNamespaceAfterConnectionGetsClosed() throws URISyntaxException, InterruptedException {
+ final BlockingQueue