From c748592a7db27adebd48b45970b5f0ffbedb3300 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sun, 14 Jun 2020 14:55:12 -0700 Subject: [PATCH] Fix game-state object to include players judging and answering Previously, these were always appearing as empty objects in the JSON results that we streamed from the server in the game-state object because JSON.stringify doesn't natively know how to serialize a Set object. Here, we provide a replacer function that serializes a Set object as an array. --- game.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/game.js b/game.js index 86a0e70..5a49b6b 100644 --- a/game.js +++ b/game.js @@ -42,6 +42,16 @@ class Player { } } +/* This replacer function allows for JSON.stringify to give results + * for objects of various types that are used in game state. + */ +function stringify_replacer(key, value) { + if (typeof value === 'object' && value instanceof Set) { + return [...value]; + } + return value; +} + /* Base class providing common code for game engine implementations. */ class Game { constructor(id) { @@ -264,7 +274,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); + const state_json = JSON.stringify(this.state, stringify_replacer); response.write(`event: game-state\ndata: ${state_json}\n\n`); } } -- 2.43.0