@aptpod/iscp-ts
Version:
iSCP 2.0 client library for TypeScript
91 lines • 5.24 kB
JavaScript
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;
import { WebSocketServer as WS } from 'ws';
import { Resolver } from '../../../utils/resolver';
export 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(), "f");
__classPrivateFieldSet(this, _WebSocketServer_closedResolver, new Resolver(), "f");
__classPrivateFieldSet(this, _WebSocketServer_messageQueue, new Queue(), "f");
__classPrivateFieldSet(this, _WebSocketServer_connection, null, "f");
__classPrivateFieldSet(this, _WebSocketServer_server, new WS({
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();
(async () => resolver.resolve(await __classPrivateFieldGet(this, _WebSocketServer_connectedResolver, "f").wait()))();
return resolver.wait();
}
async waitForClosed() {
const resolver = new 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();
}
}
_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(), "f");
}
put(item) {
__classPrivateFieldGet(this, _Queue_pendingitems, "f").push(item);
__classPrivateFieldGet(this, _Queue_nextItemResolver, "f").resolve();
__classPrivateFieldSet(this, _Queue_nextItemResolver, new Resolver(), "f");
}
get() {
const item = __classPrivateFieldGet(this, _Queue_pendingitems, "f").shift();
if (item) {
return Promise.resolve(item);
}
const resolver = new 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