diff --git a/server/routes/games.js b/server/routes/games.js index 0197443..ddc2bd8 100755 --- a/server/routes/games.js +++ b/server/routes/games.js @@ -15,6 +15,13 @@ const MAX_SETTLEMENTS = 5; const MAX_CITIES = 4; const MAX_ROADS = 15; +const debug = { + audio: false, + get: true, + set: true, + update: false +}; + let gameDB; require("../db/games").then(function(db) { @@ -794,10 +801,10 @@ const setPlayerName = (game, session, name) => { /* Update the session object from tmp, but retain websocket * from active session */ Object.assign(session, tmp, { ws: session.ws }); - console.log(`${name} has been reallocated to a new session.`); + console.log(`${info}: ${name} has been reallocated to a new session.`); delete game.sessions[id]; } else { - return `${name} is already taken and has been active in the last minute.`; + return `${info}: ${name} is already taken and has been active in the last minute.`; } } } @@ -841,12 +848,12 @@ const setPlayerName = (game, session, name) => { if (session.ws && hasAudio) { join(audio[game.id], session, game.id); } - console.log(message); + console.log(`${info}: ${message}`); addChatMessage(game, null, message); /* Rebuild the unselected list */ if (!session.color) { - console.log(`Adding ${session.name} to the unselected`); + console.log(`${info}: Adding ${session.name} to the unselected`); } game.unselected = []; for (let id in game.sessions) { @@ -855,20 +862,17 @@ const setPlayerName = (game, session, name) => { } } + sendUpdateToPlayer(session, { + name: session.name, + color: undefined, + live: session.live, + player: session.player + }); sendUpdateToPlayers(game, { players: game.players, unselected: getFilteredUnselected(game), chat: game.chat }); - session.ws.send(JSON.stringify({ - type: 'game-update', - update: { - name: session.name, - color: undefined, - live: session.live, - player: session.player - } - })); } const colorToWord = (color) => { @@ -937,21 +941,18 @@ const setPlayerColor = (game, session, color) => { addChatMessage(game, null, `There are no longer enough players to start a game.`); } + sendUpdateToPlayer(session, { + name: session.name, + color: undefined, + live: session.live, + player: session.player + }); sendUpdateToPlayers(game, { active: game.active, unselected: getFilteredUnselected(game), players: game.players, chat: game.chat }); - session.ws.send(JSON.stringify({ - type: 'game-update', - update: { - name: session.name, - color: undefined, - live: session.live, - player: session.player - } - })); return; } } @@ -993,16 +994,13 @@ const setPlayerColor = (game, session, color) => { update.active = game.active; } + sendUpdateToPlayer(session, { + name: session.name, + color: session.color, + live: session.live, + player: session.player + }); sendUpdateToPlayers(game, update); - session.ws.send(JSON.stringify({ - type: 'game-update', - update: { - name: session.name, - color: session.color, - live: session.live, - player: session.player - } - })); }; const addActivity = (game, session, message) => { @@ -2761,11 +2759,12 @@ const join = (peers, session, id) => { const ws = session.ws; if (!session.name) { - console.error(`${session.id} - join - No name set yet. Audio not available.`); + console.error(`${session.id}: <- join - No name set yet. Audio not available.`); return; } - console.log(`${session.id} - join - ${session.name}`); + console.log(`${session.id}: <- join - ${session.name}`); + console.log(`${all}: -> addPeer - ${session.name}`); if (session.name in peers) { console.log(`${session.id}:${session.name} - Already joined to Audio.`); @@ -2788,20 +2787,23 @@ const join = (peers, session, id) => { peers[session.name] = ws; }; -const getName = (session) => { - return session.name ? session.name : "Unnamed"; -} const part = (peers, session, id) => { const ws = session.ws; - console.log(`${session.id}:${getName(session)} - Audio part.`); - - if (!(session.name in peers)) { - console.log(`${session.id}:${getName(session)} - Does not exist in game audio.`); + if (!session.name) { + console.error(`${session.id}: <- part - No name set yet. Audio not available.`); return; } + if (!(session.name in peers)) { + console.log(`${session.id}: <- ${session.name} - Does not exist in game audio.`); + return; + } + + console.log(`${session.id}: <- ${session.name} - Audio part.`); + console.log(`${all}: -> removePeer - ${session.name}`); + delete peers[session.name]; /* Remove this peer from all other peers, and remove each @@ -2818,6 +2820,11 @@ const part = (peers, session, id) => { } }; + +const getName = (session) => { + return session.name ? session.name : "Unnamed"; +} + const saveGame = async (game) => { /* Shallow copy game, filling its sessions with a shallow copy of sessions so we can then * delete the player field from them */ @@ -2876,10 +2883,32 @@ const departLobby = (game, session, color) => { sendUpdateToPlayers(game, update); } +const all = `[ all ]`; +const info = `[ info ]`; +const todo = `[ todo ]`; + +const sendGameToPlayers = (game) => { + console.log(`${all}: -> ${game.id} sendGamePlayers - full game`); + + for (let key in game.sessions) { + const _session = game.sessions[key]; + if (!_session.ws) { + continue; + } + _session.ws.send(JSON.stringify({ + type: 'game-update', + update: getFilteredGameForPlayer(game, _session) + })); + } +}; const sendUpdateToPlayers = async (game, update) => { - const keys = Object.getOwnPropertyNames(update); - console.log(`[ all ]:${game.id} - sendUpdateToPlayers - ${keys.join(',')}`); + if (debug.update) { + console.log(`[ all ]: -> ${game.id} sendUpdateToPlayers - `, update); + } else { + const keys = Object.getOwnPropertyNames(update); + console.log(`[ all ]: -> ${game.id} sendUpdateToPlayers - ${keys.join(',')}`); + } const message = JSON.stringify({ type: 'game-update', update @@ -2894,6 +2923,21 @@ const sendUpdateToPlayers = async (game, update) => { await saveGame(game); } + +const sendUpdateToPlayer = async (session, update) => { + if (debug.update) { + console.log(`${session.id}: -> sendUpdateToPlayer - `, update); + } else { + const keys = Object.getOwnPropertyNames(update); + console.log(`${session.id}: -> sendUpdateToPlayer - ${keys.join(',')}`); + } + const message = JSON.stringify({ + type: 'game-update', + update + }); + session.ws.send(message); +} + const getFilteredUnselected = (game) => { if (!game.unselected) { return []; @@ -2929,19 +2973,6 @@ const parseChatCommands = (game, message) => { } }; -const sendGameToPlayers = (game) => { - for (let key in game.sessions) { - const _session = game.sessions[key]; - if (!_session.ws) { - continue; - } - _session.ws.send(JSON.stringify({ - type: 'game-update', - update: getFilteredGameForPlayer(game, _session) - })); - } -}; - const sendError = (session, error) => { session.ws.send(JSON.stringify({ type: 'error', error })); } @@ -3042,12 +3073,12 @@ router.ws("/ws/:id", async (ws, req) => { case 'relayICECandidate': { if (!(id in audio)) { - console.error(`${session.id}:${id} - relayICECandidate - Does not have Audio`); + console.error(`${session.id}:${id} <- relayICECandidate - Does not have Audio`); return; } const { peer_id, ice_candidate } = data.config; - console.log(`${short}:${id} - relayICECandidate ${getName(session)} to ${peer_id}`, + if (debug.audio) console.log(`${short}:${id} <- relayICECandidate ${getName(session)} to ${peer_id}`, ice_candidate); message = JSON.stringify({ @@ -3066,7 +3097,7 @@ router.ws("/ws/:id", async (ws, req) => { return; } const { peer_id, session_description } = data.config; - console.log(`${short}:${id} - relaySessionDescription ${getName(session)} to ${peer_id}`, + if (debug.audio) console.log(`${short}:${id} - relaySessionDescription ${getName(session)} to ${peer_id}`, session_description); message = JSON.stringify({ type: 'sessionDescription', @@ -3083,15 +3114,11 @@ router.ws("/ws/:id", async (ws, req) => { case 'game-update': console.log(`${short}:${id}:${getName(session)} - full game update.`); - message = JSON.stringify({ - type: 'game-update', - update: getFilteredGameForPlayer(game, session) - }); - session.ws.send(message); + sendUpdateToPlayer(session, getFilteredGameForPlayer(game, session)); break; case 'player-name': - console.log(`${short}:${id}:${getName(session)} - setPlayerName - ${data.name}`) + console.log(`${short}: <- ${id}:${getName(session)} - setPlayerName - ${data.name}`) error = setPlayerName(game, session, data.name); if (error) { sendError(session, error); @@ -3101,7 +3128,7 @@ router.ws("/ws/:id", async (ws, req) => { break; case 'set': - console.log(`${short}:${id}:${getName(session)} - ${data.type} ${data.field} = ${data.value}`); + console.log(`${short}: <- ${id}:${getName(session)} - ${data.type} ${data.field} = ${data.value}`); switch (data.field) { case 'state': warning = setGameState(game, session, data.value); @@ -3127,7 +3154,7 @@ router.ws("/ws/:id", async (ws, req) => { break; case 'get': - console.log(`${short}:${id}:${getName(session)} - ${data.type} ${data.fields.join(',')}`); + console.log(`${short}: <- ${id}:${getName(session)} - ${data.type} ${data.fields.join(',')}`); update = {}; data.fields.forEach((field) => { switch (field) { @@ -3164,13 +3191,7 @@ router.ws("/ws/:id", async (ws, req) => { break; } }); - console.log(`${short}:${id} - sending update: ` + - Object.getOwnPropertyNames(update).join(',')); - message = JSON.stringify({ - type: 'game-update', - update - }); - session.ws.send(message); + sendUpdateToPlayer(session, update); break; case 'chat': @@ -3315,10 +3336,7 @@ const sendGameToSession = (session, reducedSessions, game, reducedGame, error, r console.error(`No WebSocket connection to ${session.name}`); } else { console.log(`Sending update to ${session.id}:${session.name ? session.name : 'Unnamed'}`); - session.ws.send(JSON.stringify({ - type: 'game-update', - update: playerGame - })); + sendUpdateToPlayer(session, playerGame); } } } else { @@ -3480,7 +3498,7 @@ const getFilteredGameForPlayer = (game, session) => { } }); - console.log('TODO: Move game win state to card play section'); + console.log('${todo}: Move game win state to card play section'); if (!game.winner && (player.points >= 10 && session.color === key)) { game.winner = key; game.state = 'winner';