summaryrefslogtreecommitdiff
path: root/ext/websocket/01_websocket.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/websocket/01_websocket.js')
-rw-r--r--ext/websocket/01_websocket.js42
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", {