import Fingerprint from "./fingerprint.js";
const MASTERSERVER_IP = "master.aceattorneyonline.com:27014";
const fp = new Fingerprint({
canvas: true,
ie_activex: true,
screen_resolution: true
});
/** An emulated, semi-unique HDID that is generally safe for HDID bans. */
const cookieid = getCookie("fingerprint");
let hdid;
if (cookieid) {
hdid = cookieid;
} else {
hdid = fp.get();
setCookie("fingerprint",hdid);
}
console.log(`Your emulated HDID is ${hdid}`);
let oldLoading = false;
export function onLoad(){
if (/webOS|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|PlayStation|Opera Mini/i.test(navigator.userAgent)) {
oldLoading = true;
}
}
window.onLoad = onLoad;
const masterserver = new WebSocket("ws://" + MASTERSERVER_IP);
masterserver.onopen = (evt) => onOpen(evt);
masterserver.onmessage = (evt) => onMessage(evt);
const server_description = [];
server_description[-1] = "This is your computer on port 50001";
const online_counter = [];
/**
* read a cookie from storage
* got this from w3schools
* https://www.w3schools.com/js/js_cookies.asp
* @param {String} cname The name of the cookie to return
*/
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1);
}
if (c.indexOf(name) === 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
/**
* set a cookie
* the version from w3schools expects these to expire
* @param {String} cname The name of the cookie to return
* @param {String} value The value of that cookie option
*/
function setCookie(cname,value) {
document.cookie = cname + "=" + value;
}
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) {
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