X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FHall.vue;h=19f2e77db56f22ac3e37908ff113eea514fb42ff;hb=77fd729819118d491ff91c1d99960add2ef9cff3;hp=c91fb1e819512b4bb4ebf9570bf85d5615a0c0d7;hpb=7b626bdd29da0927354c92526fc5e03095877351;p=vchess.git diff --git a/client/src/views/Hall.vue b/client/src/views/Hall.vue index c91fb1e8..19f2e77d 100644 --- a/client/src/views/Hall.vue +++ b/client/src/views/Hall.vue @@ -208,7 +208,7 @@ export default { {target: sid} ))); }; - else if (!!to[0]) + if (!!to[0]) { to.forEach(pname => { // Challenge with targeted players @@ -483,30 +483,34 @@ export default { // * - prepare and start new game (if challenge is full after acceptation) // * --> include challenge ID (so that opponents can delete the challenge too) clickChallenge: function(c) { - switch (c.type) + if (!!c.accepted) { - case "live": - if (!!c.accepted) - { - this.st.conn.send(JSON.stringify({code: "withdrawchallenge", - cid: c.id, target: c.from.sid})); - - break; - case "corr": + this.st.conn.send(JSON.stringify({code: "withdrawchallenge", + cid: c.id, target: c.from.sid})); + if (c.type == "corr") + { ajax( "/challenges", "PUT", {action:"withdraw", id: this.challenges[cIdx].id} ); - break; - } - c.accepted = false; - { + } + c.accepted = false; } - else if (c.from.sid == this.st.user.sid) //it's my challenge: cancel it + else if (c.from.sid == this.st.user.sid + || (this.st.user.id > 0 && c.from.id == this.st.user.id)) { + // It's my challenge: cancel it this.sendSomethingTo(c.to, "deletechallenge", {cid:c.id}); ArrayFun.remove(this.challenges, ch => ch.id == c.id); + if (c.type == "corr") + { + ajax( + "/challenges", + "DELETE", + {id: this.challenges[cIdx].id} + ); + } } else //accept (or refuse) a challenge { @@ -516,16 +520,35 @@ export default { // TODO: if special FEN, show diagram after loading variant c.accepted = confirm("Accept challenge?"); } + const action = (c.accepted ? "accept" : "refuse"); this.st.conn.send(JSON.stringify({ - code: (c.accepted ? "accept" : "refuse") + "challenge", + code: action + "challenge", cid: c.id, target: c.from.sid})); + if (c.type == "corr") + { + ajax( + "/challenges", + "PUT", + {action: action, id: this.challenges[cIdx].id} + ); + } if (!c.accepted) + { ArrayFun.remove(this.challenges, ch => ch.id == c.id); + if (c.type == "corr") + { + ajax( + "/challenges", + "DELETE", + {id: this.challenges[cIdx].id} + ); + } + } } }, // c.type == corr alors use id...sinon sid (figés) // NOTE: only for live games ? - launchGame: function(c) { + launchGame: async function(c) { // Just assign colors and pass the message const vname = this.getVname(c.vid); const vModule = await import("@/variants/" + vname + ".js"); @@ -537,7 +560,7 @@ export default { fen: c.fen || V.GenRandInitFen(), // Shuffle players order (white then black then other colors). // Players' names may be required if game start when a player is offline - players: shuffle(players).map(p => {name:p.name, sid:p.sid}, + players: shuffle(players).map(p => { return {name:p.name, sid:p.sid} }), vid: c.vid, timeControl: c.timeControl, };