UNPKG

webserv

Version:

a quick, flexible, fully typed development server

81 lines 3.42 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "../log", "../upgrades/websocket.upgrade"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const log_1 = require("../log"); const websocket_upgrade_1 = require("../upgrades/websocket.upgrade"); class Connection { constructor(id, client) { this.id = id; this.client = client; } } exports.Connection = Connection; /** * This extends the functionality of websocket.upgrade to provide more robust connection tracking of * WebSocket connections. * * Connections are given a unique ID that can retrieve the user's WebSocket client via ConnectionMethods * or can be used to link internal data (such as user name or other user information) to the connection. */ exports.realtimeUpgrade = ({ onInit, onConnect, onDisconnect, onError, onMessage }) => { var _a; const connections = new Map(); const methods = { get(socketId) { return connections.get(socketId); }, getAll() { return connections.values(); }, getSize() { return connections.size; } }; (_a = onInit) === null || _a === void 0 ? void 0 : _a(methods); return websocket_upgrade_1.websocket({ onClose(socketId, code, reason) { var _a; log_1.log.debug(`[WS] {${socketId}} connection closed (${code}).${reason ? ` Reason: ${reason}` : ''}`); const con = connections.get(socketId); if (con) { connections.delete(socketId); (_a = onDisconnect) === null || _a === void 0 ? void 0 : _a(con, methods); } else { log_1.log.warn(`[WS] Unregistered user ${socketId} closed connection!`); } }, onConnection(client, socketId) { var _a; log_1.log.debug(`[WS] {${socketId}} connected`); const con = new Connection(socketId, client); connections.set(con.id, con); (_a = onConnect) === null || _a === void 0 ? void 0 : _a(con, methods); }, onError(socketId, err) { var _a; log_1.log.debug(`[WS] {${socketId}} errored. ${err && err.message}`); const con = connections.get(socketId); (_a = onError) === null || _a === void 0 ? void 0 : _a(err, con || socketId); }, onMessage(socketId, data) { log_1.log.debug(`[WS] {${socketId}} says: ${data}`); if (onMessage) { const con = connections.get(socketId); if (con) { onMessage(data, con, methods); } } } }); }; }); //# sourceMappingURL=realtime.upgrade.js.map