UNPKG

haxball-server

Version:

A feature-rich and stable headless server utility for Haxball

136 lines (129 loc) 4.57 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConnectInterface = void 0; const express_1 = __importDefault(require("express")); const http_1 = __importDefault(require("http")); const WebSocket = __importStar(require("ws")); const Global = __importStar(require("../Global")); const html = ` <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <p>Room list</p> <script> const socket = new WebSocket('ws://localhost:${Global.wsPort}'); socket.addEventListener('message', (event) => { console.log(event.data); const e = JSON.parse(event.data); const data = e.message; if (e.type === "add") { const p = document.createElement('p'); p.className = data.port; p.innerHTML = \`<a href="\${data.source}\${data.url}" title="\${data.title}"><div>\${data.title}</div></a>\`; document.body.appendChild(p); } if (e.type === "remove") { document.getElementsByClassName(data.port)[0].remove(); } }); </script> </body> </html> `; class ConnectInterface { listen(expressPort, wsPort, debuggingClient) { this.openWSServer(wsPort, debuggingClient); const url = this.openExpressServer(expressPort); return url; } openExpressServer(port) { const app = (0, express_1.default)(); const url = `http://localhost:${port}`; app.get('/', (req, res) => { res.send(html); }); app.listen(port, "localhost", () => { console.log(`Listening web server at ${url}`); }); return url; } openWSServer(port, client) { const wss = new WebSocket.Server({ port }); wss.on('connection', (ws) => { client.on("add", async (server, client) => { setTimeout(() => this.addRoomToList(client, ws), 2000); }); client.on("remove", async (server, client) => { this.removeRoomFromList(client, ws); }); for (const room of client.rooms) { this.addRoomToList(room, ws); } }); } addRoomToList(room, ws, iteration = 0) { const url = `http://localhost:${room}`; if (iteration >= 3) return; http_1.default.get(`${url}/json`, (res) => { let body = ""; res.on("data", (chunk) => body += chunk); res.on("end", () => { const data = JSON.parse(body)[0]; ws.send(JSON.stringify({ type: "add", message: { port: room, source: url, url: data.devtoolsFrontendUrl, title: data.title } })); }); }).on("error", (error) => { console.error(error); setTimeout(() => this.addRoomToList(room, ws, iteration + 1), 2000); }); } removeRoomFromList(room, ws) { try { ws.send(JSON.stringify({ type: "remove", message: { port: room } })); } catch (err) { console.error(err); } } } exports.ConnectInterface = ConnectInterface; //# sourceMappingURL=DebuggingInterface.js.map