]> git.cworth.org Git - empires-server/commitdiff
Add "/answering" and "/judging" endpoints
authorCarl Worth <cworth@cworth.org>
Sun, 14 Jun 2020 18:18:18 +0000 (11:18 -0700)
committerCarl Worth <cworth@cworth.org>
Thu, 25 Jun 2020 16:16:04 +0000 (09:16 -0700)
These are set up so that clients can report when they are doing any
answering or judging. The server then passes this along so that other
clients can be aware of what's going on.

empathy.js

index 7e53486d13dcd25b0c72217e7a29960de5fdd992..ae400a6009709deceef876caa71343a1957a4d1a 100644 (file)
@@ -142,6 +142,25 @@ class Empathy extends Game {
     return { valid: true };
   }
 
+  receive_answering(prompt_id, session_id) {
+    const player = this.players_by_session[session_id];
+    if (! player)
+      return { valid: false, message: "Player not found" };
+
+    const prompt = this.state.prompts.find(p => p.id === prompt_id);
+    if (! prompt)
+      return { valid: false, message: "Prompt not found" };
+
+    if (prompt !== this.state.active_prompt)
+      return { valid: false, message: "Prompt no longer active" };
+
+    /* Notify all players that this player is actively answering. */
+    this.state.players_answering.add(player.name);
+    this.broadcast_event_object('player-answering', player.name);
+
+    return { valid: true };
+  }
+
   /* Returns true if vote toggled, false for player or prompt not found */
   toggle_end_answers(prompt_id, session_id) {
     const player = this.players_by_session[session_id];
@@ -232,6 +251,25 @@ class Empathy extends Game {
     return { valid: true };
   }
 
+  receive_judging(prompt_id, session_id) {
+    const player = this.players_by_session[session_id];
+    if (! player)
+      return { valid: false, message: "Player not found" };
+
+    const prompt = this.state.prompts.find(p => p.id === prompt_id);
+    if (! prompt)
+      return { valid: false, message: "Prompt not found" };
+
+    if (prompt !== this.state.active_prompt)
+      return { valid: false, message: "Prompt no longer active" };
+
+    /* Notify all players this this player is actively judging. */
+    this.state.players_judging.add(player.name);
+    this.broadcast_event_object('player-judging', player.name);
+
+    return { valid: true };
+  }
+
   /* Returns true if vote toggled, false for player or prompt not found */
   toggle_end_judging(prompt_id, session_id) {
     const player = this.players_by_session[session_id];
@@ -426,6 +464,15 @@ router.post('/answer/:prompt_id([0-9]+)', (request, response) => {
   response.json(result);
 });
 
+router.post('/answering/:prompt_id([0-9]+)', (request, response) => {
+  const game = request.game;
+  const prompt_id = parseInt(request.params.prompt_id, 10);
+
+  const result = game.receive_answering(prompt_id,
+                                        request.session.id);
+  response.json(result);
+});
+
 router.post('/end-answers/:prompt_id([0-9]+)', (request, response) => {
   const game = request.game;
   const prompt_id = parseInt(request.params.prompt_id, 10);
@@ -449,6 +496,15 @@ router.post('/judged/:prompt_id([0-9]+)', (request, response) => {
   response.json(result);
 });
 
+router.post('/judging/:prompt_id([0-9]+)', (request, response) => {
+  const game = request.game;
+  const prompt_id = parseInt(request.params.prompt_id, 10);
+
+  const result = game.receive_judging(prompt_id,
+                                      request.session.id);
+  response.json(result);
+});
+
 router.post('/end-judging/:prompt_id([0-9]+)', (request, response) => {
   const game = request.game;
   const prompt_id = parseInt(request.params.prompt_id, 10);