]> git.cworth.org Git - empires-server/commitdiff
Add named parameters for the two idle timer controls
authorCarl Worth <cworth@cworth.org>
Thu, 18 Jun 2020 14:57:27 +0000 (07:57 -0700)
committerCarl Worth <cworth@cworth.org>
Fri, 26 Jun 2020 14:37:59 +0000 (07:37 -0700)
These controls may need some tweaking, so it's better to have some
defined names for them along with some carefully specified semantics.

Also, we plan to extend the current idle detection from the answering
phased to the judging phase as well, so it will be nice to be able to
reuse these parameters there too.

empathy.js

index e03f247f9e207a1cc612ea2ad25c3f78d17982ac..354e3fac2e71838a8753ac71526af40363095782 100644 (file)
@@ -3,6 +3,24 @@ const Game = require("./game.js");
 
 const MAX_PROMPT_ITEMS = 20;
 
+/* This time parameter specifies a time period in which a phase will
+ * not be considered idle in any circumstance. That is, this should be
+ * a reasonable time in which any "active" player should have at least
+ * started interacting with the current phase.
+ *
+ * Specified in seconds
+ */
+const PHASE_MINIMUM_TIME = 30;
+
+/* This parameter gives the amount of time that the game will wait to
+ * see activity from pending players. If this amount of time passes
+ * with no activity from any of them, the server will emit an "idle"
+ * event which will let clients issue a vote to end the current phase.
+ *
+ * Specified in seconds
+ */
+const PHASE_IDLE_TIMEOUT = 10;
+
 class Empathy extends Game {
   constructor(id) {
     super(id);
@@ -160,7 +178,7 @@ class Empathy extends Game {
      * players_answering list before anyone else even got in.
      */
     if (this.state.players_answering.size === 0 &&
-        ((Date.now() - this.answering_start_time_ms) / 1000) > 30)
+        ((Date.now() - this.answering_start_time_ms) / 1000) > PHASE_MINIMUM_TIME)
     {
       this.broadcast_event_object('answering-idle', true);
     }
@@ -187,7 +205,7 @@ class Empathy extends Game {
       this.answering_idle_timer = setTimeout(() => {
         this.state_answering_idle = true;
         this.broadcast_event_object('answering-idle', true);
-      }, 10 * 1000);
+      }, PHASE_IDLE_TIMEOUT * 1000);
     }
 
     if (this.answering_start_time_ms === 0)