From d9b86b16e70ba5acbeb09cf553e45e675667e1b1 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Thu, 18 Jul 2019 16:19:48 +0200
Subject: [PATCH] Steps toward observers in a live game

---
 client/src/views/Hall.vue | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/client/src/views/Hall.vue b/client/src/views/Hall.vue
index d0cfdd17..b6cac488 100644
--- a/client/src/views/Hall.vue
+++ b/client/src/views/Hall.vue
@@ -176,15 +176,12 @@ export default {
     showGame: function(g) {
       // NOTE: we are an observer, since only games I don't play are shown here
       // ==> Moves sent by connected remote player(s) if live game
-      
-// TODO: this doesn't work: choose a SID at random
-      // --> do we have players' names ?
-
-      let url = "/" + g.id;
+      let url = "/game/" + g.id;
       if (g.type == "live")
       {
-        const sids = g.players.map(p => p.sid).join(",");
-        url += "?sids=" + sids;
+        const remotes = g.players.filter(p => this.people.some(pl => pl.sid == p.sid));
+        const rIdx = (remotes.length == 1 ? 0 : Math.floor(Math.random()*2));
+        url += "?rid=" + remotes[rIdx].sid;
       }
       this.$router.push(url);
     },
@@ -325,11 +322,14 @@ export default {
         {
           // Receive game from some player (+sid)
           // NOTE: it may be correspondance (if newgame while we are connected)
-          let newGame = data.game;
-          newGame.type = this.classifyObject(data.game);
-          newGame.rid = data.from;
-          newGame.score = "*";
-          this.games.push(newGame);
+          if (!this.games.some(g => g.id == data.game.id)) //ignore duplicates
+          {
+            let newGame = data.game;
+            newGame.type = this.classifyObject(data.game);
+            newGame.rid = data.from;
+            newGame.score = "*";
+            this.games.push(newGame);
+          }
           break;
         }
         case "newgame":
@@ -542,9 +542,3 @@ export default {
 <style lang="sass">
 // TODO
 </style>
-
-<!--
-// TODO:
-// Remove duplicates if several players of one game send their game info (Hall)
-// When click on it, assign a random rid among online players (max. 4).
--->
-- 
2.44.0