UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

95 lines 5.46 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _WebSocketServer_connectedResolver, _WebSocketServer_closedResolver, _WebSocketServer_messageQueue, _WebSocketServer_connection, _WebSocketServer_server, _Queue_pendingitems, _Queue_nextItemResolver; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebSocketServer = void 0; const ws_1 = require("ws"); const resolver_1 = require("../../../utils/resolver"); class WebSocketServer { constructor(config) { _WebSocketServer_connectedResolver.set(this, void 0); _WebSocketServer_closedResolver.set(this, void 0); _WebSocketServer_messageQueue.set(this, void 0); _WebSocketServer_connection.set(this, null); _WebSocketServer_server.set(this, void 0); __classPrivateFieldSet(this, _WebSocketServer_connectedResolver, new resolver_1.Resolver(), "f"); __classPrivateFieldSet(this, _WebSocketServer_closedResolver, new resolver_1.Resolver(), "f"); __classPrivateFieldSet(this, _WebSocketServer_messageQueue, new Queue(), "f"); __classPrivateFieldSet(this, _WebSocketServer_connection, null, "f"); __classPrivateFieldSet(this, _WebSocketServer_server, new ws_1.WebSocketServer({ port: config.port, }), "f"); __classPrivateFieldGet(this, _WebSocketServer_server, "f").on('connection', (connection, request) => { __classPrivateFieldSet(this, _WebSocketServer_connection, connection, "f"); __classPrivateFieldGet(this, _WebSocketServer_connectedResolver, "f").resolve({ connection, request }); connection .on('message', (data) => { __classPrivateFieldGet(this, _WebSocketServer_messageQueue, "f").put(Array.isArray(data) ? data.map((d) => new Uint8Array(d)) : new Uint8Array(data)); }) .on('close', () => { __classPrivateFieldGet(this, _WebSocketServer_closedResolver, "f").resolve(); }); }); __classPrivateFieldGet(this, _WebSocketServer_server, "f").on('close', () => { __classPrivateFieldGet(this, _WebSocketServer_closedResolver, "f").resolve(); }); } async waitForConnected() { const resolver = new resolver_1.Resolver(); (async () => resolver.resolve(await __classPrivateFieldGet(this, _WebSocketServer_connectedResolver, "f").wait()))(); return resolver.wait(); } async waitForClosed() { const resolver = new resolver_1.Resolver(); (async () => resolver.resolve(await __classPrivateFieldGet(this, _WebSocketServer_closedResolver, "f").wait()))(); return resolver.wait(); } async nextMessage() { return __classPrivateFieldGet(this, _WebSocketServer_messageQueue, "f").get(); } close() { __classPrivateFieldGet(this, _WebSocketServer_connection, "f")?.close(); __classPrivateFieldGet(this, _WebSocketServer_server, "f").close(); } } exports.WebSocketServer = WebSocketServer; _WebSocketServer_connectedResolver = new WeakMap(), _WebSocketServer_closedResolver = new WeakMap(), _WebSocketServer_messageQueue = new WeakMap(), _WebSocketServer_connection = new WeakMap(), _WebSocketServer_server = new WeakMap(); // // Sub Classes // class Queue { constructor() { _Queue_pendingitems.set(this, []); _Queue_nextItemResolver.set(this, void 0); __classPrivateFieldSet(this, _Queue_pendingitems, [], "f"); __classPrivateFieldSet(this, _Queue_nextItemResolver, new resolver_1.Resolver(), "f"); } put(item) { __classPrivateFieldGet(this, _Queue_pendingitems, "f").push(item); __classPrivateFieldGet(this, _Queue_nextItemResolver, "f").resolve(); __classPrivateFieldSet(this, _Queue_nextItemResolver, new resolver_1.Resolver(), "f"); } get() { const item = __classPrivateFieldGet(this, _Queue_pendingitems, "f").shift(); if (item) { return Promise.resolve(item); } const resolver = new resolver_1.Resolver(); __classPrivateFieldGet(this, _Queue_nextItemResolver, "f").wait().then(() => { resolver.resolve(__classPrivateFieldGet(this, _Queue_pendingitems, "f").shift()); }); return resolver.wait(); } } _Queue_pendingitems = new WeakMap(), _Queue_nextItemResolver = new WeakMap(); //# sourceMappingURL=websocket-server.js.map