This allows clients to display scores for all players in a game, (even if
some players happen to not be active anymore).
To make the state consistent, we also send the active bit in the JSON
info for any player.
This commit fixes up the Tic-tac-toe tests in the test suite to now
expect this active property in the info sent from the server.
info_json() {
return JSON.stringify({
id: this.id,
info_json() {
return JSON.stringify({
id: this.id,
name: this.name,
team: this.team.name,
score: this.score
name: this.name,
team: this.team.name,
score: this.score
response.write(`event: player-info\ndata: ${player.info_json()}\n\n`);
/* As well as player-enter events for all existing, active players. */
response.write(`event: player-info\ndata: ${player.info_json()}\n\n`);
/* As well as player-enter events for all existing, active players. */
- this.players.filter(p => p !== player && p.active).forEach(p => {
+ this.players.filter(
+ p => (p !== player
+ && (p.active || p.score))).forEach(p => {
response.write(`event: player-enter\ndata: ${p.info_json()}\n\n`);
});
response.write(`event: player-enter\ndata: ${p.info_json()}\n\n`);
});
TEST "Verify player-info event reports 'curl' name"
result=$(tictactoe_player_info)
TEST "Verify player-info event reports 'curl' name"
result=$(tictactoe_player_info)
-test "$result" = 'data: {"id":1,"name":"curl","team":""}'
+test "$result" = 'data: {"id":1,"active":true,"name":"curl","team":""}'
TEST_END
TEST_SUBSECTION "Tic Tac Toe /player"
TEST_END
TEST_SUBSECTION "Tic Tac Toe /player"
TEST "Change name to 'newname'"
tictactoe_player_name newname
result=$(tictactoe_player_info)
TEST "Change name to 'newname'"
tictactoe_player_name newname
result=$(tictactoe_player_info)
-test "$result" = 'data: {"id":1,"name":"newname","team":""}'
+test "$result" = 'data: {"id":1,"active":true,"name":"newname","team":""}'
TEST_END
TEST "Change team to 'X'"
tictactoe_player_team X
result=$(tictactoe_player_info)
TEST_END
TEST "Change team to 'X'"
tictactoe_player_team X
result=$(tictactoe_player_info)
-test "$result" = 'data: {"id":1,"name":"newname","team":"X"}'
+test "$result" = 'data: {"id":1,"active":true,"name":"newname","team":"X"}'
TEST_END
TEST "Change team to 'O'"
tictactoe_player_team O
result=$(tictactoe_player_info)
TEST_END
TEST "Change team to 'O'"
tictactoe_player_team O
result=$(tictactoe_player_info)
-test "$result" = 'data: {"id":1,"name":"newname","team":"O"}'
+test "$result" = 'data: {"id":1,"active":true,"name":"newname","team":"O"}'
TEST_END
TEST "Verify cannot change team to 'Z'"
tictactoe_player_team Z
result=$(tictactoe_player_info)
TEST_END
TEST "Verify cannot change team to 'Z'"
tictactoe_player_team Z
result=$(tictactoe_player_info)
-test "$result" = 'data: {"id":1,"name":"newname","team":"O"}'
+test "$result" = 'data: {"id":1,"active":true,"name":"newname","team":"O"}'
TEST_END
TEST "Leave current team"
tictactoe_player_team ""
result=$(tictactoe_player_info)
TEST_END
TEST "Leave current team"
tictactoe_player_team ""
result=$(tictactoe_player_info)
-test "$result" = 'data: {"id":1,"name":"newname","team":""}'
+test "$result" = 'data: {"id":1,"active":true,"name":"newname","team":""}'
TEST_END
TEST_SUBSECTION "Tic Tac Toe /move"
TEST_END
TEST_SUBSECTION "Tic Tac Toe /move"