UNPKG

@sodacore/ws

Version:

Sodacore ws is a core plugin that extends the Http plugin offering WebSocket support to the Sodacore framework.

49 lines (48 loc) 1.93 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { HttpContext } from '@sodacore/http'; import { Inject } from '@sodacore/di'; import { Logger } from '@sodacore/core'; export default class WsContext extends HttpContext { constructor(socket) { const request = socket.data.httpContext.getRequest(); const server = socket.data.httpContext.getServer(); super(request, server); this.socket = socket; this.data = {}; } setData(data) { this.data = data; } getId() { return String(this.getHeader('sec-websocket-key')); } getRemoteAddress() { return this.socket.remoteAddress; } send(command, context = {}) { this.socket.send(JSON.stringify({ command, context })); } sendRaw(data) { this.socket.send(data); } getData() { return this.data; } close(reason, code) { this.socket.close(code); if (reason) this.logger.warn(`[CONTEXT/WS]: Closed connection: "${this.getId()}" with reason: "${reason}"${code ? ` and code: "${code}".` : '.'}`); } } __decorate([ Inject(), __metadata("design:type", Logger) ], WsContext.prototype, "logger", void 0);