Merge pull request #436 from socketio/fix/socket.io-client-1.7.4
make compatible with socket.io-client 1.7.4 (node client)
This commit is contained in:
13
README.md
13
README.md
@@ -125,14 +125,19 @@ socket.on("foo", new Emitter.Listener() {
|
||||
SSL (HTTPS, WSS) settings:
|
||||
|
||||
```java
|
||||
OkHttpClient okHttpClient = new OkHttpClient.Builder()
|
||||
.hostnameVerifier(myHostnameVerifier)
|
||||
.sslSocketFactory(mySSLContext.getSocketFactory(), myX509TrustManager)
|
||||
.build();
|
||||
|
||||
// default settings for all sockets
|
||||
IO.setDefaultSSLContext(mySSLContext);
|
||||
IO.setDefaultHostnameVerifier(myHostnameVerifier);
|
||||
Socket.setDefaultOkHttpWebSocketFactory(okHttpClient);
|
||||
Socket.setDefaultOkHttpCallFactory(okHttpClient);
|
||||
|
||||
// set as an option
|
||||
opts = new IO.Options();
|
||||
opts.sslContext = mySSLContext;
|
||||
opts.hostnameVerifier = myHostnameVerifier;
|
||||
opts.callFactory = okHttpClient;
|
||||
opts.webSocketFactory = okHttpClient;
|
||||
socket = IO.socket("https://localhost", opts);
|
||||
```
|
||||
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -62,7 +62,7 @@
|
||||
<dependency>
|
||||
<groupId>io.socket</groupId>
|
||||
<artifactId>engine.io-client</artifactId>
|
||||
<version>0.8.3</version>
|
||||
<version>0.8.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
|
||||
@@ -2,6 +2,9 @@ package io.socket.client;
|
||||
|
||||
|
||||
import io.socket.parser.Parser;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.WebSocket;
|
||||
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.SSLContext;
|
||||
@@ -23,12 +26,12 @@ public class IO {
|
||||
*/
|
||||
public static int protocol = Parser.protocol;
|
||||
|
||||
public static void setDefaultSSLContext(SSLContext sslContext) {
|
||||
Manager.defaultSSLContext = sslContext;
|
||||
public static void setDefaultOkHttpWebSocketFactory(WebSocket.Factory factory) {
|
||||
Manager.defaultWebSocketFactory = factory;
|
||||
}
|
||||
|
||||
public static void setDefaultHostnameVerifier(HostnameVerifier hostnameVerifier) {
|
||||
Manager.defaultHostnameVerifier = hostnameVerifier;
|
||||
public static void setDefaultOkHttpCallFactory(Call.Factory factory) {
|
||||
Manager.defaultCallFactory = factory;
|
||||
}
|
||||
|
||||
private IO() {}
|
||||
@@ -82,7 +85,12 @@ public class IO {
|
||||
io = managers.get(id);
|
||||
}
|
||||
|
||||
return io.socket(parsed.getPath());
|
||||
String query = parsed.getQuery();
|
||||
if (query != null && (opts.query == null || opts.query.isEmpty())) {
|
||||
opts.query = query;
|
||||
}
|
||||
|
||||
return io.socket(parsed.getPath(), opts);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ import io.socket.emitter.Emitter;
|
||||
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;
|
||||
@@ -73,8 +75,8 @@ public class Manager extends Emitter {
|
||||
*/
|
||||
public static final String EVENT_TRANSPORT = Engine.EVENT_TRANSPORT;
|
||||
|
||||
/*package*/ static SSLContext defaultSSLContext;
|
||||
/*package*/ static HostnameVerifier defaultHostnameVerifier;
|
||||
/*package*/ static WebSocket.Factory defaultWebSocketFactory;
|
||||
/*package*/ static Call.Factory defaultCallFactory;
|
||||
|
||||
/*package*/ ReadyState readyState;
|
||||
|
||||
@@ -123,11 +125,11 @@ public class Manager extends Emitter {
|
||||
if (opts.path == null) {
|
||||
opts.path = "/socket.io";
|
||||
}
|
||||
if (opts.sslContext == null) {
|
||||
opts.sslContext = defaultSSLContext;
|
||||
if (opts.webSocketFactory == null) {
|
||||
opts.webSocketFactory = defaultWebSocketFactory;
|
||||
}
|
||||
if (opts.hostnameVerifier == null) {
|
||||
opts.hostnameVerifier = defaultHostnameVerifier;
|
||||
if (opts.callFactory == null) {
|
||||
opts.callFactory = defaultCallFactory;
|
||||
}
|
||||
this.opts = opts;
|
||||
this.nsps = new ConcurrentHashMap<String, Socket>();
|
||||
@@ -416,12 +418,13 @@ public class Manager extends Emitter {
|
||||
* Initializes {@link Socket} instances for each namespaces.
|
||||
*
|
||||
* @param nsp namespace.
|
||||
* @param opts options.
|
||||
* @return a socket instance for the namespace.
|
||||
*/
|
||||
public Socket socket(String nsp) {
|
||||
public Socket socket(String nsp, Options opts) {
|
||||
Socket socket = this.nsps.get(nsp);
|
||||
if (socket == null) {
|
||||
socket = new Socket(this, nsp);
|
||||
socket = new Socket(this, nsp, opts);
|
||||
Socket _socket = this.nsps.putIfAbsent(nsp, socket);
|
||||
if (_socket != null) {
|
||||
socket = _socket;
|
||||
@@ -445,6 +448,10 @@ public class Manager extends Emitter {
|
||||
return socket;
|
||||
}
|
||||
|
||||
public Socket socket(String nsp) {
|
||||
return socket(nsp, null);
|
||||
}
|
||||
|
||||
/*package*/ void destroy(Socket socket) {
|
||||
this.connecting.remove(socket);
|
||||
if (!this.connecting.isEmpty()) return;
|
||||
@@ -456,6 +463,10 @@ public class Manager extends Emitter {
|
||||
logger.fine(String.format("writing packet %s", packet));
|
||||
final Manager self = this;
|
||||
|
||||
if (packet.query != null && !packet.query.isEmpty() && packet.type == Parser.CONNECT) {
|
||||
packet.nsp += "?" + packet.query;
|
||||
}
|
||||
|
||||
if (!self.encoding) {
|
||||
self.encoding = true;
|
||||
this.encoder.encode(packet, new Parser.Encoder.Callback() {
|
||||
|
||||
@@ -79,6 +79,7 @@ public class Socket extends Emitter {
|
||||
}};
|
||||
|
||||
/*package*/ String id;
|
||||
/*package*/ String query;
|
||||
|
||||
private volatile boolean connected;
|
||||
private int ids;
|
||||
@@ -89,9 +90,12 @@ public class Socket extends Emitter {
|
||||
private final Queue<List<Object>> receiveBuffer = new LinkedList<List<Object>>();
|
||||
private final Queue<Packet<JSONArray>> sendBuffer = new LinkedList<Packet<JSONArray>>();
|
||||
|
||||
public Socket(Manager io, String nsp) {
|
||||
public Socket(Manager io, String nsp, Manager.Options opts) {
|
||||
this.io = io;
|
||||
this.nsp = nsp;
|
||||
if (opts != null) {
|
||||
this.query = opts.query;
|
||||
}
|
||||
}
|
||||
|
||||
private void subEvents() {
|
||||
@@ -268,9 +272,15 @@ public class Socket extends Emitter {
|
||||
logger.fine("transport is open - connecting");
|
||||
|
||||
if (!"/".equals(this.nsp)) {
|
||||
if (this.query != null && !this.query.isEmpty()) {
|
||||
Packet packet = new Packet(Parser.CONNECT);
|
||||
packet.query = this.query;
|
||||
this.packet(packet);
|
||||
} else {
|
||||
this.packet(new Packet(Parser.CONNECT));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onclose(String reason) {
|
||||
logger.fine(String.format("close (%s)", reason));
|
||||
|
||||
@@ -8,6 +8,7 @@ public class Packet<T> {
|
||||
public String nsp;
|
||||
public T data;
|
||||
public int attachments;
|
||||
public String query;
|
||||
|
||||
public Packet() {}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ public class ExecutionTest extends Connection {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(ExecutionTest.class.getName());
|
||||
|
||||
final static int TIMEOUT = 60 * 1000;
|
||||
final static int TIMEOUT = 100 * 1000;
|
||||
|
||||
@Test(timeout = TIMEOUT)
|
||||
public void execConnection() throws InterruptedException, IOException {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package io.socket.client;
|
||||
|
||||
import io.socket.emitter.Emitter;
|
||||
import okhttp3.OkHttpClient;
|
||||
import org.junit.After;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -9,7 +10,9 @@ import org.junit.runners.JUnit4;
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.KeyManagerFactory;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLSession;
|
||||
import javax.net.ssl.TrustManagerFactory;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
@@ -21,15 +24,20 @@ import java.util.concurrent.LinkedBlockingQueue;
|
||||
@RunWith(JUnit4.class)
|
||||
public class SSLConnectionTest extends Connection {
|
||||
|
||||
// for test on localhost
|
||||
static HostnameVerifier hostnameVerifier = new javax.net.ssl.HostnameVerifier(){
|
||||
public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
|
||||
return hostname.equals("localhost");
|
||||
}
|
||||
};
|
||||
private static OkHttpClient sOkHttpClient;
|
||||
|
||||
private Socket socket;
|
||||
|
||||
static {
|
||||
try {
|
||||
prepareOkHttpClient();
|
||||
} catch(GeneralSecurityException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
String uri() {
|
||||
return "https://localhost:" + PORT;
|
||||
@@ -47,7 +55,7 @@ public class SSLConnectionTest extends Connection {
|
||||
return new String[] {"DEBUG=socket.io:*", "PORT=" + PORT, "SSL=1"};
|
||||
}
|
||||
|
||||
SSLContext createSSLContext() throws GeneralSecurityException, IOException {
|
||||
private static void prepareOkHttpClient() throws GeneralSecurityException, IOException {
|
||||
KeyStore ks = KeyStore.getInstance("JKS");
|
||||
File file = new File("src/test/resources/keystore.jks");
|
||||
ks.load(new FileInputStream(file), "password".toCharArray());
|
||||
@@ -60,21 +68,30 @@ public class SSLConnectionTest extends Connection {
|
||||
|
||||
SSLContext sslContext = SSLContext.getInstance("TLSv1");
|
||||
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
|
||||
return sslContext;
|
||||
|
||||
sOkHttpClient = new OkHttpClient.Builder()
|
||||
.hostnameVerifier(new HostnameVerifier(){
|
||||
public boolean verify(String hostname, SSLSession sslSession) {
|
||||
return hostname.equals("localhost");
|
||||
}
|
||||
})
|
||||
.sslSocketFactory(sslContext.getSocketFactory(),
|
||||
(X509TrustManager) tmf.getTrustManagers()[0])
|
||||
.build();
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
IO.setDefaultSSLContext(null);
|
||||
IO.setDefaultHostnameVerifier(null);
|
||||
IO.setDefaultOkHttpCallFactory(null);
|
||||
IO.setDefaultOkHttpWebSocketFactory(null);
|
||||
}
|
||||
|
||||
@Test(timeout = TIMEOUT)
|
||||
public void connect() throws Exception {
|
||||
final BlockingQueue<Object> values = new LinkedBlockingQueue<Object>();
|
||||
IO.Options opts = createOptions();
|
||||
opts.sslContext = createSSLContext();
|
||||
opts.hostnameVerifier = hostnameVerifier;
|
||||
opts.callFactory = sOkHttpClient;
|
||||
opts.webSocketFactory = sOkHttpClient;
|
||||
socket = client(opts);
|
||||
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
||||
@Override
|
||||
@@ -96,8 +113,8 @@ public class SSLConnectionTest extends Connection {
|
||||
@Test(timeout = TIMEOUT)
|
||||
public void defaultSSLContext() throws Exception {
|
||||
final BlockingQueue<Object> values = new LinkedBlockingQueue<Object>();
|
||||
IO.setDefaultSSLContext(createSSLContext());
|
||||
IO.setDefaultHostnameVerifier(hostnameVerifier);
|
||||
IO.setDefaultOkHttpWebSocketFactory(sOkHttpClient);
|
||||
IO.setDefaultOkHttpCallFactory(sOkHttpClient);
|
||||
socket = client();
|
||||
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
||||
@Override
|
||||
|
||||
@@ -168,4 +168,21 @@ public class SocketTest extends Connection {
|
||||
|
||||
socket.disconnect();
|
||||
}
|
||||
|
||||
@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);
|
||||
|
||||
Socket socket2 = IO.socket(this.uri() + "/abc?b=c&d=e");
|
||||
|
||||
IO.Options opts3 = new IO.Options();
|
||||
opts.query = "%26a=%26%3D%3Fa";
|
||||
Socket socket3 = IO.socket(this.uri() + "/abc", opts);
|
||||
|
||||
assertThat(socket.query, is("a=b"));
|
||||
assertThat(socket2.query, is("b=c&d=e"));
|
||||
assertThat(socket3.query, is("%26a=%26%3D%3Fa"));
|
||||
}
|
||||
}
|
||||
|
||||
330
src/test/resources/package-lock.json
generated
Normal file
330
src/test/resources/package-lock.json
generated
Normal file
@@ -0,0 +1,330 @@
|
||||
{
|
||||
"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",
|
||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
|
||||
"integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
|
||||
"requires": {
|
||||
"mime-types": "2.1.15",
|
||||
"negotiator": "0.6.1"
|
||||
}
|
||||
},
|
||||
"after": {
|
||||
"version": "0.8.2",
|
||||
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
|
||||
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
|
||||
},
|
||||
"base64-arraybuffer": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
|
||||
"integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
|
||||
},
|
||||
"base64id": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
|
||||
"integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"engine.io": {
|
||||
"version": "1.8.4",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.4.tgz",
|
||||
"integrity": "sha1-d7zhK4Dl1gQpM3/sOw2vaR68kAM=",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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=",
|
||||
"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",
|
||||
"parsejson": "0.0.3",
|
||||
"parseqs": "0.0.5",
|
||||
"parseuri": "0.0.5",
|
||||
"ws": "1.1.2",
|
||||
"xmlhttprequest-ssl": "1.5.3",
|
||||
"yeast": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz"
|
||||
},
|
||||
"dependencies": {
|
||||
"component-emitter": {
|
||||
"version": "1.2.1",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"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=",
|
||||
"requires": {
|
||||
"after": "0.8.2",
|
||||
"arraybuffer.slice": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"json3": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
|
||||
"integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.27.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
|
||||
"integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.15",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
|
||||
"integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
|
||||
"requires": {
|
||||
"mime-db": "1.27.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "0.7.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
|
||||
"integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
|
||||
},
|
||||
"negotiator": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
||||
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
|
||||
},
|
||||
"parsejson": {
|
||||
"version": "0.0.3",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"parseqs": {
|
||||
"version": "0.0.5",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"parseuri": {
|
||||
"version": "0.0.5",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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=",
|
||||
"requires": {
|
||||
"debug": "2.3.3",
|
||||
"socket.io-parser": "2.3.1"
|
||||
}
|
||||
},
|
||||
"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=",
|
||||
"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",
|
||||
"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",
|
||||
"parseuri": "0.0.5",
|
||||
"socket.io-parser": "2.3.1",
|
||||
"to-array": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz"
|
||||
},
|
||||
"dependencies": {
|
||||
"component-emitter": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
|
||||
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
|
||||
}
|
||||
}
|
||||
},
|
||||
"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="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz",
|
||||
"integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=",
|
||||
"requires": {
|
||||
"options": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
|
||||
"ultron": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz"
|
||||
}
|
||||
},
|
||||
"xmlhttprequest-ssl": {
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
|
||||
"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="
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"socket.io": "1.4.8"
|
||||
"socket.io": "1.7.4"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user