MCPcopy
hub / github.com/cloudflare/capnweb / constructor

Method constructor

src/websocket.ts:46–89  ·  view source on GitHub ↗
(webSocket: WebSocket)

Source from the content-addressed store, hash-verified

44 */
45export class WebSocketTransport<T extends string | ArrayBuffer = string> {
46 constructor (webSocket: WebSocket) {
47 this.#webSocket = webSocket;
48
49 // Always set binaryType — harmless for string mode, required for ArrayBuffer mode.
50 webSocket.binaryType = "arraybuffer";
51
52 if (webSocket.readyState === WebSocket.CONNECTING) {
53 this.#sendQueue = [];
54 webSocket.addEventListener("open", event => {
55 try {
56 for (let message of this.#sendQueue!) {
57 webSocket.send(message);
58 }
59 } catch (err) {
60 this.#receivedError(err);
61 }
62 this.#sendQueue = undefined;
63 });
64 }
65
66 webSocket.addEventListener("message", (event: MessageEvent<any>) => {
67 if (this.#error) {
68 // Ignore further messages.
69 } else if (typeof event.data === "string" || event.data instanceof ArrayBuffer) {
70 if (this.#receiveResolver) {
71 this.#receiveResolver(event.data as T);
72 this.#receiveResolver = undefined;
73 this.#receiveRejecter = undefined;
74 } else {
75 this.#receiveQueue.push(event.data as T);
76 }
77 } else {
78 this.#receivedError(new TypeError("Received unexpected message type from WebSocket."));
79 }
80 });
81
82 webSocket.addEventListener("close", (event: CloseEvent) => {
83 this.#receivedError(new Error(`Peer closed WebSocket: ${event.code} ${event.reason}`));
84 });
85
86 webSocket.addEventListener("error", (event: Event) => {
87 this.#receivedError(new Error(`WebSocket connection failed.`));
88 });
89 }
90
91 #webSocket: WebSocket;
92 #sendQueue?: T[]; // only if not opened yet

Callers

nothing calls this directly

Calls 2

#receivedErrorMethod · 0.95
sendMethod · 0.65

Tested by

no test coverage detected