From eb5f15f366d06bb12b002e289e29d11b14996c8b Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Sun, 13 Mar 2022 14:39:55 -0700 Subject: [PATCH] Set empty strings to "" instead of undefined Signed-off-by: James Ketrenos --- client/src/Board.js | 8 +++-- client/src/Table.js | 46 +---------------------------- server/routes/games.js | 67 +++++++++++++++++++++++------------------- 3 files changed, 43 insertions(+), 78 deletions(-) diff --git a/client/src/Board.js b/client/src/Board.js index 2ab8c11..9e65369 100644 --- a/client/src/Board.js +++ b/client/src/Board.js @@ -1,8 +1,10 @@ -import React, { useEffect, useState, useContext, useRef, useMemo } from "react"; +import React, { useEffect, useState, useContext, useRef, useMemo, + useCallback } from "react"; import equal from "fast-deep-equal"; import { assetsPath, debounce } from "./Common.js"; import "./Board.css"; import { GlobalContext } from "./GlobalContext.js"; + const rows = [3, 4, 5, 4, 3, 2]; /* The final row of 2 is to place roads and corners */ const @@ -214,11 +216,11 @@ const Board = () => { >
; }; - const sendPlacement = (type, index) => { + const sendPlacement = useCallback((type, index) => { ws.send(JSON.stringify({ type, index })); - }; + }, [ws]); const Road = ({road}) => { const onClick = (event) => { diff --git a/client/src/Table.js b/client/src/Table.js index d86ea7d..97be7a4 100755 --- a/client/src/Table.js +++ b/client/src/Table.js @@ -47,15 +47,7 @@ function withRouter(Component) { } /* end of withRouter polyfill */ -const Development = ({table, type, card, onClick}) => { - return ( -
- ); -}; + const StartButton = ({ table, game }) => { const startClick = (event) => { @@ -67,42 +59,6 @@ const StartButton = ({ table, game }) => { ); }; -const PlayerName = ({table, game}) => { - const [name, setName] = useState(game.name ? game.name : ""); - - const nameChange = (event) => { - setName(event.target.value); - } - - const sendName = () => { - if (name !== game.name) { - table.setPlayerName(name); - } else { - table.setError(""); - table.setState({ pickName: false }); - } - } - - const nameKeyPress = (event) => { - if (event.key === "Enter") { - sendName(); - } - } - - return ( - - - - - ); -}; - /* This needs to take in a mechanism to declare the * player's active item in the game */ const Players = ({ table, game }) => { diff --git a/server/routes/games.js b/server/routes/games.js index 4a0a789..10995b7 100755 --- a/server/routes/games.js +++ b/server/routes/games.js @@ -18,7 +18,7 @@ const debug = { audio: false, get: true, set: true, - update: false//true + update: true }; let gameDB; @@ -149,17 +149,6 @@ const processTies = (players) => { return !ties; } - -const playerFromName = (game, name) => { - for (let color in game.players) { - if (game.players[color].name === name) { - return game.players[color]; - } - } - return undefined; -}; - - const processGameOrder = (game, player, dice) => { if (player.orderRoll) { return `You have already rolled for game order and are not in a tie.`; @@ -433,7 +422,8 @@ const newPlayer = (color) => { brick: 0, army: 0, development: [], - color + color: color, + name: "" }; } @@ -446,8 +436,8 @@ const getSession = (game, id) => { if (!(id in game.sessions)) { game.sessions[id] = { id: `[${id.substring(0, 8)}]`, - name: undefined, - color: undefined, + name: '', + color: '', player: undefined, lastActive: Date.now(), live: true @@ -544,7 +534,7 @@ const loadGame = async (id) => { session.player.status = 'Active'; session.player.live = false; } else { - session.color = undefined; + session.color = ''; session.player = undefined; } @@ -575,7 +565,6 @@ const canGiveBuilding = (game) => { if (game.turn.actions && game.turn.actions.length !== 0) { return `Admin cannot give a building while other actions in play: ${game.turn.actions.join(', ')}.` } - return undefined; } const adminActions = (game, action, value) => { @@ -722,9 +711,7 @@ const adminActions = (game, action, value) => { addChatMessage(game, null, `Admin rolling ${dice.join(', ')} for ${game.turn.name}.`); switch (game.state) { case 'game-order': - message = `${game.turn.name} rolled ${dice[0]}.`; - addActivity(game, session, message); - message = undefined; + addActivity(game, session, `${game.turn.name} rolled ${dice[0]}.`); processGameOrder(game, session.player, dice[0]); break; case 'normal': @@ -769,7 +756,7 @@ const adminActions = (game, action, value) => { clearPlayer(player); session.player = undefined; } - session.color = undefined; + session.color = ""; return; } return `Unable to find active session for ${colorToWord(color)} (${value})`; @@ -889,7 +876,7 @@ const colorToWord = (color) => { case 'B': return 'blue'; case 'R': return 'red'; default: - return undefined; + return ''; } } @@ -935,7 +922,7 @@ const setPlayerColor = (game, session, color) => { /* Deselect currently active player for this session */ clearPlayer(session.player); session.player = undefined; - session.color = undefined; + session.color = ''; active--; /* If the player is not selecting a color, then return */ @@ -950,7 +937,7 @@ const setPlayerColor = (game, session, color) => { } sendUpdateToPlayer(session, { name: session.name, - color: undefined, + color: '', live: session.live, private: session.player }); @@ -1015,7 +1002,7 @@ const addActivity = (game, session, message) => { if (game.activities.length && game.activities[game.activities.length - 1].date === date) { date++; } - game.activities.push({ color: session ? session.color : undefined, message, date }); + game.activities.push({ color: session ? session.color : '', message, date }); } const addChatMessage = (game, session, message) => { @@ -2454,7 +2441,6 @@ const placeRoad = (game, session, index) => { longestRoad: game.longestRoad, longestRoadLength: game.longestRoadLength }); - } const discard = (game, session, discards) => { @@ -3003,12 +2989,23 @@ const sendGameToPlayers = (game) => { }; const sendUpdateToPlayers = async (game, update) => { + /* Ensure clearing of a field actually gets sent by setting + * undefined to 'false' + */ + for (let key in update) { + if (update[key] === undefined) { + update[key] = false; + } + } + if (debug.update) { console.log(`[ all ]: -> sendUpdateToPlayers - `, update); } else { const keys = Object.getOwnPropertyNames(update); console.log(`[ all ]: -> sendUpdateToPlayers - ${keys.join(',')}`); } + + const message = JSON.stringify({ type: 'game-update', update @@ -3024,12 +3021,23 @@ const sendUpdateToPlayers = async (game, update) => { } const sendUpdateToPlayer = async (session, update) => { + + /* Ensure clearing of a field actually gets sent by setting + * undefined to 'false' + */ + for (let key in update) { + if (update[key] === undefined) { + update[key] = false; + } + } + if (debug.update) { console.log(`${session.id}: -> sendUpdateToPlayer:${getName(session)} - `, update); } else { const keys = Object.getOwnPropertyNames(update); console.log(`${session.id}: -> sendUpdateToPlayer:${getName(session)} - ${keys.join(',')}`); } + const message = JSON.stringify({ type: 'game-update', update @@ -3689,12 +3697,11 @@ const resetGame = (game) => { signature: game.signature, players: game.players, stolen: {}, - longestRoad: undefined, + longestRoad: '', longestRoadLength: 0, - largestArmy: undefined, + largestArmy: '', largestArmySize: 0, winner: undefined, - longestRoad: undefined }); /* Populate the game corner and road placement data as cleared */ @@ -3906,7 +3913,7 @@ router.get("/", (req, res/*, next*/) => { playerId = req.cookies.player; } - console.log(`[${req.cookies.player.substring(0, 8)}]: Browser hand-shake has started.`); + console.log(`[${req.cookies.player.substring(0, 8)}]: Browser hand-shake achieved.`); return res.status(200).send({ player: req.cookies.player }); });