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")); + } }