aboutsummaryrefslogtreecommitdiff
path: root/webAO/master.js
diff options
context:
space:
mode:
Diffstat (limited to 'webAO/master.js')
-rw-r--r--webAO/master.js86
1 files changed, 43 insertions, 43 deletions
diff --git a/webAO/master.js b/webAO/master.js
index 1607fa5..bc0111e 100644
--- a/webAO/master.js
+++ b/webAO/master.js
@@ -1,43 +1,38 @@
const MASTERSERVER_IP = "master.aceattorneyonline.com:27014";
-const version = 2.4;
+import { version } from '../package.json';
import Fingerprint2 from 'fingerprintjs2';
+import { unescapeChat } from './encoding.js';
let masterserver;
let hdid;
const options = { fonts: { extendedJsFonts: true, userDefinedFonts: ["Ace Attorney", "8bitoperator", "DINEngschrift"] }, excludes: { userAgent: true, enumerateDevices: true } };
-let oldLoading = false;
+let lowMemory = false;
const server_description = [];
server_description[-1] = "This is your computer on port 50001";
const online_counter = [];
-/**
- * Unescapes a string to AO1 escape codes.
- * @param {string} estring the string to be unescaped
- */
-function unescapeChat(estring) {
- return estring
- .replace(/<num>/g, "#")
- .replace(/<and>/g, "&")
- .replace(/<percent>/g, "%")
- .replace(/<dollar>/g, "$");
-}
-
if (window.requestIdleCallback) {
requestIdleCallback(function () {
Fingerprint2.get(options, function (components) {
hdid = Fingerprint2.x64hash128(components.reduce((a, b) => `${a.value || a}, ${b.value}`), 31);
+ if (/webOS|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|PlayStation|Opera Mini/i.test(navigator.userAgent)) {
+ lowMemory = true;
+ }
+
+ check_https();
+
masterserver = new WebSocket("ws://" + MASTERSERVER_IP);
masterserver.onopen = (evt) => onOpen(evt);
+ masterserver.onerror = (evt) => onError(evt);
masterserver.onmessage = (evt) => onMessage(evt);
- if (/webOS|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|PlayStation|Opera Mini/i.test(navigator.userAgent)) {
- oldLoading = true;
- }
+ // i don't need the ms to play alone
+ setTimeout(() => checkOnline(-1, "127.0.0.1:50001"), 0);
});
});
} else {
@@ -45,17 +40,29 @@ if (window.requestIdleCallback) {
Fingerprint2.get(options, function (components) {
hdid = Fingerprint2.x64hash128(components.reduce((a, b) => `${a.value || a}, ${b.value}`), 31);
+ if (/webOS|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|PlayStation|Opera Mini/i.test(navigator.userAgent)) {
+ lowMemory = true;
+ }
+
+ check_https();
+
masterserver = new WebSocket("ws://" + MASTERSERVER_IP);
masterserver.onopen = (evt) => onOpen(evt);
+ masterserver.onerror = (evt) => onError(evt);
masterserver.onmessage = (evt) => onMessage(evt);
- if (/webOS|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|PlayStation|Opera Mini/i.test(navigator.userAgent)) {
- oldLoading = true;
- }
+ // i don't need the ms to play alone
+ setTimeout(() => checkOnline(-1, "127.0.0.1:50001"), 0);
});
}, 500);
}
+export function check_https() {
+ if (document.location.protocol === "https:") {
+ document.getElementById("https_error").style.display = "";
+ }
+}
+
export function setServ(ID) {
console.log(server_description[ID]);
if (server_description[ID] !== undefined) {
@@ -71,18 +78,21 @@ function onOpen(_e) {
console.log(`Your emulated HDID is ${hdid}`);
masterserver.send(`ID#webAO#webAO#%`);
- if (oldLoading === true) {
- masterserver.send("askforservers#%");
- }
- else {
- masterserver.send("ALL#%");
- }
+ masterserver.send("ALL#%");
masterserver.send("VC#%");
}
-function checkOnline(serverID, coIP) {
+/**
+ * Triggered when an network error occurs.
+ * @param {ErrorEvent} 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})`;
+}
- var oserv = new WebSocket("ws://" + coIP);
+function checkOnline(serverID, coIP) {
+ let oserv = new WebSocket("ws://" + coIP);
// define what the callbacks do
function onCOOpen(_e) {
@@ -136,31 +146,21 @@ function onMessage(e) {
const serverEntry = servers[i];
const args = serverEntry.split("&");
const asset = args[4] ? `&asset=${args[4]}` : "";
+ const liclass = lowMemory ? "" : "unavailable"; // don't hide the entries if we're not checking them
document.getElementById("masterlist").innerHTML +=
- `<li id="server${i}" class="unavailable" onmouseover="setServ(${i})"><p>${args[0]}</p>`
+ `<li id="server${i}" class="${liclass}" onmouseover="setServ(${i})"><p>${args[0]}</p>`
+ `<a class="button" href="client.html?mode=watch&ip=${args[2]}:${args[3]}${asset}">Watch</a>`
+ `<a class="button" href="client.html?mode=join&ip=${args[2]}:${args[3]}${asset}">Join</a></li>`;
server_description[i] = args[1];
- checkOnline(i, `${args[2]}:${args[3]}`);
+ if (!lowMemory)
+ setTimeout(() => checkOnline(i, `${args[2]}:${args[3]}`), 0);
}
- checkOnline(-1, "127.0.0.1:50001");
masterserver.close();
}
- else if (header === "SN") {
- const args = msg.split("#");
- const i = args[1];
- document.getElementById("masterlist").innerHTML +=
- `<li id="server${i}" class="unavailable" onmouseover="setServ(${i})"><p>${args[5]}</p>`
- + `<a class="button" href="client.html?mode=watch&ip=${args[2]}:${args[4]}">Watch</a>`
- + `<a class="button" href="client.html?mode=join&ip=${args[2]}:${args[4]}">Join</a></li>`;
- server_description[i] = args[6];
- masterserver.send("SR#" + i + "#%");
- checkOnline(i, `${args[2]}:${args[3]}`);
- }
else if (header === "servercheok") {
const args = msg.split("#").slice(1);
- document.getElementById("clientinfo").innerHTML = `Client version: ${args[0]}`;
+ document.getElementById("clientinfo").innerHTML = `Client version: ${version} expected: ${args[0]}`;
}
else if (header === "SV") {
const args = msg.split("#").slice(1);