diff options
Diffstat (limited to 'src/renderer/gameserver/onlineCount.ts')
-rw-r--r-- | src/renderer/gameserver/onlineCount.ts | 86 |
1 files changed, 75 insertions, 11 deletions
diff --git a/src/renderer/gameserver/onlineCount.ts b/src/renderer/gameserver/onlineCount.ts index af8a7b6..d78fa96 100644 --- a/src/renderer/gameserver/onlineCount.ts +++ b/src/renderer/gameserver/onlineCount.ts @@ -1,18 +1,19 @@ import GameServer from './server'; -const MAX_SHOWN_NAMES = 3; +const MAX_SHOWN_NAMES = 5; -export function makeOnlineCounterList(server:GameServer):HTMLElement{ +export async function makeOnlineCounterList(server:GameServer):Promise<HTMLElement>{ - const playerList = [ - 'LawnCable', - 'Saulc GM', - 'Crazyfefe', - 'Jesus Saves', - 'DUSTMAN' - ]; - - return generateHTML(playerList); + try { + const playerList = await fetchOnlineList(server); + return generateHTML(playerList); + } catch (err) { + console.log(err); + const OnlineCounterContainer = document.createElement('span'); + OnlineCounterContainer.classList.add("onlineCounter"); + OnlineCounterContainer.innerHTML = `<i class="fas fa-times fa-xs"></i>Error:<br>${err}`; + return OnlineCounterContainer; + } } @@ -49,3 +50,66 @@ function generateHTML(onlinePlayers:string[]):HTMLElement{ OnlineCounterContainer.appendChild(PlayerList); return OnlineCounterContainer; } + +export enum OnlineListParser { + Invalid, + TMW, + TMW2API, + EXAMPLE_DATA, +}; + +async function fetchOnlineList(server:GameServer):Promise<string[]>{ + + if(!server.OnlineList)throw new Error("No Online list was\n specified for this Server"); + + if(server.OnlineList.parser && server.OnlineList.url){ + switch(server.OnlineList.parser){ + case OnlineListParser.EXAMPLE_DATA: + return [ + 'LawnCable', + 'Saulc GM', + 'Crazyfefe', + 'Jesus Saves', + 'DUSTMAN' + ]; + case OnlineListParser.TMW: + return tmwParser(await request(server.OnlineList.url)); + default: + throw new Error("Online List Parser is unknown"); + } + } else { + throw new Error("Online List wasn't configured right"); + } +} + + +function tmwParser(rawData:string):string[]{ + let stringArray:string[]=[]; + rawData.replace(/<td>(.+?)<\/td>/g, (x:string, content:string) =>{ + stringArray.push(content.replace(/<\/{0,1}.+?>/g, "")); + return ""; + }); + return stringArray; +} + + +function request(url:string):Promise<string>{ + return new Promise((res, rej)=>{ + var xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.addEventListener("error", (ev)=>{ + console.log("Probably a network error:", ev); + rej(new Error("Probably a network error")); + }); + xhr.onload = function() { + if (xhr.status === 200) { + res(xhr.responseText); + } + else { + console.log(`xhr.status: ${xhr.status} != 200`); + rej(new Error("Probably a network error")); + } + }; + xhr.send(); + }); +} |