From cc20ddfd2a3e77be9b47811a16dbcc853b55ee32 Mon Sep 17 00:00:00 2001 From: Holly Date: Fri, 26 Apr 2024 10:21:27 +0100 Subject: [PATCH] it is done. --- client/Terminal-00-Multiuser.user.js | 49 ++++++++++++++++++++++++---- server/config.example.json | 1 + server/index.ts | 30 +++++++++++++++-- server/objects/Config.ts | 1 + 4 files changed, 72 insertions(+), 9 deletions(-) diff --git a/client/Terminal-00-Multiuser.user.js b/client/Terminal-00-Multiuser.user.js index 6cee498..403f3c1 100644 --- a/client/Terminal-00-Multiuser.user.js +++ b/client/Terminal-00-Multiuser.user.js @@ -35,7 +35,9 @@ if (!window.TE_ACTIVE) { (function() { 'use strict'; - const USERSCRIPT_VERSION = "20240426.1"; + // Make sure to change the userscript version too!!!!!!!!!! + const USERSCRIPT_VERSION_RAW = "20240425.1"; + const USERSCRIPT_VERSION = parseInt(USERSCRIPT_VERSION_RAW.replace(".", "")); if (!continueRunningScript) { return; @@ -256,14 +258,16 @@ kbd { } }, 1000); - /*fetch(`https://git.eusv.net/tgpholly/t00-multiuser/raw/branch/master/client/Terminal-00-Multiuser.user.js?${Date.now()}`).then(res => { - res.text(text => { - if (text.includes("@version")) { - const version = file.split("@version")[1].split("\n")[0].trim().split(".").join(""); - if () + fetch(`http://localhost:39194/api/version`, { method: "post" }).then(response => { + console.log("hi"); + response.text().then(versionNumberRaw => { + const versionNumber = parseInt(versionNumberRaw); + if (versionNumber > USERSCRIPT_VERSION) { + // We're out of date >:( + createUpdateDialog(`${versionNumberRaw.slice(0, versionNumberRaw.length - 1)}.${versionNumberRaw.slice(-1)}`); } }); - });*/ + }); const keepAlivePacket = createWriter(Endian.LE, 1).writeByte(MessageType.KeepAlive).toBuffer(); @@ -602,6 +606,37 @@ kbd { document.body.appendChild(bg); } + function createUpdateDialog(versionNumber) { + const bg = document.createElement("div"); + windowContainer = bg; + bg.style = "z-index:1000000000;position:fixed;top:0px;left:0px;width:100%;height:100%;background-color:rgba(0,0,0,0.5)"; + const dialog = document.createElement("div"); + dialog.style = "position:absolute;top:50%;left:50%;min-width:15rem;background-color:#343434;padding:1rem;transform:translate(-50%,-50%);text-align:center;color:white"; + bg.appendChild(dialog); + const title = document.createElement("h4"); + title.innerText = "An update is available!"; + title.style.marginBottom = "0px"; + dialog.appendChild(title); + + const updateText = document.createElement("p"); + updateText.innerHTML = `Please click here to update to the latest version.
This takes less than a few seconds to do and ensures you can continue to use MultiProbe.

Current Version: ${USERSCRIPT_VERSION_RAW}
New Version: ${versionNumber}`; + dialog.appendChild(updateText); + + const buttons = document.createElement("div"); + buttons.style.marginTop = "1rem"; + + const gotIt = document.createElement("button"); + gotIt.onclick = () => { + bg.remove(); + } + gotIt.innerText = "Later"; + buttons.appendChild(gotIt); + + dialog.appendChild(buttons); + + document.body.appendChild(bg); + } + function createFirstTimeDialog() { if (localStorage["mpshowfirsttime"] && localStorage["mpshowfirsttime"] === "false") { return; diff --git a/server/config.example.json b/server/config.example.json index 51124d0..76642c6 100644 --- a/server/config.example.json +++ b/server/config.example.json @@ -8,6 +8,7 @@ "length": 64, "secret": "changeme" }, + "githost": "localhost:3000", "database": { "address": "localhost", "port": 3306, diff --git a/server/index.ts b/server/index.ts index a31117b..721aaaa 100644 --- a/server/index.ts +++ b/server/index.ts @@ -274,6 +274,8 @@ fastify.post("/party/join", async (req, res) => { // API fastify.post("/api/login", async (req, res) => { + res.header("access-control-allow-origin", "*"); + const data = req.body as UsernameData; if (typeof(data.username) !== "string" || typeof(data.password) !== "string" || data.username.length > 32 || data.password.length < 8) { return res.status(401).send("Username or Password incorrect"); @@ -291,6 +293,30 @@ fastify.post("/api/login", async (req, res) => { return res.status(401).send("Username or Password incorrect"); }); +let cachedVersion = ""; +let cacheExpiry = 0; +fastify.post("/api/version", async (req, res) => { + res.header("access-control-allow-origin", "*"); + + if (Date.now() < cacheExpiry) { + res.send(cachedVersion); + } else { + const response = await fetch(`http://${Config.githost}/tgpholly/t00-multiuser/raw/branch/master/client/Terminal-00-Multiuser.user.js?${Date.now()}`); + if (response.status === 200) { + const content = await response.text(); + if (content.includes("@version")) { + cachedVersion = content.split("@version")[1].split("\n")[0].trim().split(".").join(""); + cacheExpiry = Date.now() + 30000; + return res.send(cachedVersion); + } else { + return res.send("0"); + } + } else { + return res.send("0"); + } + } +}); + // Websocket stuff const websocketServer = new WebSocketServer({ @@ -446,9 +472,9 @@ websocketServer.on("connection", (socket) => { return; } - if ((performance.now() - user.lastPingReset) >= 1000) { + if ((Date.now() - user.lastPingReset) >= 1000) { user.allowedPings = 10; - user.lastPingReset = performance.now(); + user.lastPingReset = Date.now(); } if (user.allowedPings > 0) { diff --git a/server/objects/Config.ts b/server/objects/Config.ts index ebd5820..24d115f 100644 --- a/server/objects/Config.ts +++ b/server/objects/Config.ts @@ -7,6 +7,7 @@ export default class Config { public static ports:ConfigPorts = config.ports; public static session:ConfigSession = config.session; + public static githost:string = config.githost; public static database:ConfigDatabase = config.database; }