From 239210c6be9b15e3ee31cc28d4e7e5f83ababd89 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 27 Jun 2020 14:55:46 -0700 Subject: [PATCH] Fix JSON stringification of game-state at game reset The initial stream of game state upon player connection was already careful to use a subsitute function for correct stringification of Set objects, but the streaming at game reset was not. I didn't notice this for a while because the client always reset its own state data before applying what was streamed from the server. The application of the server-provided state would fail, (encountering an empty object instead of an empty array), but since the client state was already reset anyway, that wasn't noticed, (as long as the failure only happened after the prompt data, for example). I uncovered the bug with a recent client fix to not display the category-input form until the game-state was received, (and the Boolean to trigger that display happened only after the portions of the game state that were failing due to the bug described above). --- empathy.js | 2 +- game.js | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/empathy.js b/empathy.js index 56ac53f..3e32a8b 100644 --- a/empathy.js +++ b/empathy.js @@ -97,7 +97,7 @@ class Empathy extends Game { this.judging_start_time_ms = 0; this.equivalencies = {}; - this.broadcast_event_object('game-state', this.state); + this.broadcast_event('game-state', this.game_state_json()); } add_prompt(items, prompt_string) { diff --git a/game.js b/game.js index f9e18cb..55145bb 100644 --- a/game.js +++ b/game.js @@ -258,6 +258,10 @@ class Game { this.broadcast_event(type, JSON.stringify(obj)); } + game_state_json() { + return JSON.stringify(this.state, stringify_replacer); + } + handle_events(request, response) { /* These headers will keep the connection open so we can stream events. */ const headers = { @@ -293,8 +297,7 @@ class Game { /* Finally, if this game class has a "state" property, stream that * current state to the client. */ if (this.state) { - const state_json = JSON.stringify(this.state, stringify_replacer); - response.write(`event: game-state\ndata: ${state_json}\n\n`); + response.write(`event: game-state\ndata: ${this.game_state_json()}\n\n`); } } -- 2.43.0