tickLeisteClient/website/javascript.js
2022-02-04 22:39:41 +01:00

307 lines
13 KiB
JavaScript

let addButton = document.getElementById("addPlayer");
let deleteButton = document.getElementById("removePlayer");
let changeTickButton = document.getElementById("changeTick");
let changeIdButton = document.getElementById("tickLeistenId");
let reloadButton = document.getElementById("reload");
let saveButton = document.getElementById("save");
let url = "wss://nerfingen.de/tickLeisteSocket/";
var players = [];
let Id = "Test" //Math.floor(Math.random()*10000000000000000).toString(16)
var ws = new WebSocket(url + Id);
document.getElementById("p4").innerHTML = "" + Id;
/* Handles Events from Server */
ws.onmessage = function(evt) {messageHandling(evt)};
function messageHandling(evt){
var msg = evt.data;
var obj = JSON.parse(msg);
var valid = false;
/*Changes Tick of one Player in players. Updates the Playerlist and current Player.*/
if (obj.eventType == "SetPlayerTickE") {
valid = true;
for (var i = 0; i < players.length; i++){
if (players[i].UUID == obj.playerUUID){
if (obj.tick.tickType == "Tick"){
players[i].Tick = obj.tick.tickValue;
}
else {
players[i].Tick = obj.tick.tickType;
}
var pl = players[i];
players.splice(i,1);
AddPlayer(pl);
break;
}
}
PlayerList();
CurrentPlayer();
}
/*Adds Player and their Tick to players. Updates the Playerlist and current Player.*/
if (obj.eventType == "AddPlayerTickE") {
valid = true;
var newPlayer = new Object ();
newPlayer.Name = obj.playerName;
newPlayer.UUID = obj.playerUUID;
if (obj.tick.tickType == "Tick"){
newPlayer.Tick = obj.tick.tickValue;
}
else {
newPlayer.Tick = obj.tick.tickType;
}
AddPlayer(newPlayer);
PlayerList();
CurrentPlayer();
}
/*Adds players an their Ticks to players. Updates the Playerlist and current Player.*/
if (obj.eventType == "InitializeTickLeisteE") {
valid = true;
players = [];
for (var i = 0; i<obj.tickLeiste.length;i++){
for (var j =0;j<obj.tickLeiste[i][1].length;j++){
if (obj.tickLeiste[i][0].tickType == "Tick"){
AddPlayer({Tick: obj.tickLeiste[i][0].tickValue, UUID: obj.tickLeiste[i][1][j][0], Name: obj.tickLeiste[i][1][j][1]});
}
else {
AddPlayer({Tick: obj.tickLeiste[i][0].tickType, UUID: obj.tickLeiste[i][1][j][0], Name: obj.tickLeiste[i][1][j][1]});
}
}
}
PlayerList();
CurrentPlayer();
}
/*Changes the Name of a Player in players. Updates the Playerlist and current Player*/
if (obj.eventType == "ChangeNameE") {
valid = true;
for (var i = 0; i < players.length; i++){
if (players[i].UUID == obj.playerUUID){
players[i].Name = obj.playerName;
}
}
PlayerList();
CurrentPlayer();
}
/*Removes one Player from players. Updates the Playerlist and current Player*/
if (obj.eventType == "RemovePlayerE") {
valid = true;
for (var i = 0; i < players.length; i++){
if (players[i].UUID == obj.playerUUID){
players.splice(i,1);
}
}
PlayerList();
CurrentPlayer();
}
/*If no eventType was recognized, an error is thrown.*/
if (valid == false) {
console.error('Invalid Event received');
}
}
/*When the Button is clicked, a AddPlayerTickR request is send to the server.*/
addButton.onclick = function() {
var type = "";
if (document.getElementById("A2").value == "Abwarten") {
type = "Abwarten";
ws.send('{"requestType" : "AddPlayerTickR", "playerName" : "' + document.getElementById("A1").value + '" , "tick" : {"tickType" : "' + type + '"}}');
}
else {
if (document.getElementById("A2").value == "Bereithalten") {
type = "Bereithalten";
ws.send('{"requestType" : "AddPlayerTickR", "playerName" : "' + document.getElementById("A1").value + '" , "tick" : {"tickType" : "' + type + '"}}');
}
else {
type = "Tick";
ws.send('{"requestType" : "AddPlayerTickR", "playerName" : "' + document.getElementById("A1").value + '" , "tick" : {"tickType" : "' + type + '", "tickValue" : ' + document.getElementById("A2").value + '}}');
}
}
}
/*When the Button is clicked, a RemovePlayerR request is send to the server.*/
deleteButton.onclick = function() {
var UUID = "";
for (var i = 0; i < players.length; i++){
if (players[i].Name == document.getElementById("B").value){
UUID = players[i].UUID;
}
}
ws.send('{"requestType" : "RemovePlayerR", "playerUUID" : "' + UUID + '"}');
}
/*When the Button is clicked, a SetPlayerTickR request is send to the server*/
changeTickButton.onclick = function() {
var UUID = "";
var Tick = document.getElementById("C2").value;
var type = "";
for (var i = 0; i < players.length; i++){
if (players[i].Name == document.getElementById("C1").value){
UUID = players[i].UUID;
if (Tick == "Abwarten" || Tick == "Bereithalten"){
ws.send('{"requestType" : "SetPlayerTickR", "playerUUID" : "' + UUID + '", "tick" : {"tickType" : "' + Tick + '"}}');
break;
}
else {
type = "Tick";
ws.send('{"requestType" : "SetPlayerTickR", "playerUUID" : "' + UUID + '", "tick" : {"tickType" : "' + type + '", "tickValue" : ' + Tick + '}}');
break;
}
}
}
}
/*When the Button is clicked, a new WebSocket connection is opened with the new ID*/
changeIdButton.onclick = function() {
newId = document.getElementById("D").value;
ws.close();
ws = new WebSocket(url + newId);
document.getElementById("p4").innerHTML = "" + newId;
ws.onmessage = function(evt) {messageHandling(evt)};
}
/*When the Button is clicked, a TickLeisteR request is send to the server.*/
reloadButton.onclick = function() {
ws.send('{"requestType" : "TickLeisteR"}');
}
saveButton.onclick = function(){
download("Tickleiste.json", JSON.stringify(players));
}
/*Updates the Playerlist according to the content of players.*/
function PlayerList(){
var content = "";
for (var i = 0; i < players.length; i++){
content = content + players[i].Name + " " + players[i].Tick + "<br>";
}
document.getElementById("p3").innerHTML = content;
}
/*Updates the current Player according to the Player with the smallest Tick in players.*/
function CurrentPlayer(){
if (players.length > 0 ){
document.getElementById("p2").innerHTML = players[0].Name;
document.getElementById("p1").innerHTML = "" + players[0].Tick;
}
else{
document.getElementById("p2").innerHTML = "-";
document.getElementById("p1").innerHTML = "-";
}
}
function AddPlayer(player){
if (players.length == 0){
players.push(player);
}
else {
var added = false;
if (player.Tick == "Abwarten"){
players.push(player);
}
else {
if (player.Tick == "Bereithalten"){
for (var i = players.length; i>0;i--){
if (players[i-1].Tick != "Abwarten"){
players.splice(i,0,player);
added = true;
break;
}
if (i == 1 && added == false){
players.splice(0,0,player);
break;
}
}
}
else {
for (var i = 0; i<players.length;i++){
if (players[i].Tick == "Abwarten" || players[i].Tick == "Bereithalten"){
players.splice(i,0,player);
added = true;
break
}
else {
if (player.Tick < players[i].Tick){
players.splice(i,0,player);
added = true;
break;
}
if (i == (players.length -1) && added == false){
players.push(player);
break;
}
}
}
}
}
}
}
function loadFile(input){
let file = input.files[0];
let reader = new FileReader();
reader.readAsText(file);
reader.onload = function() {
var pl = JSON.parse(reader.result);
var tickleiste = initializeJSONFormat(pl);
ws.send(tickleiste);
};
reader.onerror = function() {
console.log(reader.error);
};
}
function initializeJSONFormat(arr) { // JSON ändern
var tick = -999;
var tickleiste = "";
var type = "";
for (var i=0;i<arr.length;i++){
if (arr[i].Tick == "Abwarten" || arr[i].Tick == "Bereithalten"){
type = arr[i].Tick;
}
else {
type = "Tick";
}
if (arr[i].Tick > tick){
tick = arr[i].Tick;
tickleiste = tickleiste + ']], [{"tickType" : "' + type + '", "tickvalue" : "' + arr[i].Tick + '"}, ["' + arr[i].Name + '"';
}
else {
tick = arr[i].Tick;
tickleiste = tickleiste + ', "' + arr[i].Name + '"';
}
}
tickleiste = tickleiste.slice(4);
tickleiste = '{"requestType" : "InitializeTickLeisteR", "tickLeiste" : [' + tickleiste + ']]]}';
return tickleiste;
}
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/json;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}