75 lines
1.8 KiB
JavaScript
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");
|
|
});
|
|
}); |