diff options
| author | stonedDiscord <Tukz@gmx.de> | 2022-03-11 18:59:18 +0100 |
|---|---|---|
| committer | stonedDiscord <Tukz@gmx.de> | 2022-03-11 18:59:18 +0100 |
| commit | e72485180228cc6ab90c55abd064af6f3d2240b5 (patch) | |
| tree | 38d42c3651a870616ab30d5fc99f651d2b846525 /webAO/master.js | |
| parent | 52b79f4b5ffce7679fa5fcceeb80d615ad0cdf16 (diff) | |
cache the masterlist and use it when the connection fails
Diffstat (limited to 'webAO/master.js')
| -rw-r--r-- | webAO/master.js | 44 |
1 files 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 + += `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(servers[i].name)}</p>` + + `<a class="button" href="client.html?mode=watch&ip=${ipport}${asset}">Watch</a>` + + `<a class="button" href="client.html?mode=join&ip=${ipport}${asset}">Join</a></li>`; + } +} + /** * 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 - += `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(servers[i].name)}</p>` - + `<a class="button" href="client.html?mode=watch&ip=${ipport}${asset}">Watch</a>` - + `<a class="button" href="client.html?mode=join&ip=${ipport}${asset}">Join</a></li>`; - } + setCookie('masterlist', msg); + parseMasterlist(msg); masterserver.close(); } else if (header === 'servercheok') { const args = msg.split('#').slice(1); |
