summary refs log tree commit diff
path: root/src/gateway/events/Message.ts
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-08-15 17:09:40 +0200
committerRory& <root@rory.gay>2026-08-15 17:15:40 +0200
commit9f5f2a2c3b71550f21f75500534bf1332b94f771 (patch)
tree4572ef19b7e25fee06da36a62105b197cb45fade /src/gateway/events/Message.ts
parentAllow avatar_description field in profile update (diff)
downloadserver-ts-github/dev/gwsep.tar.xz
Decouple gateway connection state from inner ws object github/dev/gwsep dev/gwsep
Diffstat (limited to 'src/gateway/events/Message.ts')
-rw-r--r--src/gateway/events/Message.ts46
1 files changed, 23 insertions, 23 deletions
diff --git a/src/gateway/events/Message.ts b/src/gateway/events/Message.ts

index 7a2e49d3..d143ee69 100644 --- a/src/gateway/events/Message.ts +++ b/src/gateway/events/Message.ts
@@ -28,7 +28,7 @@ import { PayloadSchema } from "@spacebar/schemas"; const bigIntJson = BigIntJson({ storeAsString: true }); -export async function Message(this: WebSocket, buffer: WS.Data) { +export async function Message(socket: WebSocket, buffer: WS.Data) { // TODO: compression let data: Payload; @@ -37,60 +37,60 @@ export async function Message(this: WebSocket, buffer: WS.Data) { typeof buffer === "string" ) { data = bigIntJson.parse(buffer.toString()); - } else if (this.encoding === "json" && Buffer.isBuffer(buffer)) { - if (this.compress === "zlib-stream") { + } else if (socket.encoding === "json" && Buffer.isBuffer(buffer)) { + if (socket.compress === "zlib-stream") { try { - buffer = this.inflate!.process(buffer); + buffer = socket.inflate!.process(buffer); } catch { buffer = buffer.toString(); } - } else if (this.compress === "zstd-stream") { + } else if (socket.compress === "zstd-stream") { try { - buffer = await this.zstdDecoder!.decode(buffer); + buffer = await socket.zstdDecoder!.decode(buffer); } catch { buffer = buffer.toString(); } } data = bigIntJson.parse(buffer as string); - } else if (this.encoding === "etf" && Buffer.isBuffer(buffer) && erlpack) { + } else if (socket.encoding === "etf" && Buffer.isBuffer(buffer) && erlpack) { try { - // cast is ~safe: unpack returns the parsed data in the shape it was provided, @yukikaze-bot/erlpack got around this by returning `any` instead of an actual type union. + // cast is ~safe: unpack returns the parsed data in the shape it was provided, @yukikaze-bot/erlpack got around socket by returning `any` instead of an actual type union. data = erlpack.unpack(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength)) as unknown as Payload; } catch { - console.error(`[Gateway/${this.user_id ?? this.ipAddress}] Failed to decode ETF payload`); - return this.close(CLOSECODES.Decode_error); + console.error(`[Gateway/${socket.user_id ?? socket.ipAddress}] Failed to decode ETF payload`); + return socket.rawSocket.close(CLOSECODES.Decode_error); } } else { - console.error(`[Gateway/${this.user_id ?? this.ipAddress}] Unknown payload format`); - return this.close(CLOSECODES.Decode_error); + console.error(`[Gateway/${socket.user_id ?? socket.ipAddress}] Unknown payload format`); + return socket.rawSocket.close(CLOSECODES.Decode_error); } - if (process.env.WS_VERBOSE) console.log(`[Websocket] Incomming message: ${JSON.stringify(data)}`); + if (process.env.WS_VERBOSE) console.log(`[Websocket] Incoming message: ${JSON.stringify(data)}`); if (process.env.WS_DUMP) { - const id = this.session_id || "unknown"; + const id = socket.session_id || "unknown"; await fs.mkdir(path.join("dump", id), { recursive: true }); await fs.writeFile(path.join("dump", id, `${Date.now()}.in.json`), JSON.stringify(data, null, 2)); - if (!this.session_id) console.log(`[Gateway/${this.user_id ?? this.ipAddress}] Unknown session id, dumping to unknown folder`); + if (!socket.session_id) console.log(`[Gateway/${socket.user_id ?? socket.ipAddress}] Unknown session id, dumping to unknown folder`); } - check.call(this, PayloadSchema, data); + check.call(socket, PayloadSchema, data); const OPCodeHandler = OPCodeHandlers[data.op]; if (!OPCodeHandler) { - console.error(`[Gateway/${this.user_id ?? this.ipAddress}] Unknown opcode`, data.op); - // TODO: if all opcodes are implemented comment this out: - // this.close(CLOSECODES.Unknown_opcode); + console.error(`[Gateway/${socket.user_id ?? socket.ipAddress}] Unknown opcode`, data.op); + // TODO: if all opcodes are implemented comment socket out: + // socket.close(CLOSECODES.Unknown_opcode); return; } try { - return await OPCodeHandler.call(this, data); + return await OPCodeHandler.call(socket, data); } catch (error) { - console.error(`[Gateway/${this.user_id ?? this.ipAddress}] Error: Op ${data.op}`, error); - // if (!this.CLOSED && this.CLOSING) - return this.close(CLOSECODES.Unknown_error); + console.error(`[Gateway/${socket.user_id ?? socket.ipAddress}] Error: Op ${data.op}`, error); + // if (!socket.CLOSED && socket.CLOSING) + return socket.rawSocket.close(CLOSECODES.Unknown_error); } }