const MASTERSERVER_IP = "master.aceattorneyonline.com:27014";
const version = 2.4;
import Fingerprint2 from 'fingerprintjs2';
let masterserver;
let hdid;
const options = {fonts: {extendedJsFonts: true, userDefinedFonts: ["Ace Attorney", "8bitoperator", "DINEngschrift"]}, excludes: {userAgent: true, enumerateDevices: true}};
let oldLoading = false;
if (window.requestIdleCallback) {
requestIdleCallback(function () {
Fingerprint2.get(options, function (components) {
hdid = Fingerprint2.x64hash128(components.reduce((a, b) => `${a.value || a}, ${b.value}`),31);
masterserver = new WebSocket("ws://" + MASTERSERVER_IP);
masterserver.onopen = (evt) => onOpen(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;
}
});
});
} else {
setTimeout(function () {
Fingerprint2.get(options, function (components) {
hdid = Fingerprint2.x64hash128(components.reduce((a, b) => `${a.value || a}, ${b.value}`),31);
masterserver = new WebSocket("ws://" + MASTERSERVER_IP);
masterserver.onopen = (evt) => onOpen(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;
}
});
}, 500);
}
const server_description = [];
server_description[-1] = "This is your computer on port 50001";
const online_counter = [];
export function setServ(ID) {
console.log(server_description[ID]);
if (server_description[ID] !== undefined) {
document.getElementById("serverdescription_content").innerHTML = "" + online_counter[ID] + "
" + server_description[ID];
}
else {
document.getElementById("serverdescription_content").innerHTML = "";
}
}
window.setServ = setServ;
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("VC#%");
}
function checkOnline(serverID, coIP) {
var oserv = new WebSocket("ws://" + coIP);
// 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") {
online_counter[serverID] = `Online: ${coarguments[0]}/${coarguments[1]}`;
oserv.close();
}
else if (coheader === "BD") {
online_counter[serverID] = "Banned";
server_description[serverID] = coarguments[0];
oserv.close();
}
}
function onCOError(_e) {
console.warn(coIP + " threw an error.");
}
// assign the callbacks
oserv.onopen = function (evt) {
onCOOpen(evt);
};
oserv.onmessage = function (evt) {
onCOMessage(evt);
};
oserv.onerror = function(evt) {
onCOError(evt);
};
}
function onMessage(e) {
const msg = e.data;
const header = msg.split("#", 2)[0];
console.log(header);
if (header === "ALL") {
const servers = msg.split("#").slice(1);
for (let i = 0; i < servers.length-1; i++) {
const serverEntry = servers[i];
const args = serverEntry.split("&");
const asset = args[4] ? `&asset=${args[4]}` : "";
document.getElementById("masterlist").innerHTML +=
`
${args[0]}
` + `Watch` + `Join${args[5]}
` + `Watch` + `Join