]> git.cworth.org Git - empires-server/commitdiff
game: Fix reactivation of an existing player to be fully active
authorCarl Worth <cworth@cworth.org>
Sat, 27 Jun 2020 16:45:22 +0000 (09:45 -0700)
committerCarl Worth <cworth@cworth.org>
Sat, 27 Jun 2020 16:45:22 +0000 (09:45 -0700)
To do this, we have to set the player's active bit to true, then we
increment the server's count of active players, and finally we
broadcast to all active players that this player has entered the game
again.

This commit fixes the bug described in the previous commit, (so that
the entire test suite passes once again).

game.js

diff --git a/game.js b/game.js
index 8ea26e34084d140a84d51454cfdaf2c58846bba6..f244eaa32ef7901c1f5eb484ec3626906408334f 100644 (file)
--- a/game.js
+++ b/game.js
@@ -166,6 +166,15 @@ class Game {
     const existing = this.players_by_session[session.id];
     if (existing) {
       existing.add_connection(connection);
+      if (! existing.active) {
+        /* If we're re-activating a previously idled player, then we
+         * need to alert everyone that this player is now back.
+         */
+        existing.active = true;
+        this.active_players++;
+        const player_data = JSON.stringify({ id: existing.id, name: existing.name });
+        this.broadcast_event("player-enter", player_data);
+      }
       return existing;
     }