diff --git a/poll.html b/poll.html index b453afd0..0aa302ad 100644 --- a/poll.html +++ b/poll.html @@ -614,8 +614,10 @@

Loading poll...

closePoll(); } else if (data.cmd === "resetpoll") { resetPoll(); + } else if (data.cmd === "startpoll") { + startPoll(); } - } + } } function closePoll() { @@ -624,6 +626,17 @@

Loading poll...

pollTitle.innerText = settings.pollQuestion + " (Closed)"; updatePollResults(); } + + function startPoll() { + console.log("start poll"); + settings.pollEnabled = true; + settings.pollClosed = false; + alreadyVoted = {}; + totalVotes = 0; + results = {}; + initializePoll(); + updatePollVisibility(); + } function resetPoll() { settings.pollClosed = false; @@ -632,6 +645,25 @@

Loading poll...

alreadyVoted = {}; initializePoll(); } + + function processInput(data){ + if (!data){return false;} + if ("action" in data){ + if (data.action === "closepoll") { + closePoll(); + } else if (data.action === "resetpoll") { + resetPoll(); + } else if (data.action === "startpoll") { + startPoll(); + } + return true; + } else if (data.chatmessage) { + processVote(data.chatmessage, data.chatname, data.type); + return true; + } else { + return false; + } + } // Initialize iframe for communication const iframe = document.createElement("iframe"); @@ -645,6 +677,135 @@

Loading poll...

processData(event.data.dataReceived.overlayNinja); } }); + + + + var conCon = 1; + var socketserver = false; + var serverURL = "wss://io.socialstream.ninja/api"; + var reconnectionTimeout = null; + function setupSocket() { + // Clear any existing reconnection timeout + if (reconnectionTimeout) { + clearTimeout(reconnectionTimeout); + reconnectionTimeout = null; + } + + if (socketserver) { + socketserver.onclose = null; + socketserver.close(); + socketserver = null; + } + socketserver = new WebSocket(serverURL); + + socketserver.onclose = function () { + reconnectionTimeout = setTimeout(function () { + conCon += 1; + setupSocket(); + }, 100 * conCon); + }; + socketserver.onopen = function () { + conCon = 1; + socketserver.send(JSON.stringify({ join: roomID.split(",")[0], out: 2, in: 1 })); + console.log("output channel: 2, input channel: 1"); + }; + + socketserver.onerror = function (error) { + console.error("WebSocket error:", error); + socketserver.close(); + }; + + socketserver.addEventListener("message", function (event) { + var resp = false; + if (event.data) { + try { + var data = JSON.parse(event.data); + } catch (e) { + return; + } + resp = processInput(data); + console.log(resp); + if (resp !== null) { + if (data.get) { + var ret = {}; + ret.callback = {}; + ret.callback.get = data.get; + ret.callback.result = resp; + socketserver.send(JSON.stringify(ret)); + } + } + } + }); + } + + if (urlParams.has("server")) { + serverURL = urlParams.get("server") || serverURL; + setupSocket(); + } + + var conConExtension = 1; + var socketserverExtension = false; + var serverURLExtension = "wss://io.socialstream.ninja/extension"; + var server2 = false; + var server3 = false; + var reconnectionTimeoutExtension = null; + + function setupSocketExtension() { + if (reconnectionTimeoutExtension) { + clearTimeout(reconnectionTimeoutExtension); + reconnectionTimeoutExtension = null; + } + + if (socketserverExtension) { + socketserverExtension.onclose = null; + socketserverExtension.close(); + socketserverExtension = null; + } + + socketserverExtension = new WebSocket(serverURLExtension); + + socketserverExtension.onclose = function () { + reconnectionTimeoutExtension = setTimeout(function () { + conConExtension += 1; + setupSocketExtension(); + }, 100 * conConExtension); + }; + socketserverExtension.onopen = function () { + conConExtension = 1; + socketserverExtension.send(JSON.stringify({ join: roomID.split(",")[0], out: 3, in: 4 })); + console.log("output channel: 3, input channel: 4"); + }; + + socketserverExtension.onerror = function (error) { + console.error("WebSocket error:", error); + socketserverExtension.close(); + }; + + socketserverExtension.addEventListener("message", function (event) { + var resp = false; + if (event.data && server2) { + try { + var data = JSON.parse(event.data); + processInput(data); + } catch (e) { + console.error(e); + } + } + }); + } + + if (urlParams.has("server2")) { + server2 = true; + if (urlParams.has("server3")) { + server3 = true; + } + serverURLExtension = urlParams.get("server2") || serverURLExtension; + setupSocketExtension(); + } else if (urlParams.has("server3")) { + server3 = true; + serverURLExtension = urlParams.get("server3") || serverURLExtension; + setupSocketExtension(); + } initializePoll();