compatible with 0.6.1
This commit is contained in:
@@ -378,7 +378,7 @@ public abstract class Socket extends Emitter {
|
|||||||
if (Packet.OPEN.equals(packet.type)) {
|
if (Packet.OPEN.equals(packet.type)) {
|
||||||
this.onHandshake(gson.fromJson(packet.data, HandshakeData.class));
|
this.onHandshake(gson.fromJson(packet.data, HandshakeData.class));
|
||||||
} else if (Packet.PONG.equals(packet.type)) {
|
} else if (Packet.PONG.equals(packet.type)) {
|
||||||
this.ping();
|
this.setPing();
|
||||||
} else if (Packet.ERROR.equals(packet.type)) {
|
} else if (Packet.ERROR.equals(packet.type)) {
|
||||||
// TODO: handle error
|
// TODO: handle error
|
||||||
EngineIOException err = new EngineIOException("server error");
|
EngineIOException err = new EngineIOException("server error");
|
||||||
@@ -402,7 +402,7 @@ public abstract class Socket extends Emitter {
|
|||||||
this.pingInterval = data.pingInterval;
|
this.pingInterval = data.pingInterval;
|
||||||
this.pingTimeout = data.pingTimeout;
|
this.pingTimeout = data.pingTimeout;
|
||||||
this.onOpen();
|
this.onOpen();
|
||||||
this.ping();
|
this.setPing();
|
||||||
|
|
||||||
this.off(EVENT_HEARTBEAT, this.onHeartbeatAsListener);
|
this.off(EVENT_HEARTBEAT, this.onHeartbeatAsListener);
|
||||||
this.on(EVENT_HEARTBEAT, this.onHeartbeatAsListener);
|
this.on(EVENT_HEARTBEAT, this.onHeartbeatAsListener);
|
||||||
@@ -439,7 +439,7 @@ public abstract class Socket extends Emitter {
|
|||||||
}, timeout, TimeUnit.MILLISECONDS);
|
}, timeout, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ping() {
|
private void setPing() {
|
||||||
if (this.pingIntervalTimer != null) {
|
if (this.pingIntervalTimer != null) {
|
||||||
pingIntervalTimer.cancel(true);
|
pingIntervalTimer.cancel(true);
|
||||||
}
|
}
|
||||||
@@ -452,7 +452,7 @@ public abstract class Socket extends Emitter {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
logger.fine(String.format("writing ping packet - expecting pong within %sms", self.pingTimeout));
|
logger.fine(String.format("writing ping packet - expecting pong within %sms", self.pingTimeout));
|
||||||
self.sendPacket(Packet.PING);
|
self.ping();
|
||||||
self.onHeartbeat(self.pingTimeout);
|
self.onHeartbeat(self.pingTimeout);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -460,6 +460,18 @@ public abstract class Socket extends Emitter {
|
|||||||
}, this.pingInterval, TimeUnit.MILLISECONDS);
|
}, this.pingInterval, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a ping packet
|
||||||
|
*/
|
||||||
|
public void ping() {
|
||||||
|
EventThread.exec(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Socket.this.sendPacket(Packet.PING);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void onDrain() {
|
private void onDrain() {
|
||||||
this.callbacks();
|
this.callbacks();
|
||||||
for (int i = 0; i < this.prevBufferLen; i++) {
|
for (int i = 0; i < this.prevBufferLen; i++) {
|
||||||
@@ -578,6 +590,7 @@ public abstract class Socket extends Emitter {
|
|||||||
private void onClose(String reason, Exception desc) {
|
private void onClose(String reason, Exception desc) {
|
||||||
if (this.readyState == ReadyState.OPENING || this.readyState == ReadyState.OPEN) {
|
if (this.readyState == ReadyState.OPENING || this.readyState == ReadyState.OPEN) {
|
||||||
logger.fine(String.format("socket close with reason: %s", reason));
|
logger.fine(String.format("socket close with reason: %s", reason));
|
||||||
|
final Socket self = this;
|
||||||
if (this.pingIntervalTimer != null) {
|
if (this.pingIntervalTimer != null) {
|
||||||
this.pingIntervalTimer.cancel(true);
|
this.pingIntervalTimer.cancel(true);
|
||||||
}
|
}
|
||||||
@@ -587,12 +600,15 @@ public abstract class Socket extends Emitter {
|
|||||||
EventThread.nextTick(new Runnable() {
|
EventThread.nextTick(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Socket.this.writeBuffer.clear();
|
self.writeBuffer.clear();
|
||||||
Socket.this.callbackBuffer.clear();
|
self.callbackBuffer.clear();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
ReadyState prev = this.readyState;
|
||||||
this.readyState = ReadyState.CLOSED;
|
this.readyState = ReadyState.CLOSED;
|
||||||
this.emit(EVENT_CLOSE, reason, desc);
|
if (prev == ReadyState.OPEN) {
|
||||||
|
this.emit(EVENT_CLOSE, reason, desc);
|
||||||
|
}
|
||||||
this.onclose();
|
this.onclose();
|
||||||
this.id = null;
|
this.id = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package com.github.nkzawa.engineio.client;
|
package com.github.nkzawa.engineio.client;
|
||||||
|
|
||||||
|
import com.github.nkzawa.emitter.Emitter;
|
||||||
import com.github.nkzawa.engineio.client.transports.Polling;
|
import com.github.nkzawa.engineio.client.transports.Polling;
|
||||||
import com.github.nkzawa.engineio.client.transports.WebSocket;
|
import com.github.nkzawa.engineio.client.transports.WebSocket;
|
||||||
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;
|
||||||
|
|
||||||
|
import java.net.URISyntaxException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -35,4 +37,32 @@ public class SocketTest {
|
|||||||
assertThat(socket.filterUpgrades(upgrades), is(expected));
|
assertThat(socket.filterUpgrades(upgrades), is(expected));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* should not emit close on incorrect connection.
|
||||||
|
*
|
||||||
|
* @throws URISyntaxException
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void socketClosing() throws URISyntaxException, InterruptedException {
|
||||||
|
Socket socket = new Socket("ws://localhost:8080") {
|
||||||
|
@Override
|
||||||
|
public void onopen() {}
|
||||||
|
@Override
|
||||||
|
public void onmessage(String data) {}
|
||||||
|
@Override
|
||||||
|
public void onclose() {}
|
||||||
|
};
|
||||||
|
final boolean[] closed = {false};
|
||||||
|
|
||||||
|
socket.on(Socket.EVENT_CLOSE, new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
closed[0] = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.open();
|
||||||
|
|
||||||
|
Thread.sleep(200);
|
||||||
|
assertThat(closed[0], is(false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"engine.io": "0.5.0"
|
"engine.io": "0.6.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user