diff --git a/.gitignore b/.gitignore
index e0c7e85..1df5f8b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ bin/
jar/
.idea
BasicExample.class
+examples/customid.dat
diff --git a/README.markdown b/README.markdown
index a489662..51234ca 100644
--- a/README.markdown
+++ b/README.markdown
@@ -28,14 +28,21 @@ Using socket.io-java-client is quite simple. But lets see:
Checkout and compile the project:
``` bash
-git clone git://github.com/Gottox/socket.io-java-client.git
-cd socket.io-java-client
+git clone https://github.com/yunba/yunba-socket.io-java-sdk.git
+cd yunba-socket.io-java-sdk
ant jar
mv jar/socketio.jar /path/to/your/libs/project
```
### yunba.io socket.io API 例子
+注意在使用前,编辑 `examples/basic/BasicExample.java`,把 APPKEY 换成你自己的。
+
+```java
+/* 从 yunba.io 获取应用的 appkey */
+private static String APPKEY = "52fcc04c4dc903d66d6f8f92";
+```
+
```bash
cd examples
javac -cp ../jar/socketio.jar basic/BasicExample.java
diff --git a/build.xml b/build.xml
index afa2eb6..3a6b45f 100644
--- a/build.xml
+++ b/build.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/examples/basic/BasicExample.java b/examples/basic/BasicExample.java
index 3651fd2..eddc1b4 100644
--- a/examples/basic/BasicExample.java
+++ b/examples/basic/BasicExample.java
@@ -18,6 +18,12 @@
import java.lang.Exception;
import java.lang.Object;
import java.lang.System;
+import java.util.List;
+import java.nio.charset.Charset;
+import java.io.PrintWriter;
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.UUID;
public class BasicExample implements IOCallback {
private SocketIO socket;
@@ -91,8 +97,22 @@ public void on(String event, IOAcknowledge ack, Object... args) {
public void onSocketConnectAck() throws Exception {
System.out.println("onSocketConnectAck");
- // emit connect
- socket.emit("connect", new JSONObject("{'appkey': '" + APPKEY + "'}"));
+ String customId = "";
+ try {
+ List file = java.nio.file.Files.readAllLines(Paths.get("customid.dat"), Charset.defaultCharset());
+ customId = file.get(0);
+ } catch (Exception e) {
+ customId = UUID.randomUUID().toString();
+ }
+
+ // emit connect
+ socket.emit("connect", new JSONObject("{'appkey': '" + APPKEY + "', 'customid': '" + customId + "'}"));
+
+ try {
+ PrintWriter writer = new PrintWriter("customid.dat", Charset.defaultCharset().name());
+ writer.println(customId);
+ writer.close();
+ } catch (Exception e) {}
}
public void onConnAck(JSONObject json) throws Exception {
diff --git a/examples/customid.dat b/examples/customid.dat
new file mode 100644
index 0000000..67f5174
--- /dev/null
+++ b/examples/customid.dat
@@ -0,0 +1 @@
+8683f3a6-c092-4d2b-9f85-395fc5432c40
diff --git a/libs/WebSocket.jar b/libs/WebSocket.jar
deleted file mode 100644
index ef36379..0000000
Binary files a/libs/WebSocket.jar and /dev/null differ
diff --git a/libs/java_websocket.jar b/libs/java_websocket.jar
new file mode 100644
index 0000000..2cae642
Binary files /dev/null and b/libs/java_websocket.jar differ
diff --git a/src/io/socket/IOConnection.java b/src/io/socket/IOConnection.java
index 0febf78..f15980d 100644
--- a/src/io/socket/IOConnection.java
+++ b/src/io/socket/IOConnection.java
@@ -169,6 +169,7 @@ private class ReconnectTask extends TimerTask {
*/
@Override
public void run() {
+ handshake();
connectTransport();
if (!keepAliveInQueue) {
sendPlain("2::");
@@ -293,6 +294,7 @@ private void handshake() {
URL url;
String response;
URLConnection connection;
+ int oldState = IOConnection.this.getState();
try {
setState(STATE_HANDSHAKE);
url = new URL(IOConnection.this.url.toString() + SOCKET_IO_1);
@@ -319,7 +321,8 @@ private void handshake() {
closingTimeout = Long.parseLong(data[2]) * 1000;
protocols = Arrays.asList(data[3].split(","));
} catch (Exception e) {
- error(new SocketIOException("Error while handshaking", e));
+ if (oldState == STATE_INIT)
+ error(new SocketIOException("Error while handshaking", e));
}
}
@@ -331,7 +334,11 @@ private synchronized void connectTransport() {
return;
setState(STATE_CONNECTING);
if (protocols.contains(WebsocketTransport.TRANSPORT_NAME))
- transport = WebsocketTransport.create(url, this);
+ try {
+ transport = WebsocketTransport.create(url, this);
+ } catch (IOException exception) {
+ error(new SocketIOException("Error while connect", exception));
+ }
else if (protocols.contains(XhrTransport.TRANSPORT_NAME))
transport = XhrTransport.create(url, this);
else {
diff --git a/src/io/socket/WebsocketTransport.java b/src/io/socket/WebsocketTransport.java
index 0ec9bee..de0faf7 100644
--- a/src/io/socket/WebsocketTransport.java
+++ b/src/io/socket/WebsocketTransport.java
@@ -8,7 +8,7 @@
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
-import org.java_websocket.client.DefaultSSLWebSocketClientFactory;
+// import org.java_websocket.client.DefaultSSLWebSocketClientFactory;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
@@ -16,7 +16,8 @@ class WebsocketTransport extends WebSocketClient implements IOTransport {
private final static Pattern PATTERN_HTTP = Pattern.compile("^http");
public static final String TRANSPORT_NAME = "websocket";
private IOConnection connection;
- public static IOTransport create(URL url, IOConnection connection) {
+
+ public static IOTransport create(URL url, IOConnection connection) throws IOException {
URI uri = URI.create(
PATTERN_HTTP.matcher(url.toString()).replaceFirst("ws")
+ IOConnection.SOCKET_IO_1 + TRANSPORT_NAME
@@ -25,12 +26,14 @@ public static IOTransport create(URL url, IOConnection connection) {
return new WebsocketTransport(uri, connection);
}
- public WebsocketTransport(URI uri, IOConnection connection) {
+ public WebsocketTransport(URI uri, IOConnection connection) throws IOException {
super(uri);
this.connection = connection;
SSLContext context = IOConnection.getSslContext();
if("wss".equals(uri.getScheme()) && context != null) {
- this.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(context));
+ SSLSocketFactory defaultSSLSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
+ this.setSocket(defaultSSLSocketFactory.createSocket());
+ // this.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(context));
}
}