const express = require("express"); const WebSocket = require("ws"); const app = express(); app.use(express.static("public")); const PORT = 3000; // ---------------------------- // HTTP SERVER (OBS overlay page) // ---------------------------- const server = app.listen(PORT, () => { console.log(`OBS overlay running on http://localhost:${PORT}`); }); // ---------------------------- // OBS / BROWSER CLIENTS // ---------------------------- const wss = new WebSocket.Server({ server }); // ---------------------------- // BROADCAST FUNCTION // ---------------------------- function broadcast(data) { wss.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(data); } }); } // ---------------------------- // CONNECT TO PYTHON INPUT SERVER // ---------------------------- function connectToPython() { console.log("Connecting to Python input server..."); const inputSocket = new WebSocket("ws://127.0.0.1:8765"); inputSocket.on("open", () => { console.log("CONNECTED TO PYTHON"); }); inputSocket.on("message", (msg) => { const data = msg.toString(); // DEBUG console.log("FROM PYTHON:", data); // forward to OBS overlay broadcast(data); }); inputSocket.on("error", (err) => { console.log("PYTHON WS ERROR:", err.message); }); inputSocket.on("close", () => { console.log("PYTHON DISCONNECTED. Reconnecting in 2s..."); setTimeout(connectToPython, 2000); }); } connectToPython(); // ---------------------------- // OBS CLIENT CONNECTION LOGGING // ---------------------------- wss.on("connection", (ws) => { console.log("OBS browser connected"); ws.on("close", () => { console.log("OBS browser disconnected"); }); });