Skip to content

Commit 34f822f

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. ```js socket.on("connect", () => { socket.emit("bar"); }); socket.emit("foo"); // buffered while disconnected ``` In the example above, the "bar" event was sent first, which is not correct. Related: #1458
1 parent dd2a8fc commit 34f822f

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

lib/socket.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,8 @@ export class Socket<
384384
this.id = id;
385385
this.connected = true;
386386
this.disconnected = false;
387-
this.emitReserved("connect");
388387
this.emitBuffered();
388+
this.emitReserved("connect");
389389
}
390390

391391
/**

test/socket.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,26 @@ describe("socket", function () {
217217
);
218218
});
219219

220+
it("should emit events in order", (done) => {
221+
const socket = io("/", { autoConnect: false });
222+
let i = 0;
223+
224+
socket.on("connect", () => {
225+
socket.emit("echo", "second", () => {
226+
expect(++i).to.eql(2);
227+
228+
socket.disconnect();
229+
done();
230+
});
231+
});
232+
233+
socket.emit("echo", "first", () => {
234+
expect(++i).to.eql(1);
235+
});
236+
237+
socket.connect();
238+
});
239+
220240
describe("volatile packets", () => {
221241
it("should discard a volatile packet when the socket is not connected", (done) => {
222242
const socket = io({ forceNew: true, autoConnect: false });

test/support/server.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ server.on("connection", (socket) => {
4242
socket.emit("hi");
4343
});
4444

45+
socket.on("echo", (arg, cb) => {
46+
cb(arg);
47+
});
48+
4549
// ack tests
4650
socket.on("ack", () => {
4751
socket.emit("ack", (a, b) => {

0 commit comments

Comments
 (0)