diff --git a/pom.xml b/pom.xml index bb70119..36dc25a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,9 +42,9 @@ - com.google.code.gson - gson - 2.2.4 + org.json + json + 20140107 org.java-websocket diff --git a/src/main/java/com/github/nkzawa/engineio/client/HandshakeData.java b/src/main/java/com/github/nkzawa/engineio/client/HandshakeData.java new file mode 100644 index 0000000..8c80aff --- /dev/null +++ b/src/main/java/com/github/nkzawa/engineio/client/HandshakeData.java @@ -0,0 +1,27 @@ +package com.github.nkzawa.engineio.client; + + +import org.json.JSONArray; +import org.json.JSONObject; + +public class HandshakeData { + + public String sid; + public String[] upgrades; + public long pingInterval; + public long pingTimeout; + + /*package*/ HandshakeData(JSONObject data) { + JSONArray upgrades = data.getJSONArray("upgrades"); + int length = upgrades.length(); + String[] _upgrades = new String[length]; + for (int i = 0; i < length; i ++) { + _upgrades[i] = upgrades.getString(i); + } + + this.sid = data.getString("sid"); + this.upgrades = _upgrades; + this.pingInterval = data.getLong("pingInterval"); + this.pingTimeout = data.getLong("pingTimeout"); + } +} diff --git a/src/main/java/com/github/nkzawa/engineio/client/Socket.java b/src/main/java/com/github/nkzawa/engineio/client/Socket.java index 6a6b19f..cdcd727 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/Socket.java +++ b/src/main/java/com/github/nkzawa/engineio/client/Socket.java @@ -4,11 +4,10 @@ import com.github.nkzawa.emitter.Emitter; import com.github.nkzawa.engineio.client.transports.Polling; import com.github.nkzawa.engineio.client.transports.PollingXHR; import com.github.nkzawa.engineio.client.transports.WebSocket; -import com.github.nkzawa.engineio.parser.HandshakeData; import com.github.nkzawa.engineio.parser.Packet; import com.github.nkzawa.engineio.parser.Parser; import com.github.nkzawa.thread.EventThread; -import com.google.gson.Gson; +import org.json.JSONObject; import java.net.URI; import java.net.URISyntaxException; @@ -29,8 +28,6 @@ public abstract class Socket extends Emitter { private static final Logger logger = Logger.getLogger(Socket.class.getName()); - private static final Gson gson = new Gson(); - private enum ReadyState { OPENING, OPEN, CLOSING, CLOSED; @@ -398,7 +395,7 @@ public abstract class Socket extends Emitter { this.emit(EVENT_HEARTBEAT); if (Packet.OPEN.equals(packet.type)) { - this.onHandshake(gson.fromJson((String)packet.data, HandshakeData.class)); + this.onHandshake(new HandshakeData(new JSONObject((String)packet.data))); } else if (Packet.PONG.equals(packet.type)) { this.setPing(); } else if (Packet.ERROR.equals(packet.type)) { @@ -424,7 +421,7 @@ public abstract class Socket extends Emitter { this.emit(EVENT_HANDSHAKE, data); this.id = data.sid; this.transport.query.put("sid", data.sid); - this.upgrades = this.filterUpgrades(data.upgrades); + this.upgrades = this.filterUpgrades(Arrays.asList(data.upgrades)); this.pingInterval = data.pingInterval; this.pingTimeout = data.pingTimeout; this.onOpen(); @@ -690,7 +687,7 @@ public abstract class Socket extends Emitter { return filteredUpgrades; } - public void onmessage(byte[] data) {}; + public void onmessage(byte[] data) {} public abstract void onopen(); diff --git a/src/main/java/com/github/nkzawa/engineio/parser/HandshakeData.java b/src/main/java/com/github/nkzawa/engineio/parser/HandshakeData.java deleted file mode 100644 index 16757bb..0000000 --- a/src/main/java/com/github/nkzawa/engineio/parser/HandshakeData.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.github.nkzawa.engineio.parser; - - -import java.util.List; - -public class HandshakeData { - - public String sid; - public List upgrades; - public long pingInterval; - public long pingTimeout; -} diff --git a/src/test/java/com/github/nkzawa/engineio/client/ServerConnectionTest.java b/src/test/java/com/github/nkzawa/engineio/client/ServerConnectionTest.java index 57b353b..e5a2733 100644 --- a/src/test/java/com/github/nkzawa/engineio/client/ServerConnectionTest.java +++ b/src/test/java/com/github/nkzawa/engineio/client/ServerConnectionTest.java @@ -3,7 +3,6 @@ package com.github.nkzawa.engineio.client; import com.github.nkzawa.emitter.Emitter; import com.github.nkzawa.engineio.client.transports.Polling; import com.github.nkzawa.engineio.client.transports.WebSocket; -import com.github.nkzawa.engineio.parser.HandshakeData; import com.github.nkzawa.thread.EventThread; import org.junit.After; import org.junit.Before; @@ -147,7 +146,7 @@ public class ServerConnectionTest { @Test(timeout = TIMEOUT) public void handshake() throws URISyntaxException, InterruptedException { - final BlockingQueue events = new LinkedBlockingQueue(); + final Semaphore semaphore = new Semaphore(0); socket = new Socket("ws://localhost:" + PORT) { @Override @@ -162,23 +161,22 @@ public class ServerConnectionTest { socket.on(Socket.EVENT_HANDSHAKE, new Emitter.Listener() { @Override public void call(Object... args) { - events.offer(args); + assertThat(args.length, is(1)); + assertThat(args[0], is(instanceOf(HandshakeData.class))); + + HandshakeData data = (HandshakeData)args[0]; + assertThat(data.sid, is(notNullValue())); + assertThat(data.upgrades, is(notNullValue())); + assertThat(data.upgrades, is(not(emptyArray()))); + assertThat(data.pingTimeout, is(greaterThan((long)0))); + assertThat(data.pingInterval, is(greaterThan((long) 0))); + + socket.close(); + semaphore.release(); } }); socket.open(); - - Object[] args = events.take(); - assertThat(args.length, is(1)); - assertThat(args[0], is(instanceOf(HandshakeData.class))); - - HandshakeData data = (HandshakeData)args[0]; - assertThat(data.sid, is(notNullValue())); - assertThat(data.upgrades, is(notNullValue())); - assertThat(data.upgrades, is(not(empty()))); - assertThat(data.pingTimeout, is(greaterThan((long)0))); - assertThat(data.pingInterval, is(greaterThan((long) 0))); - - socket.close(); + semaphore.acquire(); } @Test(timeout = TIMEOUT) @@ -325,20 +323,13 @@ public class ServerConnectionTest { final Socket socket = new Socket(opts) { @Override - public void onopen() { - } - + public void onopen() {} @Override - public void onmessage(String data) { - } - + public void onmessage(String data) {} @Override - public void onclose() { - } - + public void onclose() {} @Override - public void onerror(Exception err) { - } + public void onerror(Exception err) {} }; socket.on(Socket.EVENT_UPGRADE, new Emitter.Listener() { @@ -353,20 +344,13 @@ public class ServerConnectionTest { final Socket socket2 = new Socket(opts) { @Override - public void onopen() { - } - + public void onopen() {} @Override - public void onmessage(String data) { - } - + public void onmessage(String data) {} @Override - public void onclose() { - } - + public void onclose() {} @Override - public void onerror(Exception err) { - } + public void onerror(Exception err) {} }; socket2.open(); assertThat(socket2.transport.name, is(WebSocket.NAME));