diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-11-01 16:06:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-01 16:06:06 +0100 |
commit | f5cb26a82fc74749c03c7c91a80de8df05d7a2e1 (patch) | |
tree | b404f50535c0e066f0e49a3b449dd50c746d82d1 /ext/websocket/01_websocket.js | |
parent | 89c5aa85984eabd300818f8275e3970f12a89754 (diff) |
revert 9ea0ce61981aa09851c3d1e0a2b7dbd7f7a392f5 (#16501)
Closes https://github.com/denoland/deno/issues/16450
Diffstat (limited to 'ext/websocket/01_websocket.js')
-rw-r--r-- | ext/websocket/01_websocket.js | 42 |
1 files changed, 14 insertions, 28 deletions
diff --git a/ext/websocket/01_websocket.js b/ext/websocket/01_websocket.js index 5b364f809..2284a0e77 100644 --- a/ext/websocket/01_websocket.js +++ b/ext/websocket/01_websocket.js @@ -20,7 +20,6 @@ ArrayPrototypeJoin, ArrayPrototypeMap, ArrayPrototypeSome, - Uint32Array, ErrorPrototypeToString, ObjectDefineProperties, ObjectPrototypeIsPrototypeOf, @@ -85,10 +84,6 @@ const _idleTimeoutDuration = Symbol("[[idleTimeout]]"); const _idleTimeoutTimeout = Symbol("[[idleTimeoutTimeout]]"); const _serverHandleIdleTimeout = Symbol("[[serverHandleIdleTimeout]]"); - - /* [event type, close code] */ - const eventBuf = new Uint32Array(2); - class WebSocket extends EventTarget { [_rid]; @@ -417,15 +412,13 @@ async [_eventLoop]() { while (this[_readyState] !== CLOSED) { - const value = await core.opAsync( + const { kind, value } = await core.opAsync( "op_ws_next_event", this[_rid], - eventBuf, ); - const kind = eventBuf[0]; + switch (kind) { - /* string */ - case 0: { + case "string": { this[_serverHandleIdleTimeout](); const event = new MessageEvent("message", { data: value, @@ -434,15 +427,14 @@ this.dispatchEvent(event); break; } - /* binary */ - case 1: { + case "binary": { this[_serverHandleIdleTimeout](); let data; if (this.binaryType === "blob") { data = new Blob([value]); } else { - data = value; + data = value.buffer; } const event = new MessageEvent("message", { @@ -452,23 +444,18 @@ this.dispatchEvent(event); break; } - /* ping */ - case 3: { + case "ping": { core.opAsync("op_ws_send", this[_rid], { kind: "pong", }); break; } - /* pong */ - case 4: { + case "pong": { this[_serverHandleIdleTimeout](); break; } - /* closed */ - case 6: // falls through - /* close */ - case 2: { - const code = eventBuf[1]; + case "closed": + case "close": { const prevState = this[_readyState]; this[_readyState] = CLOSED; clearTimeout(this[_idleTimeoutTimeout]); @@ -478,8 +465,8 @@ await core.opAsync( "op_ws_close", this[_rid], - code, - value, + value.code, + value.reason, ); } catch { // ignore failures @@ -488,15 +475,14 @@ const event = new CloseEvent("close", { wasClean: true, - code, - reason: value, + code: value.code, + reason: value.reason, }); this.dispatchEvent(event); core.tryClose(this[_rid]); break; } - /* error */ - case 5: { + case "error": { this[_readyState] = CLOSED; const errorEv = new ErrorEvent("error", { |