Skip to content

Commit

Permalink
Fix buffering before open on FakeWebsocket (#212)
Browse files Browse the repository at this point in the history
MarcusLongmuir authored Jan 27, 2025
1 parent a8a68a0 commit 66f808a
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions packages/networked-dom-web-runner/src/FakeWebsocket.ts
Original file line number Diff line number Diff line change
@@ -5,6 +5,8 @@
class WebsocketEnd extends EventTarget {
private readonly sendCallback: (data: string | ArrayBufferLike | Blob | ArrayBufferView) => void;
public readonly protocol: string;
private hasMessageListener = false;
private bufferedEvents: Array<MessageEvent> = [];

constructor(
protocol: string,
@@ -30,7 +32,28 @@ class WebsocketEnd extends EventTarget {
}, 1);
return;
}

super.addEventListener(type, listener, options);

if (type === "message") {
this.hasMessageListener = true;
const bufferedEvents = this.bufferedEvents;
this.bufferedEvents = [];
bufferedEvents.forEach((event) => {
this.dispatchEvent(event);
});
}
}

public dispatchEvent(event: Event): boolean {
if (event.type === "message") {
if (!this.hasMessageListener) {
// The message listener is not setup yet - buffer the event
this.bufferedEvents.push(event as MessageEvent);
return true;
}
}
return super.dispatchEvent(event);
}

public send(data: string | ArrayBufferLike | Blob | ArrayBufferView) {

0 comments on commit 66f808a

Please sign in to comment.