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 });
});