diff --git a/Server/server.pl b/Server/server.pl index 1c30ada..ac56cec 100755 --- a/Server/server.pl +++ b/Server/server.pl @@ -311,7 +311,7 @@ my $server = Net::WebSocket::Server->new( $conn->send_utf8('{"info":"user success"}'); } if (defined($messageData->{session})) { - unless(defined($conn->{user})) { $conn->send_utf8('{"error":200, "message":Could not join session, no user defined", "request":"user"}'); $conn->send_utf8('{"request":"session"}'); return 0; } + unless(defined($conn->{user})) { $conn->send_utf8('{"error":200, "message":"Could not join session, no user defined", "request":"user"}'); $conn->send_utf8('{"request":"session"}'); return 0; } $conn->{session} = $messageData->{session}; $conn->send_utf8('{"info":"session success", "request":"join"}'); } @@ -346,7 +346,12 @@ my $server = Net::WebSocket::Server->new( $current->send_utf8('{"pools":'.to_json(\%poolStats).'}'); # Users Hands my @hands = getHands($sessionID,$conn->{user}); - $current->send_utf8('{"hands":'.to_json(\@hands).'}'); + my %handStats = (); + for (@hands) { + $handStats{$_}{name} = $_; + $handStats{$_}{cards} = []; + } + $current->send_utf8('{"hands":'.to_json(\%handStats).'}'); # for each hand for (@hands) { my $handID = $_; diff --git a/UI/index.html b/UI/index.html index 0e65776..346fc72 100644 --- a/UI/index.html +++ b/UI/index.html @@ -11,101 +11,125 @@ window.server = "ws://localhost:8080/"; window.gameState = {}; -window.gameState.deck = []; -window.gameState,pool = []; -window.hand = []; +window.gameState.users = []; +window.gameState.decks = []; +window.gameState.pools = []; +window.gameState.hands = []; function updateEvent() { - window.UI.deck.innerHTML = ""; - window.UI.hand.innerHTML = ""; - var theDeck = elementPlace("#deck","deckDisp","card","div"); - theDeck.innerHTML = "
"+window.gameState.deck.length+"
"; - window.hand.forEach(function (card,index) { - if (index < 10) { - var currentCard = elementPlace("#hand",null,"card","li"); - currentCard.innerHTML = card; - } + window.UI.users.innerHTML = "Users:"; + window.UI.decks.innerHTML = "Decks:"; + window.UI.hands.innerHTML = "Hands:"; + window.UI.pools.innerHTML = "Pools:"; + window.gameState.users.forEach(function (user) { + window.UI.users[user] = elementPlace("#users","User_"+user,"username","li"); + window.UI.users[user].innerText = user; }); + Object.keys(window.gameState.decks).forEach(function (deckID) { + var deck = window.gameState.decks[deckID]; + window.UI.decks[deckID] = elementPlace("#decks","Deck_"+deck.name,"deck","li"); + window.UI.decks[deckID].innerText = deck.name+":"+deck.size; + }); + Object.keys(window.gameState.hands).forEach(function (handID) { + var hand = window.gameState.hands[handID]; + window.UI.hands[handID] = elementPlace("#hands","Hand_"+hand.name,"hand","li"); + window.UI.hands[handID].innerText = hand.name; + window.UI.hands[handID].cards = elementPlace("#Hand_"+hand.name,hand.name+"_cards",null,"ol"); + hand.cards.forEach(function (card,index) { + window.UI.hands[handID].cards[index] = elementPlace("#"+hand.name+"_cards",null,"card","li"); + window.UI.hands[handID].cards[index].innerHTML = card; + }); + }); + Object.keys(window.gameState.pools).forEach(function (poolID) { + var pool = window.gameState.pools[poolID]; + window.UI.pools[poolID] = elementPlace("#pools","Pool_"+pool.name,"pool","li"); + window.UI.pools[poolID].innerText = pool.name+":"+pool.top; + }); + } function startGameSession() { window.gameSession = new WebSocket(server); gameSession.onmessage = function (event) { var message = JSON.parse(event.data); - if (message.state) { gameState = message.state; updateEvent(); } if (message.userID) { window.userID = message.userID; } if (message.message) { console.log(message.message); } - if (message.command) { - if ("requestState" == message.command) { - sendGameState(); + 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 ("join" == message.request) { window.gameSession.send('{"action":"join"}'); } + if ("update" == message.request) { window.gameSession.send('{"action":"update"}'); } + } + if (message.users) { window.gameState.users = message.users; updateEvent(); } + if (message.decks) { window.gameState.decks = message.decks; updateEvent(); } + if (message.pools) { window.gameState.pools = message.pools; updateEvent(); } + if (message.hands) { window.gameState.hands = message.hands; updateEvent(); } + if (message.action) { + if ("addCard" == message.action) { + window.gameState.hands[message.hand].cards.push(message.card); + updateEvent(); } } - if (message.request) { - if ("session" == message.request) { mytest.send('{"session":'+window.gameState.session+'}'); } - if ("user" == message.request) { mytest.send('{"user":'+window.gameState.user+'}'); } - if ("join" == message.request) { mytest.send('{"action":"join"}'); } - if ("update" == message.request) { mytest.send('{"action":"update"}'); } - } console.log(message); + }; - gameSession.onconnect = function () { - gameSession.send('{"type":"update","command":"requestState"}'); - }; + gameSession.onconnect = function () {}; gameSession.onclose = function (event) { console.log(event); }; } -elementPlace("body","menu",null,"div"); -buttonAdd("#menu","upload","Upload Deck", function () { - popupDialog("deckLoader","Select Deck definition File",true,inputDialog,{"inputType":"file"},function (f) { - var myFile = new FileReader(); - myFile.onload = function (file) { - // Probably validate the file somehow befor eating it - var ourFile = JSON.parse(file.target.result); - window.gameState.deck = []; - deckFromJSON(ourFile); - window.hand = []; - sendGameState(); - } - myFile.readAsText(f[0]); - }); -},null,"div"); -buttonAdd("#menu","add","Add Deck", function () { - popupDialog("deckLoader","Select Deck definition to add",true,inputDialog,{"inputType":"file"},function (f) { - var myFile = new FileReader(); - myFile.onload = function (file) { - var ourFile = JSON.parse(file.target.result); - deckFromJSON(ourFile); - sendGameState(); - } - myFile.readAsText(f[0]); -}); -}, null, "div"); -buttonAdd("#menu","shuffle", "Shuffle Deck", function () { - shuffleDeck(window.gameState.deck); - sendGameState(); -}, null, "div"); -buttonAdd("#menu","shuffleAll", "Shuffle Hand to Deck", function () { - window.gameState.deck = window.gameState.deck.concat(window.hand); - window.hand = []; - shuffleDeck(window.gameState.deck); - sendGameState(); -}, null, "div"); -buttonAdd("#menu","draw", "Draw Card", function () { - if (window.gameState.deck.length > 0) { - window.hand.unshift(window.gameState.deck.shift()); - sendGameState(); - } -}, null, "div"); +//elementPlace("body","menu",null,"div"); +//buttonAdd("#menu","upload","Upload Deck", function () { +// popupDialog("deckLoader","Select Deck definition File",true,inputDialog,{"inputType":"file"},function (f) { +// var myFile = new FileReader(); +// myFile.onload = function (file) { +// // Probably validate the file somehow befor eating it +// var ourFile = JSON.parse(file.target.result); +// window.gameState.deck = []; +// deckFromJSON(ourFile); +// window.hand = []; +// sendGameState(); +// } +// myFile.readAsText(f[0]); +// }); +//},null,"div"); +//buttonAdd("#menu","add","Add Deck", function () { +// popupDialog("deckLoader","Select Deck definition to add",true,inputDialog,{"inputType":"file"},function (f) { +// var myFile = new FileReader(); +// myFile.onload = function (file) { +// var ourFile = JSON.parse(file.target.result); +// deckFromJSON(ourFile); +// sendGameState(); +// } +// myFile.readAsText(f[0]); +//}); +//}, null, "div"); +//buttonAdd("#menu","shuffle", "Shuffle Deck", function () { +// shuffleDeck(window.gameState.deck); +// sendGameState(); +//}, null, "div"); +//buttonAdd("#menu","shuffleAll", "Shuffle Hand to Deck", function () { +// window.gameState.deck = window.gameState.deck.concat(window.hand); +// window.hand = []; +// shuffleDeck(window.gameState.deck); +// sendGameState(); +//}, null, "div"); +//buttonAdd("#menu","draw", "Draw Card", function () { +// if (window.gameState.deck.length > 0) { +// window.hand.unshift(window.gameState.deck.shift()); +// sendGameState(); +// } +//}, null, "div"); elementPlace("body","display",null,"div"); window.UI = {}; -window.UI.deck = elementPlace("#display","deck",null,"div"); -window.UI.hand = elementPlace("#display","hand",null,"ol"); +window.UI.users = elementPlace("#display","users",null,"ol"); +window.UI.decks = elementPlace("#display","decks",null,"ol"); +window.UI.hands = elementPlace("#display","hands",null,"ol"); +window.UI.pools = elementPlace("#display","pools",null,"ol"); + var parms = new URLSearchParams(window.location.search); -if (parms.get("s")) { - window.gameState.session = parms.get("s"); -} else { +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))) { @@ -113,7 +137,22 @@ if (parms.get("s")) { } 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(); } }