diff options
| author | stonedDiscord <stonedDiscord@users.noreply.github.com> | 2024-11-20 13:31:50 +0000 |
|---|---|---|
| committer | GitHub Action <actions@github.com> | 2024-11-20 13:31:50 +0000 |
| commit | 6684f3fce6e90fd0574d7bab63b629554ab03ef6 (patch) | |
| tree | b2a62247d17e23a77af57aea355ba621666817c2 /webAO/master.ts | |
| parent | 95a2d1361d84c61b454ebe506e6963b93f6d8dee (diff) | |
Prettified Code!
Diffstat (limited to 'webAO/master.ts')
| -rw-r--r-- | webAO/master.ts | 310 |
1 files changed, 157 insertions, 153 deletions
diff --git a/webAO/master.ts b/webAO/master.ts index 112e035..23b5c04 100644 --- a/webAO/master.ts +++ b/webAO/master.ts @@ -1,219 +1,223 @@ -import { safeTags } from './encoding'; +import { safeTags } from "./encoding"; declare global { - interface Window { - setServ: (ID: number) => void; - } + interface Window { + setServ: (ID: number) => void; + } } interface AOServer { - name: string, - description: string, - ip: string, - players: number, - online: string, - port?: number, - ws_port?: number, - wss_port?: number, - assets?: string, + name: string; + description: string; + ip: string; + players: number; + online: string; + port?: number; + ws_port?: number; + wss_port?: number; + assets?: string; } const clientVersion = process.env.npm_package_version; // const MASTERSERVER_IP = 'master.aceattorneyonline.com:27014'; -const serverlist_domain = 'servers.aceattorneyonline.com'; +const serverlist_domain = "servers.aceattorneyonline.com"; const protocol = window.location.protocol; -const serverlist_cache_key = 'masterlist'; +const serverlist_cache_key = "masterlist"; const servers: AOServer[] = []; servers[-2] = { - name: 'Singleplayer', - description: 'Build cases, try out new things', - ip: '127.0.0.1', - players: 0, - online: 'Singleplayer', - port: 50001, + name: "Singleplayer", + description: "Build cases, try out new things", + ip: "127.0.0.1", + players: 0, + online: "Singleplayer", + port: 50001, } as AOServer; servers[-1] = { - name: 'Localhost', - description: 'This is your computer on port 50001', - ip: '127.0.0.1', - players: 0, - online: 'Localhost', - port: 50001, + name: "Localhost", + description: "This is your computer on port 50001", + ip: "127.0.0.1", + players: 0, + online: "Localhost", + port: 50001, } as AOServer; - function main() { - getServerlist().then((serverlist) => { - processServerlist(serverlist); - }); + getServerlist().then((serverlist) => { + processServerlist(serverlist); + }); - processClientVersion(clientVersion); + processClientVersion(clientVersion); - getMasterVersion().then((masterVersion) => { - processMasterVersion(masterVersion); - }); + getMasterVersion().then((masterVersion) => { + processMasterVersion(masterVersion); + }); } main(); export function setServ(ID: number) { - const server = servers[ID]; - const onlineStr = server.online; - const serverDesc = safeTags(server.description); - document.getElementById('serverdescription_content').innerHTML = `<b>${onlineStr}</b><br>${serverDesc}`; + const server = servers[ID]; + const onlineStr = server.online; + const serverDesc = safeTags(server.description); + document.getElementById("serverdescription_content").innerHTML = + `<b>${onlineStr}</b><br>${serverDesc}`; } window.setServ = setServ; - // Fetches the serverlist from the masterserver // Returns a properly typed list of servers async function getServerlist(): Promise<AOServer[]> { - const url = `${protocol}//${serverlist_domain}/servers`; - const response = await fetch(url); - - if (!response.ok) { - console.error(`Bad status code from masterserver. status: ${response.status}, body: ${response.body}`); - document.getElementById('ms_error').style.display = 'block'; - // If we get a bad status code, try to use the cached serverlist - return getCachedServerlist(); + const url = `${protocol}//${serverlist_domain}/servers`; + const response = await fetch(url); + + if (!response.ok) { + console.error( + `Bad status code from masterserver. status: ${response.status}, body: ${response.body}`, + ); + document.getElementById("ms_error").style.display = "block"; + // If we get a bad status code, try to use the cached serverlist + return getCachedServerlist(); + } + + const data = await response.json(); + const serverlist: AOServer[] = []; + + for (const item of data) { + if (!item.name) { + console.warn(`Server ${item} has no name, skipping`); + continue; + } + if (!item.ip) { + console.warn(`Server ${item.name} has no ip, skipping`); + continue; + } + if (!item.description) { + console.warn(`Server ${item.name} has no description, skipping`); + continue; } - const data = await response.json(); - const serverlist: AOServer[] = []; - - for (const item of data) { - if (!item.name) { - console.warn(`Server ${item} has no name, skipping`); - continue; - } - if (!item.ip) { - console.warn(`Server ${item.name} has no ip, skipping`); - continue; - } - if (!item.description) { - console.warn(`Server ${item.name} has no description, skipping`); - continue; - } - - const newServer: AOServer = { - name: item.name, - description: item.description, - ip: item.ip, - players: item.players || 0, - online: `Players: ${item.players}`, - } - - if (item.ws_port) { - newServer.ws_port = item.ws_port; - } - if (item.wss_port) { - newServer.wss_port = item.wss_port; - } - - // if none of ws_port or wss_port are defined, skip - // Note that this is not an error condition, as many servers only has port (TCP) enabled - // Which means they don't support webAO - if (!newServer.ws_port && !newServer.wss_port) { - continue; - } - - serverlist.push(newServer); + const newServer: AOServer = { + name: item.name, + description: item.description, + ip: item.ip, + players: item.players || 0, + online: `Players: ${item.players}`, + }; + + if (item.ws_port) { + newServer.ws_port = item.ws_port; + } + if (item.wss_port) { + newServer.wss_port = item.wss_port; } - // Always cache the result when we get it - localStorage.setItem(serverlist_cache_key, JSON.stringify(serverlist)); + // if none of ws_port or wss_port are defined, skip + // Note that this is not an error condition, as many servers only has port (TCP) enabled + // Which means they don't support webAO + if (!newServer.ws_port && !newServer.wss_port) { + continue; + } + + serverlist.push(newServer); + } + + // Always cache the result when we get it + localStorage.setItem(serverlist_cache_key, JSON.stringify(serverlist)); - return serverlist; + return serverlist; } function getCachedServerlist(): AOServer[] { - // If it's not in the cache, return an empty list - const cached = localStorage.getItem(serverlist_cache_key) || '[]'; - return JSON.parse(cached) as AOServer[]; + // If it's not in the cache, return an empty list + const cached = localStorage.getItem(serverlist_cache_key) || "[]"; + return JSON.parse(cached) as AOServer[]; } // Constructs the client URL robustly, independent of domain and path function constructClientURL(protocol: string): string { - const clientURL = new URL(window.location.href); + const clientURL = new URL(window.location.href); - // Use the given protocol - clientURL.protocol = protocol; + // Use the given protocol + clientURL.protocol = protocol; - // Remove the last part of the pathname (e.g., "index.html") - const pathname = clientURL.pathname; - const parts = pathname.split('/'); - parts.pop(); + // Remove the last part of the pathname (e.g., "index.html") + const pathname = clientURL.pathname; + const parts = pathname.split("/"); + parts.pop(); - // Reconstruct the pathname - clientURL.pathname = parts.join('/'); + // Reconstruct the pathname + clientURL.pathname = parts.join("/"); - // If clientURL.pathname does not end with a slash, add one - if (clientURL.pathname[clientURL.pathname.length - 1] !== '/') { - clientURL.pathname += '/' - } + // If clientURL.pathname does not end with a slash, add one + if (clientURL.pathname[clientURL.pathname.length - 1] !== "/") { + clientURL.pathname += "/"; + } - clientURL.pathname += "client.html"; + clientURL.pathname += "client.html"; - return clientURL.href; + return clientURL.href; } function processServerlist(serverlist: AOServer[]) { - for (let i = 0; i < serverlist.length; i++) { - const server = serverlist[i]; - let ws_port = 0; - let ws_protocol = ''; - let http_protocol = ''; - - if (server.ws_port) { - ws_port = server.ws_port; - ws_protocol = 'ws'; - http_protocol = 'http'; - } - if (server.wss_port && !window.navigator.userAgent.includes("Nintendo")) { - ws_port = server.wss_port; - ws_protocol = 'wss'; - http_protocol = 'https'; - } - - if (ws_port === 0 || ws_protocol === '' || http_protocol === '') { - console.warn(`Server ${server.name} has no websocket port, skipping`) - continue; - } - - const clientURL = constructClientURL(http_protocol); - const connect = `${ws_protocol}://${server.ip}:${ws_port}`; - const serverName = server.name; - const fullClientWatchURL = `${clientURL}?mode=watch&connect=${connect}&serverName=${serverName}`; - const fullClientJoinURL = `${clientURL}?mode=join&connect=${connect}&serverName=${serverName}`; - - servers.push(server); - - document.getElementById('masterlist').innerHTML - += `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(server.name)} (${server.players})</p>` - + `<a class="button" href="${fullClientWatchURL}" target="_blank">Watch</a>` - + `<a class="button" href="${fullClientJoinURL}" target="_blank">Join</a></li>`; + for (let i = 0; i < serverlist.length; i++) { + const server = serverlist[i]; + let ws_port = 0; + let ws_protocol = ""; + let http_protocol = ""; + + if (server.ws_port) { + ws_port = server.ws_port; + ws_protocol = "ws"; + http_protocol = "http"; + } + if (server.wss_port && !window.navigator.userAgent.includes("Nintendo")) { + ws_port = server.wss_port; + ws_protocol = "wss"; + http_protocol = "https"; } -} -async function getMasterVersion(): Promise<string> { - const url = `${protocol}//${serverlist_domain}/version`; - const response = await fetch(url); - if (!response.ok) { - console.error(`Bad status code from masterserver version check. status: ${response.status}, body: ${response.body}`); - return 'Unknown'; + if (ws_port === 0 || ws_protocol === "" || http_protocol === "") { + console.warn(`Server ${server.name} has no websocket port, skipping`); + continue; } - return await response.text(); + const clientURL = constructClientURL(http_protocol); + const connect = `${ws_protocol}://${server.ip}:${ws_port}`; + const serverName = server.name; + const fullClientWatchURL = `${clientURL}?mode=watch&connect=${connect}&serverName=${serverName}`; + const fullClientJoinURL = `${clientURL}?mode=join&connect=${connect}&serverName=${serverName}`; + + servers.push(server); + + document.getElementById("masterlist").innerHTML += + `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(server.name)} (${server.players})</p>` + + `<a class="button" href="${fullClientWatchURL}" target="_blank">Watch</a>` + + `<a class="button" href="${fullClientJoinURL}" target="_blank">Join</a></li>`; + } +} + +async function getMasterVersion(): Promise<string> { + const url = `${protocol}//${serverlist_domain}/version`; + const response = await fetch(url); + if (!response.ok) { + console.error( + `Bad status code from masterserver version check. status: ${response.status}, body: ${response.body}`, + ); + return "Unknown"; + } + + return await response.text(); } function processClientVersion(data: string) { - document.getElementById('clientinfo').innerHTML = `Client version: ${data}`; + document.getElementById("clientinfo").innerHTML = `Client version: ${data}`; } function processMasterVersion(data: string) { - document.getElementById('serverinfo').innerHTML = `Master server version: ${data}`; + document.getElementById("serverinfo").innerHTML = + `Master server version: ${data}`; } |
