Skip to content

Commit 8bd35da

Browse files
fix: ensure buffered events are sent in order
Before this commit, an event sent in the "connect" handler could be sent before the events that were buffered while disconnected. Related: socketio/socket.io-client#1458 Backported from 4885e7d
1 parent e57160a commit 8bd35da

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

Diff for: src/main/java/io/socket/client/Socket.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -386,8 +386,8 @@ private void onack(Packet<JSONArray> packet) {
386386

387387
private void onconnect() {
388388
this.connected = true;
389-
this.emit(EVENT_CONNECT);
390389
this.emitBuffered();
390+
super.emit(EVENT_CONNECT);
391391
}
392392

393393
private void emitBuffered() {

Diff for: src/test/java/io/socket/client/SocketTest.java

+30
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,34 @@ public void call(Object... args) {
233233

234234
socket.disconnect();
235235
}
236+
237+
@Test(timeout = TIMEOUT)
238+
public void shouldEmitEventsInOrder() throws InterruptedException, URISyntaxException {
239+
final BlockingQueue<String> values = new LinkedBlockingQueue<>();
240+
241+
socket = client();
242+
243+
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
244+
@Override
245+
public void call(Object... objects) {
246+
socket.emit("ack", "second", new Ack() {
247+
@Override
248+
public void call(Object... args) {
249+
values.offer((String) args[0]);
250+
}
251+
});
252+
}
253+
});
254+
255+
socket.emit("ack", "first", new Ack() {
256+
@Override
257+
public void call(Object... args) {
258+
values.offer((String) args[0]);
259+
}
260+
});
261+
262+
socket.connect();
263+
assertThat(values.take(), is("first"));
264+
assertThat(values.take(), is("second"));
265+
}
236266
}

0 commit comments

Comments
 (0)