Attempt to robustify identity detection at loading (no more temporary anonymous)
authorBenjamin Auder <benjamin.auder@somewhere>
Wed, 4 Mar 2020 18:19:52 +0000 (19:19 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Wed, 4 Mar 2020 18:19:52 +0000 (19:19 +0100)
TODO
client/src/components/BaseGame.vue
client/src/views/Game.vue
client/src/views/Hall.vue

diff --git a/TODO b/TODO
index 9c74534..3b8b651 100644 (file)
--- a/TODO
+++ b/TODO
@@ -11,6 +11,10 @@ Saw once a "double challenge" bug, one anonymous and a second one logged
 Both were asked a challenge probably, and both challenges added as different ones.
 => would probably be solved by waiting for identity before adding people to people array
 
+Color bug
+anonymous on game name but username OK in chat
+game not showing on "live games" ... ?
+
 # New variants
 8-pieces https://www.youtube.com/watch?v=XZ8K02Da7Ps&list=PLRyjH8DPuzTBiym6lA0r84P8N0HnTtZyN&index=6&t=0s
 https://www.chessvariants.com/rules/8-piece-chess
index 4af4e15..0c20b0b 100644 (file)
@@ -284,6 +284,9 @@ export default {
       let movingPiece = document.querySelector(
         "#" + getSquareId(move.start) + " > img.piece"
       );
+      // For some unknown reasons Opera get "movingPiece == null" error
+      // TOOO: is it calling 'animate()' twice ? One extra time ?
+      if (!movingPiece) return;
       // HACK for animation (with positive translate, image slides "under background")
       // Possible improvement: just alter squares on the piece's way...
       const squares = document.getElementsByClassName("board");
index 5471a3f..8f49c5d 100644 (file)
@@ -14,10 +14,10 @@ main
         span {{ Object.keys(people).length + " " + st.tr["participant(s):"] }} 
         span(
           v-for="p in Object.values(people)"
-          v-if="!!p.name"
+          v-if="p.name"
         )
           | {{ p.name }} 
-        span.anonymous(v-if="Object.values(people).some(p => !p.name)")
+        span.anonymous(v-if="Object.values(people).some(p => !p.name && p.id === 0)")
           | + @nonymous
       Chat(
         :players="game.players"
@@ -240,12 +240,11 @@ export default {
       switch (data.code) {
         case "pollclients":
           data.sockIds.forEach(sid => {
-            this.$set(this.people, sid, { id: 0, name: "" });
             if (sid != this.st.user.sid) {
               this.send("askidentity", { target: sid });
               // Ask potentially missed last state, if opponent and I play
               if (
-                !!this.game.mycolor &&
+                this.game.mycolor &&
                 this.game.type == "live" &&
                 this.game.score == "*" &&
                 this.game.players.some(p => p.sid == sid)
@@ -256,10 +255,7 @@ export default {
           });
           break;
         case "connect":
-          if (!this.people[data.from])
-            // TODO: people array should be init only after identity is known
-            this.$set(this.people, data.from, { name: "", id: 0 });
-          if (!this.people[data.from].name) {
+          if (!this.people[data.from]) {
             this.newConnect[data.from] = true; //for self multi-connects tests
             this.send("askidentity", { target: data.from });
           }
@@ -267,8 +263,7 @@ export default {
         case "disconnect":
           this.$delete(this.people, data.from);
           break;
-        case "mconnect":
-        {
+        case "mconnect": {
           // TODO: from MyGames page : send mconnect message with the list of gid (live and corr)
           // Either me (another tab) or opponent
           const sid = data.from;
@@ -290,7 +285,7 @@ export default {
           alert(this.st.tr["New connexion detected: tab now offline"]);
           break;
         case "askidentity": {
-          // Request for identification (TODO: anonymous shouldn't need to reply)
+          // Request for identification
           const me = {
             // Decompose to avoid revealing email
             name: this.st.user.name,
@@ -301,8 +296,8 @@ export default {
           break;
         }
         case "identity": {
-          // TODO: init people array here.
           const user = data.data;
+          this.$set(this.people, user.sid, { name: user.name, id: user.id });
           if (user.name) {
             // If I multi-connect, kill current connexion if no mark (I'm older)
             if (
@@ -316,13 +311,6 @@ export default {
                 this.killed[this.st.user.sid] = true;
               }
             }
-            if (user.sid != this.st.user.sid) {
-              //I already know my identity...
-              this.$set(this.people, user.sid, {
-                id: user.id,
-                name: user.name
-              });
-            }
           }
           delete this.newConnect[user.sid];
           break;
index 469d46b..1031e49 100644 (file)
@@ -77,7 +77,7 @@ main
       button(@click="newChallenge()") {{ st.tr["Send challenge"] }}
   input#modalPeople.modal(
     type="checkbox"
-    @click="resetChatColor()"
+    @click="resetSocialColor()"
   )
   div#peopleWrap(
     role="dialog"
@@ -89,7 +89,7 @@ main
         #players
           p(
             v-for="sid in Object.keys(people)"
-            v-if="!!people[sid].name"
+            v-if="people[sid].name"
           )
             span {{ people[sid].name }}
             button.player-action(
@@ -216,7 +216,8 @@ export default {
     anonymousCount: function() {
       let count = 0;
       Object.values(this.people).forEach(p => {
-        count += !p.name ? 1 : 0;
+        // Do not cound people who did not send their identity yet:
+        count += (!p.name && p.id === 0) ? 1 : 0;
       });
       return count;
     }
@@ -400,7 +401,7 @@ export default {
         url += "?rid=" + g.rids[Math.floor(Math.random() * g.rids.length)];
       this.$router.push(url);
     },
-    resetChatColor: function() {
+    resetSocialColor: function() {
       // TODO: this is called twice, once on opening an once on closing
       document.getElementById("peopleBtn").classList.remove("somethingnew");
     },
@@ -419,17 +420,18 @@ export default {
           data.sockIds.forEach(s => {
             const page = s.page || "/";
             if (s.sid != this.st.user.sid && !identityAsked[s.sid]) {
-              identityAsked[s.sid] = true;
               this.send("askidentity", { target: s.sid, page: page });
+              identityAsked[s.sid] = true;
             }
             if (!this.people[s.sid])
-              this.$set(this.people, s.sid, { id: 0, name: "", pages: [page] });
+              // Do not set name or id: identity unknown yet
+              this.$set(this.people, s.sid, { pages: [page] });
             else if (this.people[s.sid].pages.indexOf(page) < 0)
               this.people[s.sid].pages.push(page);
             if (!s.page)
-              //peer is in Hall
+              // Peer is in Hall
               this.send("askchallenge", { target: s.sid });
-            //peer is in Game
+            // Peer is in Game
             else this.send("askgame", { target: s.sid, page: page });
           });
           break;
@@ -441,20 +443,17 @@ export default {
           // So it's a good idea to ask identity if he was anonymous.
           // But only ask game / challenge if currently disconnected.
           if (!this.people[data.from]) {
-            this.$set(this.people, data.from, {
-              name: "",
-              id: 0,
-              pages: [page]
-            });
+            this.$set(this.people, data.from, { pages: [page] });
             if (data.code == "connect")
               this.send("askchallenge", { target: data.from });
             else this.send("askgame", { target: data.from, page: page });
           } else {
-            // append page if not already in list
+            // Append page if not already in list
             if (this.people[data.from].pages.indexOf(page) < 0)
               this.people[data.from].pages.push(page);
           }
-          if (this.people[data.from].id == 0) {
+          if (!this.people[data.from].name && this.people[data.from].id !== 0) {
+            // Identity not known yet
             this.newConnect[data.from] = true; //for self multi-connects tests
             this.send("askidentity", { target: data.from, page: page });
           }
@@ -509,6 +508,11 @@ export default {
         }
         case "identity": {
           const user = data.data;
+          this.$set(this.people, user.sid, {
+            id: user.id,
+            name: user.name,
+            pages: this.people[user.sid].pages
+          });
           if (user.name) {
             // If I multi-connect, kill current connexion if no mark (I'm older)
             if (
@@ -522,14 +526,6 @@ export default {
                 this.killed[this.st.user.sid] = true;
               }
             }
-            if (user.sid != this.st.user.sid) {
-              //I already know my identity...
-              this.$set(this.people, user.sid, {
-                id: user.id,
-                name: user.name,
-                pages: this.people[user.sid].pages
-              });
-            }
           }
           delete this.newConnect[user.sid];
           break;