large logic rework for smooth game setup, and error handling

This commit is contained in:
2020-10-01 00:29:59 +00:00
parent 3b88dba9a2
commit f4ea9f57c6
2 changed files with 77 additions and 45 deletions

View File

@@ -154,15 +154,51 @@ function updateEvent() {
}
}
function getSession(callback) {
popupDialog("gettingStarted","Welcome to Deckard and company", false, inputDialog,{"content":"Please enter a game ID or leave blank to start a new game","inputType":"number"},function (value) {
if (Number.isInteger(Number.parseInt(value))) {
window.gameState.session = Number.parseInt(value);
} else {
window.gameState.session = "";
}
window.history.pushState(null,null,window.location.origin+window.location.pathname+"?s="+window.gameState.session);
callback();
});
}
function getUser(callback) {
popupDialog("gettingStarted","Welcome to Deckard and company", false, inputDialog, {"content":"Please enter a username","inputType":"text"},function (value) {
if ((null != value) && ("" != value)) {
window.gameState.user = value;
} else {
window.gameState.user = "Unknown"+(new Date()).getTime();
}
callback();
});
}
function startGameSession() {
window.gameSession = new WebSocket(server);
gameSession.onmessage = function (event) {
var message = JSON.parse(event.data);
if (message.userID) { window.userID = message.userID; }
if (message.session) {
gameSession.close(4100,"Restarting with new session");
window.location.search = "s="+message.session;
}
if (message.message) { console.log(message.message); }
if (message.request) {
if ("session" == message.request) { window.gameSession.send('{"session":'+window.gameState.session+'}'); }
if ("user" == message.request) { window.gameSession.send('{"user":"'+window.gameState.user+'"}'); }
if ("session" == message.request) {
if (!gameState.session) {
getSession(function () {
window.gameSession.send('{"session":'+(window.gameState.session ? window.gameState.session : null)+'}');
});
} else { window.gameSession.send('{"session":"'+gameState.session+'"}'); }
}
if ("user" == message.request) {
getUser(function () { window.gameSession.send('{"user":"'+window.gameState.user+'"}'); });
}
if ("join" == message.request) { window.gameSession.send('{"action":"join"}'); }
if ("update" == message.request) { window.gameSession.send('{"action":"update"}'); }
}
@@ -172,6 +208,7 @@ function startGameSession() {
if ("play" == message.action) { window.UI.menu.pools.button.checked = true; }
if ("muligan" == message.action) { window.UI.menu.decks.button.checked = true; }
if ("clear" == message.action) { window.UI.menu.decks.button.checked = true; }
if ("close" == message.action) { gameSession.close(4000,"close was requested"); }
updateEvent();
}
if (message.users) { window.gameState.users = message.users; updateEvent(); }
@@ -224,30 +261,9 @@ window.UI.menu.options = menuButton("#menu","Options","menu",false);
window.UI.display = elementPlace("body","display",null,"div");
var parms = new URLSearchParams(window.location.search);
if (!parms.get("s")) {
popupDialog("gettingStarted","Welcome to Deckard and company", false, inputDialog,{"content":"Please enter a game ID or leave blank to start a new game","inputType":"number"},
function (value) {
if (Number.isInteger(Number.parseInt(value))) {
window.gameState.session = Number.parseInt(value);
} else {
window.gameState.session = null;
}
window.location.search = '?s='+window.gameState.session;
// window.location.reload();
});
} else {
window.gameState.session = parms.get("s");
if (!window.gameState.user) {
popupDialog("gettingStarted","Welcome to Deckard and company", false, inputDialog, {"content":"Please enter a username","inputType":"text"},
function (value) {
if ((null != value) && ("" != value)) {
window.gameState.user = value;
} else {
window.gameState.user = "Unknown"+(new Date()).getTime();
}
startGameSession();
});
} else { startGameSession(); }
}
console.log(parms.get("s"));
window.gameState.session = parms.get("s");
startGameSession();
</script>
</html>