Skip to content

Commit 4885e7d

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
1 parent 48fec45 commit 4885e7d

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/main/java/io/socket/client/Socket.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,8 @@ private void onack(Packet<JSONArray> packet) {
367367
private void onconnect(String id) {
368368
this.connected = true;
369369
this.id = id;
370-
super.emit(EVENT_CONNECT);
371370
this.emitBuffered();
371+
super.emit(EVENT_CONNECT);
372372
}
373373

374374
private void emitBuffered() {

src/test/java/io/socket/client/SocketTest.java

+30
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,34 @@ public void shouldThrowOnReservedEvent() {
257257

258258
socket.disconnect();
259259
}
260+
261+
@Test(timeout = TIMEOUT)
262+
public void shouldEmitEventsInOrder() throws InterruptedException {
263+
final BlockingQueue<String> values = new LinkedBlockingQueue<>();
264+
265+
socket = client();
266+
267+
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
268+
@Override
269+
public void call(Object... objects) {
270+
socket.emit("ack", "second", new Ack() {
271+
@Override
272+
public void call(Object... args) {
273+
values.offer((String) args[0]);
274+
}
275+
});
276+
}
277+
});
278+
279+
socket.emit("ack", "first", new Ack() {
280+
@Override
281+
public void call(Object... args) {
282+
values.offer((String) args[0]);
283+
}
284+
});
285+
286+
socket.connect();
287+
assertThat(values.take(), is("first"));
288+
assertThat(values.take(), is("second"));
289+
}
260290
}

0 commit comments

Comments
 (0)