Files
obs-keyboard-overlay/server.js
T
2026-06-19 15:51:23 +02:00

75 lines
1.8 KiB
JavaScript

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");
});
});