Merge pull request #439 from socketio/fix/compatible-v2

Make compatible with Socket.IO v2
This commit is contained in:
Naoyuki Kanezawa
2017-07-14 14:23:34 +09:00
committed by GitHub
14 changed files with 751 additions and 603 deletions

View File

@@ -62,7 +62,7 @@
<dependency>
<groupId>io.socket</groupId>
<artifactId>engine.io-client</artifactId>
<version>0.9.0</version>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.json</groupId>

View File

@@ -3,16 +3,13 @@ package io.socket.client;
import io.socket.parser.Parser;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.WebSocket;
import java.util.logging.Level;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

View File

@@ -2,16 +2,24 @@ package io.socket.client;
import io.socket.backo.Backoff;
import io.socket.emitter.Emitter;
import io.socket.parser.IOParser;
import io.socket.parser.Packet;
import io.socket.parser.Parser;
import io.socket.thread.EventThread;
import okhttp3.Call;
import okhttp3.WebSocket;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import java.net.URI;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -148,8 +156,8 @@ public class Manager extends Emitter {
this.uri = uri;
this.encoding = false;
this.packetBuffer = new ArrayList<Packet>();
this.encoder = new Parser.Encoder();
this.decoder = new Parser.Decoder();
this.encoder = opts.encoder != null ? opts.encoder : new IOParser.Encoder();
this.decoder = opts.decoder != null ? opts.decoder : new IOParser.Decoder();
}
private void emitAll(String event, Object... args) {
@@ -163,11 +171,17 @@ public class Manager extends Emitter {
* Update `socket.id` of all sockets
*/
private void updateSocketIds() {
for (Socket socket : this.nsps.values()) {
socket.id = this.engine.id();
for (Map.Entry<String, Socket> entry : this.nsps.entrySet()) {
String nsp = entry.getKey();
Socket socket = entry.getValue();
socket.id = this.generateId(nsp);
}
}
private String generateId(String nsp) {
return ("/".equals(nsp) ? "" : (nsp + "#")) + this.engine.id();
}
public boolean reconnection() {
return this._reconnection;
}
@@ -383,12 +397,12 @@ public class Manager extends Emitter {
Manager.this.onclose((String)objects[0]);
}
}));
this.subs.add(On.on(this.decoder, Parser.Decoder.EVENT_DECODED, new Listener() {
this.decoder.onDecoded(new Parser.Decoder.Callback() {
@Override
public void call(Object... objects) {
Manager.this.ondecoded((Packet) objects[0]);
public void call (Packet packet) {
Manager.this.ondecoded(packet);
}
}));
});
}
private void onping() {
@@ -425,7 +439,7 @@ public class Manager extends Emitter {
* @param opts options.
* @return a socket instance for the namespace.
*/
public Socket socket(String nsp, Options opts) {
public Socket socket(final String nsp, Options opts) {
Socket socket = this.nsps.get(nsp);
if (socket == null) {
socket = new Socket(this, nsp, opts);
@@ -444,7 +458,7 @@ public class Manager extends Emitter {
socket.on(Socket.EVENT_CONNECT, new Listener() {
@Override
public void call(Object... objects) {
s.id = self.engine.id();
s.id = self.generateId(nsp);
}
});
}
@@ -506,6 +520,7 @@ public class Manager extends Emitter {
On.Handle sub;
while ((sub = this.subs.poll()) != null) sub.destroy();
this.decoder.onDecoded(null);
this.packetBuffer.clear();
this.encoding = false;
@@ -631,6 +646,8 @@ public class Manager extends Emitter {
public long reconnectionDelay;
public long reconnectionDelayMax;
public double randomizationFactor;
public Parser.Encoder encoder;
public Parser.Decoder decoder;
/**
* Connection timeout (ms). Set -1 to disable.

View File

@@ -1,7 +1,6 @@
package io.socket.client;
import io.socket.emitter.Emitter;
import io.socket.hasbinary.HasBinary;
import io.socket.parser.Packet;
import io.socket.parser.Parser;
import io.socket.thread.EventThread;
@@ -9,7 +8,13 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -79,12 +84,12 @@ public class Socket extends Emitter {
}};
/*package*/ String id;
/*package*/ String query;
private volatile boolean connected;
private int ids;
private String nsp;
private Manager io;
private String query;
private Map<Integer, Ack> acks = new HashMap<Integer, Ack>();
private Queue<On.Handle> subs;
private final Queue<List<Object>> receiveBuffer = new LinkedList<List<Object>>();
@@ -182,51 +187,27 @@ public class Socket extends Emitter {
return;
}
List<Object> _args = new ArrayList<Object>(args.length + 1);
_args.add(event);
_args.addAll(Arrays.asList(args));
Ack ack;
Object[] _args;
int lastIndex = args.length - 1;
JSONArray jsonArgs = new JSONArray();
for (Object arg : _args) {
jsonArgs.put(arg);
if (args.length > 0 && args[lastIndex] instanceof Ack) {
_args = new Object[lastIndex];
for (int i = 0; i < lastIndex; i++) {
_args[i] = args[i];
}
int parserType = HasBinary.hasBinary(jsonArgs) ? Parser.BINARY_EVENT : Parser.EVENT;
Packet<JSONArray> packet = new Packet<JSONArray>(parserType, jsonArgs);
if (_args.get(_args.size() - 1) instanceof Ack) {
logger.fine(String.format("emitting packet with ack id %d", Socket.this.ids));
Socket.this.acks.put(Socket.this.ids, (Ack)_args.remove(_args.size() - 1));
jsonArgs = remove(jsonArgs, jsonArgs.length() - 1);
packet.data = jsonArgs;
packet.id = Socket.this.ids++;
}
if (Socket.this.connected) {
Socket.this.packet(packet);
ack = (Ack) args[lastIndex];
} else {
Socket.this.sendBuffer.add(packet);
_args = args;
ack = null;
}
emit(event, _args, ack);
}
});
return this;
}
private static JSONArray remove(JSONArray a, int pos) {
JSONArray na = new JSONArray();
for (int i = 0; i < a.length(); i++){
if (i != pos) {
Object v;
try {
v = a.get(i);
} catch (JSONException e) {
v = null;
}
na.put(v);
}
}
return na;
}
/**
* Emits an event with an acknowledge.
*
@@ -239,25 +220,28 @@ public class Socket extends Emitter {
EventThread.exec(new Runnable() {
@Override
public void run() {
List<Object> _args = new ArrayList<Object>() {{
add(event);
if (args != null) {
addAll(Arrays.asList(args));
}
}};
JSONArray jsonArgs = new JSONArray();
for (Object _arg : _args) {
jsonArgs.put(_arg);
}
int parserType = HasBinary.hasBinary(jsonArgs) ? Parser.BINARY_EVENT : Parser.EVENT;
Packet<JSONArray> packet = new Packet<JSONArray>(parserType, jsonArgs);
jsonArgs.put(event);
if (args != null) {
for (Object arg : args) {
jsonArgs.put(arg);
}
}
Packet<JSONArray> packet = new Packet<JSONArray>(Parser.EVENT, jsonArgs);
if (ack != null) {
logger.fine(String.format("emitting packet with ack id %d", ids));
Socket.this.acks.put(ids, ack);
packet.id = ids++;
}
if (Socket.this.connected) {
Socket.this.packet(packet);
} else {
Socket.this.sendBuffer.add(packet);
}
}
});
return this;
@@ -377,9 +361,7 @@ public class Socket extends Emitter {
jsonArgs.put(arg);
}
int type = HasBinary.hasBinary(jsonArgs)
? Parser.BINARY_ACK : Parser.ACK;
Packet<JSONArray> packet = new Packet<JSONArray>(type, jsonArgs);
Packet<JSONArray> packet = new Packet<JSONArray>(Parser.ACK, jsonArgs);
packet.id = id;
self.packet(packet);
}

View File

@@ -0,0 +1,238 @@
package io.socket.parser;
import io.socket.hasbinary.HasBinary;
import org.json.JSONException;
import org.json.JSONTokener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
final public class IOParser implements Parser {
private static final Logger logger = Logger.getLogger(IOParser.class.getName());
private static Packet<String> error() {
return new Packet<String>(ERROR, "parser error");
}
private IOParser() {}
final public static class Encoder implements Parser.Encoder {
public Encoder() {}
@Override
public void encode(Packet obj, Callback callback) {
if ((obj.type == EVENT || obj.type == ACK) && HasBinary.hasBinary(obj.data)) {
obj.type = obj.type == EVENT ? BINARY_EVENT : BINARY_ACK;
}
if (logger.isLoggable(Level.FINE)) {
logger.fine(String.format("encoding packet %s", obj));
}
if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) {
encodeAsBinary(obj, callback);
} else {
String encoding = encodeAsString(obj);
callback.call(new String[] {encoding});
}
}
private String encodeAsString(Packet obj) {
StringBuilder str = new StringBuilder("" + obj.type);
if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) {
str.append(obj.attachments);
str.append("-");
}
if (obj.nsp != null && obj.nsp.length() != 0 && !"/".equals(obj.nsp)) {
str.append(obj.nsp);
str.append(",");
}
if (obj.id >= 0) {
str.append(obj.id);
}
if (obj.data != null) {
str.append(obj.data);
}
if (logger.isLoggable(Level.FINE)) {
logger.fine(String.format("encoded %s as %s", obj, str));
}
return str.toString();
}
private void encodeAsBinary(Packet obj, Callback callback) {
Binary.DeconstructedPacket deconstruction = Binary.deconstructPacket(obj);
String pack = encodeAsString(deconstruction.packet);
List<Object> buffers = new ArrayList<Object>(Arrays.asList(deconstruction.buffers));
buffers.add(0, pack);
callback.call(buffers.toArray());
}
}
final public static class Decoder implements Parser.Decoder {
/*package*/ BinaryReconstructor reconstructor;
private Decoder.Callback onDecodedCallback;
public Decoder() {
this.reconstructor = null;
}
@Override
public void add(String obj) {
Packet packet = decodeString(obj);
if (BINARY_EVENT == packet.type || BINARY_ACK == packet.type) {
this.reconstructor = new BinaryReconstructor(packet);
if (this.reconstructor.reconPack.attachments == 0) {
if (this.onDecodedCallback != null) {
this.onDecodedCallback.call(packet);
}
}
} else {
if (this.onDecodedCallback != null) {
this.onDecodedCallback.call(packet);
}
}
}
@Override
public void add(byte[] obj) {
if (this.reconstructor == null) {
throw new RuntimeException("got binary data when not reconstructing a packet");
} else {
Packet packet = this.reconstructor.takeBinaryData(obj);
if (packet != null) {
this.reconstructor = null;
if (this.onDecodedCallback != null) {
this.onDecodedCallback.call(packet);
}
}
}
}
private static Packet decodeString(String str) {
int i = 0;
int length = str.length();
Packet<Object> p = new Packet<Object>(Character.getNumericValue(str.charAt(0)));
if (p.type < 0 || p.type > types.length - 1) return error();
if (BINARY_EVENT == p.type || BINARY_ACK == p.type) {
if (!str.contains("-") || length <= i + 1) return error();
StringBuilder attachments = new StringBuilder();
while (str.charAt(++i) != '-') {
attachments.append(str.charAt(i));
}
p.attachments = Integer.parseInt(attachments.toString());
}
if (length > i + 1 && '/' == str.charAt(i + 1)) {
StringBuilder nsp = new StringBuilder();
while (true) {
++i;
char c = str.charAt(i);
if (',' == c) break;
nsp.append(c);
if (i + 1 == length) break;
}
p.nsp = nsp.toString();
} else {
p.nsp = "/";
}
if (length > i + 1){
Character next = str.charAt(i + 1);
if (Character.getNumericValue(next) > -1) {
StringBuilder id = new StringBuilder();
while (true) {
++i;
char c = str.charAt(i);
if (Character.getNumericValue(c) < 0) {
--i;
break;
}
id.append(c);
if (i + 1 == length) break;
}
try {
p.id = Integer.parseInt(id.toString());
} catch (NumberFormatException e){
return error();
}
}
}
if (length > i + 1){
try {
str.charAt(++i);
p.data = new JSONTokener(str.substring(i)).nextValue();
} catch (JSONException e) {
logger.log(Level.WARNING, "An error occured while retrieving data from JSONTokener", e);
return error();
}
}
if (logger.isLoggable(Level.FINE)) {
logger.fine(String.format("decoded %s as %s", str, p));
}
return p;
}
@Override
public void destroy() {
if (this.reconstructor != null) {
this.reconstructor.finishReconstruction();
}
this.onDecodedCallback = null;
}
@Override
public void onDecoded (Callback callback) {
this.onDecodedCallback = callback;
}
}
/*package*/ static class BinaryReconstructor {
public Packet reconPack;
/*package*/ List<byte[]> buffers;
BinaryReconstructor(Packet packet) {
this.reconPack = packet;
this.buffers = new ArrayList<byte[]>();
}
public Packet takeBinaryData(byte[] binData) {
this.buffers.add(binData);
if (this.buffers.size() == this.reconPack.attachments) {
Packet packet = Binary.reconstructPacket(this.reconPack,
this.buffers.toArray(new byte[this.buffers.size()][]));
this.finishReconstruction();
return packet;
}
return null;
}
public void finishReconstruction () {
this.reconPack = null;
this.buffers = new ArrayList<byte[]>();
}
}
}

View File

@@ -1,18 +1,6 @@
package io.socket.parser;
import io.socket.emitter.Emitter;
import org.json.JSONException;
import org.json.JSONTokener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Parser {
private static final Logger logger = Logger.getLogger(Parser.class.getName());
public interface Parser {
/**
* Packet type `connect`.
@@ -64,74 +52,9 @@ public class Parser {
"BINARY_ACK"
};
public static interface Encoder {
private Parser() {}
private static Packet<String> error() {
return new Packet<String>(ERROR, "parser error");
}
public static class Encoder {
public Encoder() {}
public void encode(Packet obj, Callback callback) {
if (logger.isLoggable(Level.FINE)) {
logger.fine(String.format("encoding packet %s", obj));
}
if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) {
encodeAsBinary(obj, callback);
} else {
String encoding = encodeAsString(obj);
callback.call(new String[] {encoding});
}
}
private String encodeAsString(Packet obj) {
StringBuilder str = new StringBuilder();
boolean nsp = false;
str.append(obj.type);
if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) {
str.append(obj.attachments);
str.append("-");
}
if (obj.nsp != null && obj.nsp.length() != 0 && !"/".equals(obj.nsp)) {
nsp = true;
str.append(obj.nsp);
}
if (obj.id >= 0) {
if (nsp) {
str.append(",");
nsp = false;
}
str.append(obj.id);
}
if (obj.data != null) {
if (nsp) str.append(",");
str.append(obj.data);
}
if (logger.isLoggable(Level.FINE)) {
logger.fine(String.format("encoded %s as %s", obj, str));
}
return str.toString();
}
private void encodeAsBinary(Packet obj, Callback callback) {
Binary.DeconstructedPacket deconstruction = Binary.deconstructPacket(obj);
String pack = encodeAsString(deconstruction.packet);
List<Object> buffers = new ArrayList<Object>(Arrays.asList(deconstruction.buffers));
buffers.add(0, pack);
callback.call(buffers.toArray());
}
public void encode(Packet obj, Callback callback);
public interface Callback {
@@ -139,143 +62,19 @@ public class Parser {
}
}
public static class Decoder extends Emitter {
public static interface Decoder {
public static String EVENT_DECODED = "decoded";
public void add(String obj);
/*package*/ BinaryReconstructor reconstructor;
public void add(byte[] obj);
public Decoder() {
this.reconstructor = null;
}
public void destroy();
public void add(String obj) {
Packet packet = decodeString(obj);
if (BINARY_EVENT == packet.type || BINARY_ACK == packet.type) {
this.reconstructor = new BinaryReconstructor(packet);
public void onDecoded(Callback callback);
if (this.reconstructor.reconPack.attachments == 0) {
this.emit(EVENT_DECODED, packet);
}
} else {
this.emit(EVENT_DECODED, packet);
}
}
public interface Callback {
public void add(byte[] obj) {
if (this.reconstructor == null) {
throw new RuntimeException("got binary data when not reconstructing a packet");
} else {
Packet packet = this.reconstructor.takeBinaryData(obj);
if (packet != null) {
this.reconstructor = null;
this.emit(EVENT_DECODED, packet);
}
}
}
private static Packet decodeString(String str) {
Packet<Object> p = new Packet<Object>();
int i = 0;
int length = str.length();
p.type = Character.getNumericValue(str.charAt(0));
if (p.type < 0 || p.type > types.length - 1) return error();
if (BINARY_EVENT == p.type || BINARY_ACK == p.type) {
if (!str.contains("-") || length <= i + 1) return error();
StringBuilder attachments = new StringBuilder();
while (str.charAt(++i) != '-') {
attachments.append(str.charAt(i));
}
p.attachments = Integer.parseInt(attachments.toString());
}
if (length > i + 1 && '/' == str.charAt(i + 1)) {
StringBuilder nsp = new StringBuilder();
while (true) {
++i;
char c = str.charAt(i);
if (',' == c) break;
nsp.append(c);
if (i + 1 == length) break;
}
p.nsp = nsp.toString();
} else {
p.nsp = "/";
}
if (length > i + 1){
Character next = str.charAt(i + 1);
if (Character.getNumericValue(next) > -1) {
StringBuilder id = new StringBuilder();
while (true) {
++i;
char c = str.charAt(i);
if (Character.getNumericValue(c) < 0) {
--i;
break;
}
id.append(c);
if (i + 1 == length) break;
}
try {
p.id = Integer.parseInt(id.toString());
} catch (NumberFormatException e){
return error();
}
}
}
if (length > i + 1){
try {
str.charAt(++i);
p.data = new JSONTokener(str.substring(i)).nextValue();
} catch (JSONException e) {
logger.log(Level.WARNING, "An error occured while retrieving data from JSONTokener", e);
return error();
}
}
if (logger.isLoggable(Level.FINE)) {
logger.fine(String.format("decoded %s as %s", str, p));
}
return p;
}
public void destroy() {
if (this.reconstructor != null) {
this.reconstructor.finishReconstruction();
}
}
}
/*package*/ static class BinaryReconstructor {
public Packet reconPack;
/*package*/ List<byte[]> buffers;
BinaryReconstructor(Packet packet) {
this.reconPack = packet;
this.buffers = new ArrayList<byte[]>();
}
public Packet takeBinaryData(byte[] binData) {
this.buffers.add(binData);
if (this.buffers.size() == this.reconPack.attachments) {
Packet packet = Binary.reconstructPacket(this.reconPack,
this.buffers.toArray(new byte[this.buffers.size()][]));
this.finishReconstruction();
return packet;
}
return null;
}
public void finishReconstruction () {
this.reconPack = null;
this.buffers = new ArrayList<byte[]>();
public void call(Packet packet);
}
}
}

View File

@@ -82,7 +82,7 @@ public abstract class Connection {
}
Socket client(String path) throws URISyntaxException {
return IO.socket(path, createOptions());
return client(path, createOptions());
}
Socket client(IO.Options opts) throws URISyntaxException {

View File

@@ -2,6 +2,8 @@ package io.socket.client;
import io.socket.emitter.Emitter;
import io.socket.util.Optional;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -23,7 +25,7 @@ public class SocketTest extends Connection {
private Socket socket;
@Test(timeout = TIMEOUT)
public void shouldHaveAnAccessibleSocketIdEqualToTheEngineIOSocketId() throws URISyntaxException, InterruptedException {
public void shouldHaveAnAccessibleSocketIdEqualToServerSideSocketId() throws URISyntaxException, InterruptedException {
final BlockingQueue<Optional> values = new LinkedBlockingQueue<Optional>();
socket = client();
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@@ -41,6 +43,25 @@ public class SocketTest extends Connection {
socket.disconnect();
}
@Test(timeout = TIMEOUT)
public void shouldHaveAnAccessibleSocketIdEqualToServerSideSocketIdOnCustomNamespace() throws URISyntaxException, InterruptedException {
final BlockingQueue<Optional> values = new LinkedBlockingQueue<Optional>();
socket = client("/foo");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... objects) {
values.offer(Optional.ofNullable(socket.id()));
}
});
socket.connect();
@SuppressWarnings("unchecked")
Optional<String> id = values.take();
assertThat(id.isPresent(), is(true));
assertThat(id.get(), is("/foo#" + socket.io().engine.id()));
socket.disconnect();
}
@Test(timeout = TIMEOUT)
public void clearsSocketIdUponDisconnection() throws URISyntaxException, InterruptedException {
final BlockingQueue<Optional> values = new LinkedBlockingQueue<Optional>();
@@ -170,19 +191,46 @@ public class SocketTest extends Connection {
}
@Test(timeout = TIMEOUT)
public void shouldStoreQueryStringAsAProperty() throws URISyntaxException, InterruptedException {
IO.Options opts = new IO.Options();
opts.query = "a=b";
Socket socket = IO.socket(this.uri() + "/abc", opts);
public void shouldAcceptAQueryStringOnDefaultNamespace() throws URISyntaxException, InterruptedException, JSONException {
final BlockingQueue<Optional> values = new LinkedBlockingQueue<Optional>();
Socket socket2 = IO.socket(this.uri() + "/abc?b=c&d=e");
socket = client("/?c=d");
socket.emit("getHandshake", new Ack() {
@Override
public void call(Object... args) {
JSONObject handshake = (JSONObject)args[0];
values.offer(Optional.ofNullable(handshake));
}
});
socket.connect();
IO.Options opts3 = new IO.Options();
opts.query = "%26a=%26%3D%3Fa";
Socket socket3 = IO.socket(this.uri() + "/abc", opts);
@SuppressWarnings("unchecked")
Optional<JSONObject> handshake = values.take();
assertThat(handshake.get().getJSONObject("query").getString("c"), is("d"));
assertThat(socket.query, is("a=b"));
assertThat(socket2.query, is("b=c&d=e"));
assertThat(socket3.query, is("%26a=%26%3D%3Fa"));
socket.disconnect();
}
@Test(timeout = TIMEOUT)
public void shouldAcceptAQueryString() throws URISyntaxException, InterruptedException, JSONException {
final BlockingQueue<Optional> values = new LinkedBlockingQueue<Optional>();
socket = client("/abc?b=c&d=e");
socket.on("handshake", new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONObject handshake = (JSONObject)args[0];
values.offer(Optional.ofNullable(handshake));
}
});
socket.connect();
@SuppressWarnings("unchecked")
Optional<JSONObject> handshake = values.take();
JSONObject query = handshake.get().getJSONObject("query");
assertThat(query.getString("b"), is("c"));
assertThat(query.getString("d"), is("e"));
socket.disconnect();
}
}

View File

@@ -16,7 +16,7 @@ import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class ByteArrayTest {
private static Parser.Encoder encoder = new Parser.Encoder();
private static Parser.Encoder encoder = new IOParser.Encoder();
@Test
public void encodeByteArray() {
@@ -87,10 +87,10 @@ public class ByteArrayTest {
encoder.encode(packet, new Parser.Encoder.Callback() {
@Override
public void call(final Object[] encodedPackets) {
final Parser.Decoder decoder = new Parser.Decoder();
decoder.on(Parser.Decoder.EVENT_DECODED, new Emitter.Listener() {
final IOParser.Decoder decoder = new IOParser.Decoder();
decoder.onDecoded(new Parser.Decoder.Callback() {
@Override
public void call(Object... args) {
public void call(Packet packet) {
throw new RuntimeException("received a packet when not all binary data was sent.");
}
});

View File

@@ -14,18 +14,17 @@ import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class Helpers {
private static Parser.Encoder encoder = new Parser.Encoder();
private static Parser.Encoder encoder = new IOParser.Encoder();
private static Packet<String> errorPacket = new Packet<String>(Parser.ERROR, "parser error");
public static void test(final Packet obj) {
encoder.encode(obj, new Parser.Encoder.Callback() {
@Override
public void call(Object[] encodedPackets) {
Parser.Decoder decoder = new Parser.Decoder();
decoder.on(Parser.Decoder.EVENT_DECODED, new Emitter.Listener() {
Parser.Decoder decoder = new IOParser.Decoder();
decoder.onDecoded(new Parser.Decoder.Callback() {
@Override
public void call(Object... args) {
Packet packet = (Packet)args[0];
public void call(Packet packet) {
assertPacket(packet, obj);
}
});
@@ -35,11 +34,10 @@ public class Helpers {
}
public static void testDecodeError(final String errorMessage) {
Parser.Decoder decoder = new Parser.Decoder();
decoder.on(Parser.Decoder.EVENT_DECODED, new Emitter.Listener() {
Parser.Decoder decoder = new IOParser.Decoder();
decoder.onDecoded(new IOParser.Decoder.Callback() {
@Override
public void call(Object... args) {
Packet packet = (Packet)args[0];
public void call(Packet packet) {
assertPacket(errorPacket, packet);
}
});
@@ -52,11 +50,10 @@ public class Helpers {
encoder.encode(obj, new Parser.Encoder.Callback() {
@Override
public void call(Object[] encodedPackets) {
Parser.Decoder decoder = new Parser.Decoder();
decoder.on(Parser.Decoder.EVENT_DECODED, new Emitter.Listener() {
Parser.Decoder decoder = new IOParser.Decoder();
decoder.onDecoded(new Parser.Decoder.Callback() {
@Override
public void call(Object... args) {
Packet packet = (Packet)args[0];
public void call(Packet packet) {
obj.data = originalData;
obj.attachments = -1;
assertPacket(packet, obj);

View File

@@ -9,7 +9,7 @@ import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class ParserTest {
private static Parser.Encoder encoder = new Parser.Encoder();
private static Parser.Encoder encoder = new IOParser.Encoder();
@Test
public void encodeConnection() {

View File

@@ -1,92 +1,6 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"arraybuffer.slice": {
"version": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
"integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco="
},
"backo2": {
"version": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
},
"better-assert": {
"version": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
"requires": {
"callsite": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz"
}
},
"blob": {
"version": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
"integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
},
"callsite": {
"version": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
"integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
},
"component-bind": {
"version": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
},
"component-emitter": {
"version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz",
"integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM="
},
"component-inherit": {
"version": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
},
"cookie": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
},
"has-binary": {
"version": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
"integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
"requires": {
"isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
}
},
"has-cors": {
"version": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
"integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
},
"indexof": {
"version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
},
"isarray": {
"version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"object-assign": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
"integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A="
},
"object-component": {
"version": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
},
"options": {
"version": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
"integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
},
"socket.io": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz",
"integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=",
"requires": {
"debug": "2.3.3",
"engine.io": "1.8.4",
"has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
"object-assign": "4.1.0",
"socket.io-adapter": "0.5.0",
"socket.io-client": "1.7.4",
"socket.io-parser": "2.3.1"
},
"dependencies": {
"accepts": {
"version": "1.3.3",
@@ -112,44 +26,50 @@
"resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
"integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
},
"cookie": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
},
"debug": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
"integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
"integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
"requires": {
"ms": "0.7.2"
"ms": "2.0.0"
}
},
"engine.io": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.4.tgz",
"integrity": "sha1-d7zhK4Dl1gQpM3/sOw2vaR68kAM=",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.0.tgz",
"integrity": "sha1-XKQ4486f28kVxKIcjdnhJmcG5X4=",
"requires": {
"accepts": "1.3.3",
"base64id": "1.0.0",
"cookie": "0.3.1",
"debug": "2.3.3",
"engine.io-parser": "1.3.2",
"ws": "1.1.4"
"debug": "2.6.8",
"engine.io-parser": "2.1.1",
"uws": "0.14.5",
"ws": "2.3.1"
}
},
"engine.io-client": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.4.tgz",
"integrity": "sha1-n+hd7iWFPKa6viW9KtaHEIY+kcI=",
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.1.tgz",
"integrity": "sha1-QVqYUrrbFPoAj6PvHjFgjbZ2EyU=",
"requires": {
"component-emitter": "1.2.1",
"component-inherit": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
"debug": "2.3.3",
"engine.io-parser": "1.3.2",
"has-cors": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
"indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"component-inherit": "0.0.3",
"debug": "2.6.8",
"engine.io-parser": "2.1.1",
"has-cors": "1.1.0",
"indexof": "0.0.1",
"parsejson": "0.0.3",
"parseqs": "0.0.5",
"parseuri": "0.0.5",
"ws": "1.1.2",
"ws": "2.3.1",
"xmlhttprequest-ssl": "1.5.3",
"yeast": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz"
"yeast": "0.1.2"
},
"dependencies": {
"component-emitter": {
@@ -157,34 +77,66 @@
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
},
"ws": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz",
"integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=",
"requires": {
"options": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
"ultron": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz"
}
"component-inherit": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
},
"has-cors": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
"integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
},
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
},
"yeast": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
}
}
},
"engine.io-parser": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
"integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.1.tgz",
"integrity": "sha1-4Ps/DgRi9/WLt3waUun1p+JuRmg=",
"requires": {
"after": "0.8.2",
"arraybuffer.slice": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
"arraybuffer.slice": "0.0.6",
"base64-arraybuffer": "0.1.5",
"blob": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
"has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
"wtf-8": "1.0.0"
"blob": "0.0.4",
"has-binary2": "1.0.2"
},
"dependencies": {
"arraybuffer.slice": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
"integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco="
},
"blob": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
"integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
}
}
},
"json3": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
"integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE="
"has-binary2": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz",
"integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=",
"requires": {
"isarray": "2.0.1"
},
"dependencies": {
"isarray": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
}
}
},
"mime-db": {
"version": "1.27.0",
@@ -200,9 +152,9 @@
}
},
"ms": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
"integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"negotiator": {
"version": "0.6.1",
@@ -214,7 +166,22 @@
"resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
"integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
"requires": {
"better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz"
"better-assert": "1.0.2"
},
"dependencies": {
"better-assert": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
"requires": {
"callsite": "1.0.0"
}
},
"callsite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
"integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
}
}
},
"parseqs": {
@@ -222,7 +189,22 @@
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
"requires": {
"better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz"
"better-assert": "1.0.2"
},
"dependencies": {
"better-assert": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
"requires": {
"callsite": "1.0.0"
}
},
"callsite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
"integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
}
}
},
"parseuri": {
@@ -230,76 +212,172 @@
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
"integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
"requires": {
"better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz"
"better-assert": "1.0.2"
},
"dependencies": {
"better-assert": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
"requires": {
"callsite": "1.0.0"
}
},
"callsite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
"integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
}
}
},
"safe-buffer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
"integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c="
},
"socket.io": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.3.tgz",
"integrity": "sha1-Q1nwaiSTOua9CHeYr3jGgOrjReM=",
"requires": {
"debug": "2.6.8",
"engine.io": "3.1.0",
"object-assign": "4.1.1",
"socket.io-adapter": "1.1.0",
"socket.io-client": "2.0.3",
"socket.io-parser": "3.1.2"
},
"dependencies": {
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
}
}
},
"socket.io-adapter": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz",
"integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.0.tgz",
"integrity": "sha1-x6pGUB3VVsLLiiivj/lcC14dqkw=",
"requires": {
"debug": "2.3.3",
"socket.io-parser": "2.3.1"
"debug": "2.3.3"
},
"dependencies": {
"debug": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
"integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
"requires": {
"ms": "0.7.2"
}
},
"ms": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
"integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
}
}
},
"socket.io-client": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz",
"integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.3.tgz",
"integrity": "sha1-bK9K/5+FsZ/ZG2zhPWmttWT4hzs=",
"requires": {
"backo2": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
"component-bind": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
"backo2": "1.0.2",
"base64-arraybuffer": "0.1.5",
"component-bind": "1.0.0",
"component-emitter": "1.2.1",
"debug": "2.3.3",
"engine.io-client": "1.8.4",
"has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
"indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"object-component": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
"debug": "2.6.8",
"engine.io-client": "3.1.1",
"has-cors": "1.1.0",
"indexof": "0.0.1",
"object-component": "0.0.3",
"parseqs": "0.0.5",
"parseuri": "0.0.5",
"socket.io-parser": "2.3.1",
"to-array": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz"
"socket.io-parser": "3.1.2",
"to-array": "0.1.4"
},
"dependencies": {
"backo2": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
},
"component-bind": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
},
"component-emitter": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
},
"has-cors": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
"integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
},
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
},
"object-component": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
},
"to-array": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
}
}
},
"socket.io-parser": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz",
"integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=",
"requires": {
"component-emitter": "1.2.1",
"debug": "2.6.8",
"has-binary2": "1.0.2",
"isarray": "2.0.1"
},
"dependencies": {
"component-emitter": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
},
"isarray": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
}
}
},
"socket.io-parser": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz",
"integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=",
"requires": {
"component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz",
"debug": "2.2.0",
"isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"json3": "3.3.2"
},
"dependencies": {
"debug": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
"requires": {
"ms": "0.7.1"
}
},
"ms": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
"integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
}
}
"uws": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz",
"integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=",
"optional": true
},
"ws": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz",
"integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=",
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz",
"integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=",
"requires": {
"options": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
"ultron": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz"
"safe-buffer": "5.0.1",
"ultron": "1.1.0"
},
"dependencies": {
"ultron": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz",
"integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ="
}
}
},
"xmlhttprequest-ssl": {
@@ -308,23 +386,4 @@
"integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0="
}
}
},
"to-array": {
"version": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
},
"ultron": {
"version": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
"integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
},
"wtf-8": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz",
"integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo="
},
"yeast": {
"version": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
}
}
}

View File

@@ -1,6 +1,6 @@
{
"private": true,
"dependencies": {
"socket.io": "1.7.4"
"socket.io": "2.0.3"
}
}

View File

@@ -10,7 +10,10 @@ if (process.env.SSL) {
server = require('http').createServer();
}
var io = require('socket.io')(server, { pingInterval: 2000 });
var io = require('socket.io')(server, {
pingInterval: 2000,
wsEngine: 'ws'
});
var port = process.env.PORT || 3000;
var nsp = process.argv[2] || '/';
var slice = Array.prototype.slice;
@@ -31,6 +34,10 @@ io.of('/asd').on('connection', function() {
// register namespace
});
io.of('/abc').on('connection', function(socket) {
socket.emit('handshake', socket.handshake);
});
io.of(nsp).on('connection', function(socket) {
socket.send('hello client');
@@ -93,6 +100,10 @@ io.of(nsp).on('connection', function(socket) {
socket.on('error', function() {
console.log('error: ', arguments);
});
socket.on('getHandshake', function(cb) {
cb(socket.handshake);
});
});