X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FMyGames.vue;h=953c976eb9e1f0a89f68961a664da77815816f7d;hb=2a8a94c9e539319c76c0a72967b39f2e7e7b279e;hp=2701e9ef942926dbae0a98183e102cd365ff407d;hpb=3b0f26c1261db7ea06067762c0c28b6dbacf2d99;p=vchess.git diff --git a/client/src/views/MyGames.vue b/client/src/views/MyGames.vue index 2701e9ef..953c976e 100644 --- a/client/src/views/MyGames.vue +++ b/client/src/views/MyGames.vue @@ -53,24 +53,29 @@ export default { ajax( "/games", "GET", - { uid: this.st.user.id }, - res => { - let serverGames = res.games.filter(g => { - const mySide = - g.players[0].uid == this.st.user.id - ? "White" - : "Black"; - return !g["deletedBy" + mySide]; - }); - serverGames.forEach(g => g.type = "corr"); - this.corrGames = serverGames; - }); + { + data: { uid: this.st.user.id }, + success: (res) => { + let serverGames = res.games.filter(g => { + const mySide = + g.players[0].uid == this.st.user.id + ? "White" + : "Black"; + return !g["deletedBy" + mySide]; + }); + serverGames.forEach(g => g.type = "corr"); + this.corrGames = serverGames; + } + } + ); } // Initialize connection this.connexionString = params.socketUrl + "/?sid=" + this.st.user.sid + + "&id=" + + this.st.user.id + "&tmpId=" + getRandString() + "&page=" + @@ -97,9 +102,65 @@ export default { elt.previousElementSibling.classList.remove("active"); else elt.nextElementSibling.classList.remove("active"); }, - // TODO: classifyObject is redundant (see Hall.vue) - classifyObject: function(o) { - return o.cadence.indexOf("d") === -1 ? "live" : "corr"; + tryShowNewsIndicator: function(type) { + if ( + (type == "live" && this.display == "corr") || + (type == "corr" && this.display == "live") + ) { + document + .getElementById(type + "Games") + .classList.add("somethingnew"); + } + }, + socketMessageListener: function(msg) { + const data = JSON.parse(msg.data); + switch (data.code) { + // NOTE: no need to increment movesCount: unused if turn is provided + case "notifyturn": + case "notifyscore": { + const info = data.data; + let games = + !!parseInt(info.gid) + ? this.corrGames + : this.liveGames; + let g = games.find(g => g.id == info.gid); + // "notifything" --> "thing": + const thing = data.code.substr(6); + this.$set(g, thing, info[thing]); + this.tryShowNewsIndicator(g.type); + break; + } + case "notifynewgame": { + const gameInfo = data.data; + // st.variants might be uninitialized, + // if unlucky and newgame right after connect: + const v = this.st.variants.find(v => v.id == gameInfo.vid); + const vname = !!v ? v.name : ""; + const type = gameInfo.cadence.indexOf('d') >= 0 ? "corr": "live"; + const game = Object.assign( + { + vname: vname, + type: type, + score: "*", + turn: "w" + }, + gameInfo + ); + // TODO: the new game isn't sorted. Maybe apply a different strategy: + // 1) Sort all at loading, + // 2) Insert in place when new games arrive, + // 3) Change position when score or turn change. + // And GameList just show list unsorted. + this[type + "Games"].unshift(game); + this.tryShowNewsIndicator(type); + break; + } + } + }, + socketCloseListener: function() { + this.conn = new WebSocket(this.connexionString); + this.conn.addEventListener("message", this.socketMessageListener); + this.conn.addEventListener("close", this.socketCloseListener); }, showGame: function(game) { // TODO: "isMyTurn" is duplicated (see GameList component). myColor also @@ -110,6 +171,7 @@ export default { g.players[0].sid == this.st.user.sid ? "w" : "b"; + if (!!g.turn) return g.turn == myColor; const rem = g.movesCount % 2; return ( (rem == 0 && myColor == "w") || @@ -157,38 +219,16 @@ export default { "/games", "PUT", { - gid: game.id, - newObj: { - score: "?", - scoreMsg: getScoreMessage("?") + data: { + gid: game.id, + newObj: { + score: "?", + scoreMsg: getScoreMessage("?") + } } } ); } - }, - socketMessageListener: function(msg) { - const data = JSON.parse(msg.data); - if (data.code == "changeturn") { - let games = !!parseInt(data.gid) - ? this.corrGames - : this.liveGames; - // NOTE: new move itself is not received, because it wouldn't be used. - let g = games.find(g => g.id == data.gid); - this.$set(g, "movesCount", g.movesCount + 1); - if ( - (g.type == "live" && this.display == "corr") || - (g.type == "corr" && this.display == "live") - ) { - document - .getElementById(g.type + "Games") - .classList.add("somethingnew"); - } - } - }, - socketCloseListener: function() { - this.conn = new WebSocket(this.connexionString); - this.conn.addEventListener("message", this.socketMessageListener); - this.conn.addEventListener("close", this.socketCloseListener); } } };