UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.

80 lines (79 loc) 2.24 kB
import { AppConstants } from "../server.constants.js"; import { WebSocket } from "ws"; //#region src/shared/websocket.adapter.ts var WebsocketAdapter = class WebsocketAdapter { socket; logger; eventEmittingAllowed = true; constructor(loggerFactory) { this.logger = loggerFactory(WebsocketAdapter.name); } get isOpened() { return this.socket?.readyState === WebSocket.OPEN; } close() { this.socket?.close(); delete this.socket; } allowEmittingEvents() { this.eventEmittingAllowed = true; } disallowEmittingEvents() { this.eventEmittingAllowed = false; } /** * @protected * Open a WebSocket connection. * * @param {string|URL} url The URL to connect to. * @returns {void} */ open(url) { if (!url) throw new Error("Cant setup up websocket, URL may not be empty."); this.socket = new WebSocket(url, { handshakeTimeout: AppConstants.defaultWebsocketHandshakeTimeout }); this.socket.onopen = (event) => this.onOpen(event); this.socket.onerror = (error) => this.onError(error); this.socket.onclose = (event) => this.onClose(event); this.socket.onmessage = (message) => this.onMessage(message.data); } /** * @protected * Send a message through the WebSocket connection. * * @param {string} payload - The message payload to send. * @returns {Promise<void>} A promise that resolves when the message is sent successfully. */ async sendMessage(payload) { if (!this.isOpened || !this.socket) { this.logger.error("Websocket is not opened, cant send a message"); return; } return await new Promise((resolve, reject) => { this.socket.send(payload, (error) => { if (error) reject(error); resolve(); }); }); } /** * Handle open event. * @private * @param {Event} event - The event object. * @returns {Promise<void>} A promise that resolves when the open handling is complete. */ async onOpen(event) { await this.afterOpened(event); } /** * Handle close event. * @private * @param {CloseEvent} event - The event object. * @returns {Promise<void>} A promise that resolves when the close handling is complete. */ async onClose(event) { await this.afterClosed(event); } }; //#endregion export { WebsocketAdapter }; //# sourceMappingURL=websocket.adapter.js.map