From efdfb4c70f4a4391b8571726d924cdf58baba41c Mon Sep 17 00:00:00 2001 From: Benjamin Auder Date: Wed, 4 Mar 2020 19:19:52 +0100 Subject: [PATCH] Attempt to robustify identity detection at loading (no more temporary anonymous) --- TODO | 4 +++ client/src/components/BaseGame.vue | 3 +++ client/src/views/Game.vue | 26 +++++------------- client/src/views/Hall.vue | 42 ++++++++++++++---------------- 4 files changed, 33 insertions(+), 42 deletions(-) diff --git a/TODO b/TODO index 9c745347..3b8b6512 100644 --- 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 diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index 4af4e153..0c20b0bc 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -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"); diff --git a/client/src/views/Game.vue b/client/src/views/Game.vue index 5471a3fe..8f49c5d7 100644 --- a/client/src/views/Game.vue +++ b/client/src/views/Game.vue @@ -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; diff --git a/client/src/views/Hall.vue b/client/src/views/Hall.vue index 469d46b2..1031e49c 100644 --- a/client/src/views/Hall.vue +++ b/client/src/views/Hall.vue @@ -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; -- 2.44.0