From e72485180228cc6ab90c55abd064af6f3d2240b5 Mon Sep 17 00:00:00 2001 From: stonedDiscord Date: Fri, 11 Mar 2022 18:59:18 +0100 Subject: cache the masterlist and use it when the connection fails --- webAO/master.js | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/webAO/master.js b/webAO/master.js index df79d85..48f1dc0 100644 --- a/webAO/master.js +++ b/webAO/master.js @@ -1,6 +1,8 @@ import FingerprintJS from '@fingerprintjs/fingerprintjs'; import { unescapeChat, safeTags } from './encoding.js'; +import getCookie from './utils/getCookie.js'; +import setCookie from './utils/setCookie.js'; const version = process.env.npm_package_version; @@ -64,6 +66,27 @@ function onOpen(_e) { masterserver.send('VC#%'); } +function parseMasterlist(msg) { + const allservers = msg.split('#').slice(1); + for (let i = 0; i < allservers.length - 1; i++) { + const serverEntry = allservers[i]; + const args = serverEntry.split('&'); + + const thisserver = { + name: args[0], description: args[1], ip: args[2], port: Number(args[3]), assets: args[4], online: 'Online: ?/?', + }; + servers[i] = thisserver; + + const ipport = `${args[2]}:${args[3]}`; + const asset = args[4] ? `&asset=${args[4]}` : ''; + + document.getElementById('masterlist').innerHTML + += `
  • ${safeTags(servers[i].name)}

    ` + + `Watch` + + `Join
  • `; + } +} + /** * Triggered when an network error occurs. * @param {ErrorEvent} e @@ -71,6 +94,7 @@ function onOpen(_e) { function onError(evt) { document.getElementById('ms_error').style.display = 'block'; document.getElementById('ms_error_code').innerText = `A network error occurred: ${evt.reason} (${evt.code})`; + parseMasterlist(getCookie('masterlist')); } function checkOnline(serverID, coIP) { @@ -129,24 +153,8 @@ function onMessage(e) { console.debug(msg); if (header === 'ALL') { - const allservers = msg.split('#').slice(1); - for (let i = 0; i < allservers.length - 1; i++) { - const serverEntry = allservers[i]; - const args = serverEntry.split('&'); - - const thisserver = { - name: args[0], description: args[1], ip: args[2], port: Number(args[3]), assets: args[4], online: 'Online: ?/?', - }; - servers[i] = thisserver; - - const ipport = `${args[2]}:${args[3]}`; - const asset = args[4] ? `&asset=${args[4]}` : ''; - - document.getElementById('masterlist').innerHTML - += `
  • ${safeTags(servers[i].name)}

    ` - + `Watch` - + `Join
  • `; - } + setCookie('masterlist', msg); + parseMasterlist(msg); masterserver.close(); } else if (header === 'servercheok') { const args = msg.split('#').slice(1); -- cgit