From 4885e7d59fad78285448694cb5681e8a9ce809ef Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Mon, 26 Apr 2021 11:22:38 +0200 Subject: [PATCH] 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: https://github.com/socketio/socket.io-client/issues/1458 --- src/main/java/io/socket/client/Socket.java | 2 +- .../java/io/socket/client/SocketTest.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/socket/client/Socket.java b/src/main/java/io/socket/client/Socket.java index 669732b..70e35dd 100644 --- a/src/main/java/io/socket/client/Socket.java +++ b/src/main/java/io/socket/client/Socket.java @@ -367,8 +367,8 @@ public class Socket extends Emitter { private void onconnect(String id) { this.connected = true; this.id = id; - super.emit(EVENT_CONNECT); this.emitBuffered(); + super.emit(EVENT_CONNECT); } private void emitBuffered() { diff --git a/src/test/java/io/socket/client/SocketTest.java b/src/test/java/io/socket/client/SocketTest.java index 000fbaa..7cc76fd 100644 --- a/src/test/java/io/socket/client/SocketTest.java +++ b/src/test/java/io/socket/client/SocketTest.java @@ -257,4 +257,34 @@ public class SocketTest extends Connection { socket.disconnect(); } + + @Test(timeout = TIMEOUT) + public void shouldEmitEventsInOrder() throws InterruptedException { + final BlockingQueue values = new LinkedBlockingQueue<>(); + + socket = client(); + + socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { + @Override + public void call(Object... objects) { + socket.emit("ack", "second", new Ack() { + @Override + public void call(Object... args) { + values.offer((String) args[0]); + } + }); + } + }); + + socket.emit("ack", "first", new Ack() { + @Override + public void call(Object... args) { + values.offer((String) args[0]); + } + }); + + socket.connect(); + assertThat(values.take(), is("first")); + assertThat(values.take(), is("second")); + } }