use org.json instead of Gson
This commit is contained in:
6
pom.xml
6
pom.xml
@@ -60,9 +60,9 @@
|
|||||||
<version>0.2.0-SNAPSHOT</version>
|
<version>0.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.code.gson</groupId>
|
<groupId>org.json</groupId>
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>json</artifactId>
|
||||||
<version>2.2.4</version>
|
<version>20140107</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|||||||
@@ -454,7 +454,7 @@ public class Manager extends Emitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class Engine extends com.github.nkzawa.engineio.client.Socket {
|
private static class Engine extends com.github.nkzawa.engineio.client.Socket {
|
||||||
|
|
||||||
Engine(URI uri, Options opts) {
|
Engine(URI uri, Options opts) {
|
||||||
super(uri, opts);
|
super(uri, opts);
|
||||||
|
|||||||
@@ -4,9 +4,8 @@ import com.github.nkzawa.emitter.Emitter;
|
|||||||
import com.github.nkzawa.socketio.parser.Packet;
|
import com.github.nkzawa.socketio.parser.Packet;
|
||||||
import com.github.nkzawa.socketio.parser.Parser;
|
import com.github.nkzawa.socketio.parser.Parser;
|
||||||
import com.github.nkzawa.thread.EventThread;
|
import com.github.nkzawa.thread.EventThread;
|
||||||
import com.google.gson.Gson;
|
import org.json.JSONArray;
|
||||||
import com.google.gson.JsonArray;
|
import org.json.JSONObject;
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@@ -18,8 +17,6 @@ public class Socket extends Emitter {
|
|||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(Socket.class.getName());
|
private static final Logger logger = Logger.getLogger(Socket.class.getName());
|
||||||
|
|
||||||
private static final Gson gson = new Gson();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called on a connection.
|
* Called on a connection.
|
||||||
*/
|
*/
|
||||||
@@ -55,7 +52,7 @@ public class Socket extends Emitter {
|
|||||||
private Manager io;
|
private Manager io;
|
||||||
private Map<Integer, Ack> acks = new HashMap<Integer, Ack>();
|
private Map<Integer, Ack> acks = new HashMap<Integer, Ack>();
|
||||||
private Queue<On.Handle> subs;
|
private Queue<On.Handle> subs;
|
||||||
private final Queue<LinkedList<Object>> buffer = new LinkedList<LinkedList<Object>>();
|
private final Queue<List<Object>> buffer = new LinkedList<List<Object>>();
|
||||||
|
|
||||||
|
|
||||||
public Socket(Manager io, String nsp) {
|
public Socket(Manager io, String nsp) {
|
||||||
@@ -150,7 +147,7 @@ public class Socket extends Emitter {
|
|||||||
_args.addAll(Arrays.asList(args));
|
_args.addAll(Arrays.asList(args));
|
||||||
int parserType = Parser.EVENT;
|
int parserType = Parser.EVENT;
|
||||||
// TODO: hasBin(_args)
|
// TODO: hasBin(_args)
|
||||||
Packet packet = new Packet(parserType, toJsonArray(_args));
|
Packet packet = new Packet(parserType, new JSONArray(_args));
|
||||||
|
|
||||||
if (_args.get(_args.size() - 1) instanceof Ack) {
|
if (_args.get(_args.size() - 1) instanceof Ack) {
|
||||||
logger.fine(String.format("emitting packet with ack id %d", Socket.this.ids));
|
logger.fine(String.format("emitting packet with ack id %d", Socket.this.ids));
|
||||||
@@ -182,7 +179,7 @@ public class Socket extends Emitter {
|
|||||||
addAll(Arrays.asList(args));
|
addAll(Arrays.asList(args));
|
||||||
}
|
}
|
||||||
}};
|
}};
|
||||||
Packet packet = new Packet(Parser.EVENT, toJsonArray(_args));
|
Packet packet = new Packet(Parser.EVENT, new JSONArray(_args));
|
||||||
|
|
||||||
logger.fine(String.format("emitting packet with ack id %d", ids));
|
logger.fine(String.format("emitting packet with ack id %d", ids));
|
||||||
Socket.this.acks.put(ids, ack);
|
Socket.this.acks.put(ids, ack);
|
||||||
@@ -249,16 +246,16 @@ public class Socket extends Emitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onevent(Packet packet) {
|
private void onevent(Packet packet) {
|
||||||
LinkedList<Object> args = new LinkedList<Object>(fromJsonArray(packet.data.getAsJsonArray()));
|
List<Object> args = new ArrayList<Object>(Arrays.asList(toArray((JSONArray) packet.data)));
|
||||||
logger.fine(String.format("emitting event %s", args));
|
logger.fine(String.format("emitting event %s", args));
|
||||||
|
|
||||||
if (packet.id >= 0) {
|
if (packet.id >= 0) {
|
||||||
logger.fine("attaching ack callback to event");
|
logger.fine("attaching ack callback to event");
|
||||||
args.offerLast(this.ack(packet.id));
|
args.add(this.ack(packet.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.connected) {
|
if (this.connected) {
|
||||||
String event = (String)args.pollFirst();
|
String event = (String)args.remove(0);
|
||||||
super.emit(event, args.toArray());
|
super.emit(event, args.toArray());
|
||||||
} else {
|
} else {
|
||||||
this.buffer.add(args);
|
this.buffer.add(args);
|
||||||
@@ -274,7 +271,7 @@ public class Socket extends Emitter {
|
|||||||
if (sent[0]) return;
|
if (sent[0]) return;
|
||||||
sent[0] = true;
|
sent[0] = true;
|
||||||
logger.fine(String.format("sending ack %s", args));
|
logger.fine(String.format("sending ack %s", args));
|
||||||
Packet packet = new Packet(Parser.ACK, gson.toJsonTree(args));
|
Packet packet = new Packet(Parser.ACK, new JSONArray(args));
|
||||||
packet.id = id;
|
packet.id = id;
|
||||||
self.packet(packet);
|
self.packet(packet);
|
||||||
}
|
}
|
||||||
@@ -284,7 +281,7 @@ public class Socket extends Emitter {
|
|||||||
private void onack(Packet packet) {
|
private void onack(Packet packet) {
|
||||||
logger.fine(String.format("calling ack %s with %s", packet.id, packet.data));
|
logger.fine(String.format("calling ack %s with %s", packet.id, packet.data));
|
||||||
Ack fn = this.acks.remove(packet.id);
|
Ack fn = this.acks.remove(packet.id);
|
||||||
fn.call(fromJsonArray(packet.data.getAsJsonArray()).toArray());
|
fn.call(toArray((JSONArray) packet.data));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onconnect() {
|
private void onconnect() {
|
||||||
@@ -295,12 +292,10 @@ public class Socket extends Emitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void emitBuffered() {
|
private void emitBuffered() {
|
||||||
synchronized (this.buffer) {
|
List<Object> data;
|
||||||
LinkedList<Object> data;
|
while ((data = this.buffer.poll()) != null) {
|
||||||
while ((data = this.buffer.poll()) != null) {
|
String event = (String)data.get(0);
|
||||||
String event = (String)data.pollFirst();
|
super.emit(event, data.toArray());
|
||||||
super.emit(event, data.toArray());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -349,18 +344,12 @@ public class Socket extends Emitter {
|
|||||||
return this.close();
|
return this.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JsonArray toJsonArray(List<Object> list) {
|
private static Object[] toArray(JSONArray array) {
|
||||||
JsonArray data = new JsonArray();
|
int length = array.length();
|
||||||
for (Object v : list) {
|
Object[] data = new Object[length];
|
||||||
data.add(v instanceof JsonElement ? (JsonElement)v : gson.toJsonTree(v));
|
for (int i = 0; i < length; i++) {
|
||||||
}
|
Object v = array.get(i);
|
||||||
return data;
|
data[i] = v == JSONObject.NULL ? null : v;
|
||||||
}
|
|
||||||
|
|
||||||
private static List<Object> fromJsonArray(JsonArray array) {
|
|
||||||
List<Object> data = new ArrayList<Object>();
|
|
||||||
for (JsonElement v : array) {
|
|
||||||
data.add(v.isJsonPrimitive() || v.isJsonNull() ? gson.fromJson(v, Object.class) : v);
|
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
package com.github.nkzawa.socketio.parser;
|
package com.github.nkzawa.socketio.parser;
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
|
|
||||||
public class Packet {
|
public class Packet {
|
||||||
|
|
||||||
public int type = -1;
|
public int type = -1;
|
||||||
public int id = -1;
|
public int id = -1;
|
||||||
public String nsp;
|
public String nsp;
|
||||||
public JsonElement data;
|
public Object data;
|
||||||
public int attachments;
|
public int attachments;
|
||||||
|
|
||||||
public Packet() {}
|
public Packet() {}
|
||||||
@@ -16,7 +15,7 @@ public class Packet {
|
|||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Packet(int type, JsonElement data) {
|
public Packet(int type, Object data) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.data = data;
|
this.data = data;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package com.github.nkzawa.socketio.parser;
|
package com.github.nkzawa.socketio.parser;
|
||||||
|
|
||||||
import com.github.nkzawa.emitter.Emitter;
|
import com.github.nkzawa.emitter.Emitter;
|
||||||
import com.google.gson.*;
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONTokener;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -11,9 +12,6 @@ public class Parser {
|
|||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(Parser.class.getName());
|
private static final Logger logger = Logger.getLogger(Parser.class.getName());
|
||||||
|
|
||||||
private static final Gson gson = new Gson();
|
|
||||||
private static final JsonParser json = new JsonParser();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Packet type `connect`.
|
* Packet type `connect`.
|
||||||
*/
|
*/
|
||||||
@@ -62,7 +60,7 @@ public class Parser {
|
|||||||
private Parser() {}
|
private Parser() {}
|
||||||
|
|
||||||
private static Packet error() {
|
private static Packet error() {
|
||||||
return new Packet(ERROR, new JsonPrimitive("parser error"));
|
return new Packet(ERROR, "parser error");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -107,7 +105,7 @@ public class Parser {
|
|||||||
|
|
||||||
if (obj.data != null) {
|
if (obj.data != null) {
|
||||||
if (nsp) str.append(",");
|
if (nsp) str.append(",");
|
||||||
str.append(gson.toJson(obj.data));
|
str.append(obj.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.fine(String.format("encoded %s as %s", obj, str));
|
logger.fine(String.format("encoded %s as %s", obj, str));
|
||||||
@@ -211,10 +209,10 @@ public class Parser {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
str.charAt(++i);
|
str.charAt(++i);
|
||||||
p.data = json.parse(str.substring(i));
|
p.data = new JSONTokener(str.substring(i)).nextValue();
|
||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
// do nothing
|
// do nothing
|
||||||
} catch (JsonParseException e) {
|
} catch (JSONException e) {
|
||||||
return error();
|
return error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.nkzawa.socketio.client;
|
package com.github.nkzawa.socketio.client;
|
||||||
|
|
||||||
import com.github.nkzawa.emitter.Emitter;
|
import com.github.nkzawa.emitter.Emitter;
|
||||||
import com.google.gson.JsonObject;
|
import org.json.JSONObject;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -15,6 +15,7 @@ import java.net.URISyntaxException;
|
|||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.is;
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
|
import static org.hamcrest.CoreMatchers.nullValue;
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
@@ -136,10 +137,10 @@ public class ServerConnectionTest {
|
|||||||
|
|
||||||
@Test(timeout = TIMEOUT)
|
@Test(timeout = TIMEOUT)
|
||||||
public void event() throws URISyntaxException, InterruptedException {
|
public void event() throws URISyntaxException, InterruptedException {
|
||||||
final BlockingQueue<Object[]> events = new LinkedBlockingQueue<Object[]>();
|
final Semaphore semaphore = new Semaphore(0);
|
||||||
|
|
||||||
final JsonObject obj = new JsonObject();
|
final JSONObject obj = new JSONObject();
|
||||||
obj.addProperty("foo", 1);
|
obj.put("foo", 1);
|
||||||
|
|
||||||
socket = client();
|
socket = client();
|
||||||
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
||||||
@@ -150,23 +151,26 @@ public class ServerConnectionTest {
|
|||||||
}
|
}
|
||||||
}).on("echoBack", new Emitter.Listener() {
|
}).on("echoBack", new Emitter.Listener() {
|
||||||
@Override
|
@Override
|
||||||
public void call(Object... objects) {
|
public void call(Object... args) {
|
||||||
System.out.println(String.format("echoBack: %s, %s, %s", objects));
|
System.out.println(String.format("echoBack: %s, %s, %s", args));
|
||||||
events.offer(objects);
|
assertThat(args.length, is(3));
|
||||||
|
assertThat(args[0].toString(), is(obj.toString()));
|
||||||
|
assertThat(args[1], is(nullValue()));
|
||||||
|
assertThat((String)args[2], is("bar"));
|
||||||
|
socket.disconnect();
|
||||||
|
semaphore.release();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
socket.connect();
|
socket.connect();
|
||||||
|
semaphore.acquire();
|
||||||
assertThat(events.take(), is(new Object[] {obj, null, "bar"}));
|
|
||||||
socket.disconnect();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(timeout = TIMEOUT)
|
@Test(timeout = TIMEOUT)
|
||||||
public void ack() throws URISyntaxException, InterruptedException {
|
public void ack() throws URISyntaxException, InterruptedException {
|
||||||
final BlockingQueue<Object[]> events = new LinkedBlockingQueue<Object[]>();
|
final Semaphore semaphore = new Semaphore(0);
|
||||||
|
|
||||||
final JsonObject obj = new JsonObject();
|
final JSONObject obj = new JSONObject();
|
||||||
obj.addProperty("foo", 1);
|
obj.put("foo", 1);
|
||||||
|
|
||||||
socket = client();
|
socket = client();
|
||||||
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
||||||
@@ -177,15 +181,17 @@ public class ServerConnectionTest {
|
|||||||
@Override
|
@Override
|
||||||
public void call(Object... args) {
|
public void call(Object... args) {
|
||||||
System.out.println(String.format("ack: %s, %s", args));
|
System.out.println(String.format("ack: %s, %s", args));
|
||||||
events.offer(args);
|
assertThat(args.length, is(2));
|
||||||
|
assertThat(args[0].toString(), is(obj.toString()));
|
||||||
|
assertThat((String)args[1], is("bar"));
|
||||||
|
socket.disconnect();
|
||||||
|
semaphore.release();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
socket.connect();
|
socket.connect();
|
||||||
|
semaphore.acquire();
|
||||||
assertThat(events.take(), is(new Object[] {obj, "bar"}));
|
|
||||||
socket.disconnect();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(timeout = TIMEOUT)
|
@Test(timeout = TIMEOUT)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.github.nkzawa.socketio.parser;
|
package com.github.nkzawa.socketio.parser;
|
||||||
|
|
||||||
import com.github.nkzawa.emitter.Emitter;
|
import com.github.nkzawa.emitter.Emitter;
|
||||||
import com.google.gson.JsonParser;
|
import org.json.JSONTokener;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
@@ -32,12 +32,12 @@ public class ParserTest {
|
|||||||
@Test
|
@Test
|
||||||
public void event() {
|
public void event() {
|
||||||
Packet packet1 = new Packet(Parser.EVENT);
|
Packet packet1 = new Packet(Parser.EVENT);
|
||||||
packet1.data = new JsonParser().parse("[\"a\", 1, {}]");
|
packet1.data = new JSONTokener("[\"a\", 1, {}]").nextValue();
|
||||||
packet1.nsp = "/";
|
packet1.nsp = "/";
|
||||||
test(packet1);
|
test(packet1);
|
||||||
|
|
||||||
Packet packet2 = new Packet(Parser.EVENT);
|
Packet packet2 = new Packet(Parser.EVENT);
|
||||||
packet2.data = new JsonParser().parse("[\"a\", 1, {}]");
|
packet2.data = new JSONTokener("[\"a\", 1, {}]").nextValue();
|
||||||
packet2.nsp = "/test";
|
packet2.nsp = "/test";
|
||||||
test(packet2);
|
test(packet2);
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@ public class ParserTest {
|
|||||||
@Test
|
@Test
|
||||||
public void ack() {
|
public void ack() {
|
||||||
Packet packet = new Packet(Parser.ACK);
|
Packet packet = new Packet(Parser.ACK);
|
||||||
packet.data = new JsonParser().parse("[\"a\", 1, {}]");
|
packet.data = new JSONTokener("[\"a\", 1, {}]").nextValue();
|
||||||
packet.id = 123;
|
packet.id = 123;
|
||||||
packet.nsp = "/";
|
packet.nsp = "/";
|
||||||
test(packet);
|
test(packet);
|
||||||
@@ -62,7 +62,11 @@ public class ParserTest {
|
|||||||
Packet packet = (Packet)args[0];
|
Packet packet = (Packet)args[0];
|
||||||
assertThat(packet.type, is(obj.type));
|
assertThat(packet.type, is(obj.type));
|
||||||
assertThat(packet.id, is(obj.id));
|
assertThat(packet.id, is(obj.id));
|
||||||
assertThat(packet.data, is(obj.data));
|
if (packet.data == null) {
|
||||||
|
assertThat(packet.data, is(obj.data));
|
||||||
|
} else {
|
||||||
|
assertThat(packet.data.toString(), is(obj.data.toString()));
|
||||||
|
}
|
||||||
assertThat(packet.nsp, is(obj.nsp));
|
assertThat(packet.nsp, is(obj.nsp));
|
||||||
assertThat(packet.attachments, is(obj.attachments));
|
assertThat(packet.attachments, is(obj.attachments));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user