aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/index.html12
-rw-r--r--webAO/master.js211
2 files changed, 95 insertions, 128 deletions
diff --git a/public/index.html b/public/index.html
index 30bd23a..8d0b1c4 100644
--- a/public/index.html
+++ b/public/index.html
@@ -19,11 +19,11 @@
<meta property="twitter:image" content="https://repository-images.githubusercontent.com/78860508/89fcba80-aafd-11e9-80db-c5b10c01aba9">
<meta http-equiv="Content-Security-Policy"
- content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;">
+ content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; frame-src https://servers.aceattorneyonline.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://servers.aceattorneyonline.com ws:;">
<meta http-equiv="X-Content-Security-Policy"
- content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;">
+ content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; frame-src https://servers.aceattorneyonline.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://servers.aceattorneyonline.com ws:;">
<meta http-equiv="X-WebKit-CSP"
- content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' ws:;">
+ content="default-src 'self' 'unsafe-inline' 'unsafe-eval' *.aceattorneyonline.com data:; frame-src https://servers.aceattorneyonline.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://servers.aceattorneyonline.com ws:;">
<meta name="viewport" content="width=700, initial-scale=1">
<meta name="theme-color" content="#2c3d51">
@@ -109,10 +109,12 @@
<div id="info_container">
<p id="serverinfo">Masterserver version - ...</p>
<p id="clientinfo">Client version - ...</p>
- <textarea id="masterchat" readonly></textarea>
+
+ <iframe id="masterchat" src="https://servers.aceattorneyonline.com/motd" frameborder="0"></iframe>
+
<p>Having trouble? <a href="https://discord.gg/9rYQVVQ">Join us on Discord</a></p>
+ <p><a href="https://servers.aceattorneyonline.com/privacy">Privacy Policy</a></p>
</div>
- </div>
<div id="serverdescription_container">
<p id="serverdescription_content">
</p>
diff --git a/webAO/master.js b/webAO/master.js
index 6b791e6..2d1e69a 100644
--- a/webAO/master.js
+++ b/webAO/master.js
@@ -10,7 +10,6 @@ const MASTERSERVER_IP = 'master.aceattorneyonline.com:27014';
let masterserver;
let hdid;
-const options = { fonts: { extendedJsFonts: true, userDefinedFonts: ['Ace Attorney', '8bitoperator', 'DINEngschrift'] }, excludes: { userAgent: true, enumerateDevices: true } };
let selectedServer = -1;
@@ -28,145 +27,111 @@ fpPromise
.then((result) => {
hdid = result.visitorId;
- check_https();
+ check_https();
- masterserver = new WebSocket(`ws://${MASTERSERVER_IP}`);
- masterserver.onopen = (evt) => onOpen(evt);
- masterserver.onerror = (evt) => onError(evt);
- masterserver.onmessage = (evt) => onMessage(evt);
+ fetch("https://servers.aceattorneyonline.com/servers")
+ .then(response => response.json())
+ .then(data => processServerlist(data));
- // i don't need the ms to play alone
- setTimeout(() => checkOnline(-1, '127.0.0.1:50001'), 0);
- });
+ fetch("https://servers.aceattorneyonline.com/version")
+ .then(response => response.text())
+ .then(response => processVersion(response));
+
+ // i don't need the ms to play alone
+ setTimeout(() => checkOnline(-1, '127.0.0.1:50001'), 0);
+});
export function check_https() {
- if (document.location.protocol === 'https:') {
+ if (document.location.protocol === 'https:') {
document.getElementById('https_error').style.display = '';
- }
+ }
}
export function setServ(ID) {
- selectedServer = ID;
+ selectedServer = ID;
- if (document.getElementById(`server${ID}`).className === '') { checkOnline(ID, `${servers[ID].ip}:${servers[ID].port}`); }
+ if (document.getElementById(`server${ID}`).className === '') { checkOnline(ID, `${servers[ID].ip}:${servers[ID].ws_port}`); }
- if (servers[ID].description !== undefined) {
- document.getElementById('serverdescription_content').innerHTML = `<b>${servers[ID].online}</b><br>${safeTags(servers[ID].description)}`;
- } else {
- document.getElementById('serverdescription_content').innerHTML = '';
- }
+ if (servers[ID].description !== undefined) {
+ document.getElementById('serverdescription_content').innerHTML = `<b>${servers[ID].online}</b><br>${safeTags(servers[ID].description)}`;
+ } else {
+ document.getElementById('serverdescription_content').innerHTML = '';
+ }
}
window.setServ = setServ;
-function onOpen(_e) {
- masterserver.send('ID#webAO#webAO#%');
-
- masterserver.send('ALL#%');
- masterserver.send('VC#%');
+function checkOnline(serverID, coIP) {
+ let oserv;
+ if (serverID !== -2) {
+ try {
+ oserv = new WebSocket(`ws://${coIP}`);
+ } catch (SecurityError) {
+ document.getElementById(`server${serverID}`).className = 'unavailable';
+ return;
+ }
+ }
+
+ // define what the callbacks do
+ function onCOOpen(_e) {
+ document.getElementById(`server${serverID}`).className = 'available';
+ oserv.send(`HI#${hdid}#%`);
+ oserv.send('ID#webAO#webAO#%');
+ }
+
+ function onCOMessage(e) {
+ const comsg = e.data;
+ const coheader = comsg.split('#', 2)[0];
+ const coarguments = comsg.split('#').slice(1);
+ if (coheader === 'PN') {
+ servers[serverID].online = `Online: ${Number(coarguments[0])}/${Number(coarguments[1])}`;
+ oserv.close();
+ return;
+ } else if (coheader === 'BD') {
+ servers[serverID].online = 'Banned';
+ servers[serverID].description = coarguments[0];
+ oserv.close();
+ return;
+ }
+ if (serverID === selectedServer) {
+ document.getElementById('serverdescription_content').innerHTML = `<b>${servers[serverID].online}</b><br>${safeTags(servers[serverID].description)}`;
+ }
+ }
+
+ // assign the callbacks
+ oserv.onopen = function (evt) {
+ onCOOpen(evt);
+ };
+
+ oserv.onmessage = function (evt) {
+ onCOMessage(evt);
+ };
+
+ oserv.onerror = function (_evt) {
+ document.getElementById(`server${serverID}`).className = 'unavailable';
+ };
}
-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>`;
- }
-}
+function processServerlist(thelist) {
+ for (let i = 0; i < thelist.length - 1; i++) {
+ const serverEntry = thelist[i];
+ console.debug(serverEntry)
-/**
- * Triggered when an network error occurs.
- * @param {ErrorEvent} e
- */
-function onError(evt) {
- document.getElementById('ms_error').style.display = 'block';
- console.error(`A network error occurred: ${evt.reason} (${evt.code})`);
- parseMasterlist(localStorage.getItem('masterlist'));
-}
+ servers[i] = serverEntry;
-function checkOnline(serverID, coIP) {
- let oserv;
- if (serverID !== -2) {
- try {
- oserv = new WebSocket(`ws://${coIP}`);
- } catch (SecurityError) {
- document.getElementById(`server${serverID}`).className = 'unavailable';
- return;
- }
- }
-
- // define what the callbacks do
- function onCOOpen(_e) {
- document.getElementById(`server${serverID}`).className = 'available';
- oserv.send(`HI#${hdid}#%`);
- oserv.send('ID#webAO#webAO#%');
- }
-
- function onCOMessage(e) {
- const comsg = e.data;
- const coheader = comsg.split('#', 2)[0];
- const coarguments = comsg.split('#').slice(1);
- if (coheader === 'PN') {
- servers[serverID].online = `Online: ${Number(coarguments[0])}/${Number(coarguments[1])}`;
- oserv.close();
- return;
- }
- if (coheader === 'BD') {
- servers[serverID].online = 'Banned';
- servers[serverID].description = coarguments[0];
- oserv.close();
- return;
- }
- if (serverID === selectedServer) { document.getElementById('serverdescription_content').innerHTML = `<b>${servers[serverID].online}</b><br>${safeTags(servers[serverID].description)}`; }
- }
-
- // assign the callbacks
- oserv.onopen = function (evt) {
- onCOOpen(evt);
- };
-
- oserv.onmessage = function (evt) {
- onCOMessage(evt);
- };
-
- oserv.onerror = function (_evt) {
- document.getElementById(`server${serverID}`).className = 'unavailable';
- };
+ const ipport = serverEntry.ip + ":" + serverEntry.ws_port;
+
+ if (serverEntry.ws_port) {
+ document.getElementById("masterlist").innerHTML +=
+ `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(serverEntry.name)}</p>`
+ + `<a class="button" href="client.html?mode=watch&ip=${ipport}">Watch</a>`
+ + `<a class="button" href="client.html?mode=join&ip=${ipport}">Join</a></li>`;
+ }
+ }
+ return;
}
-function onMessage(e) {
- const msg = e.data;
- const header = msg.split('#', 2)[0];
- console.debug(msg);
-
- if (header === 'ALL') {
- localStorage.setItem('masterlist', msg);
- parseMasterlist(msg);
- masterserver.close();
- } else if (header === 'servercheok') {
- const args = msg.split('#').slice(1);
- document.getElementById('clientinfo').innerHTML = `Client version: ${version} expected: ${args[0]}`;
- } else if (header === 'SV') {
- const args = msg.split('#').slice(1);
- document.getElementById('serverinfo').innerHTML = `Master server version: ${args[0]}`;
- } else if (header === 'CT') {
- const args = msg.split('#').slice(1);
- const msChat = document.getElementById('masterchat');
- msChat.innerHTML += `${unescapeChat(args[0])}: ${unescapeChat(args[1])}\r\n`;
- if (msChat.scrollTop > msChat.scrollHeight - 600) {
- msChat.scrollTop = msChat.scrollHeight;
- }
- }
+function processVersion(data) {
+ console.debug(data);
+ document.getElementById("clientinfo").innerHTML = `Client version: ${version}`;
+ document.getElementById("serverinfo").innerHTML = `Master server version: ${data}`;
}