- // Send my current live games (if any)
- // TODO: from indexedDB, through GameStorage.
-// if (!!localStorage["gid"])
-// {
-// const myGame =
-// {
-// // Minimal game informations: (fen+clock not required)
-// id: localStorage["gid"],
-// players: JSON.parse(localStorage["players"]), //array sid+id+name
-// vname: localStorage["vname"],
-// timeControl: localStorage["timeControl"],
-// };
-// this.st.conn.send(JSON.stringify({code:"game",
-// game:myGame, target:data.from}));
-// }
- break;
- }
- case "identity":
- {
- const pIdx = this.people.findIndex(p => p.sid == data.user.sid);
- this.people[pIdx].id = data.user.id;
- this.people[pIdx].name = data.user.name;
- break;
- }
- case "challenge":
- {
- // Receive challenge from some player (+sid)
- let newChall = data.chall;
- newChall.type = this.classifyObject(data.chall);
- const pIdx = this.people.findIndex(p => p.sid == data.from);
- newChall.from = this.people[pIdx]; //may be anonymous
- newChall.added = Date.now();
- newChall.vname = this.getVname(newChall.vid);
- this.challenges.push(newChall);
- break;
- }
- case "game":
- {
- // Receive game from some player (+sid)
- // NOTE: it may be correspondance (if newgame while we are connected)
- // TODO: ambiguous naming "newGame" ==> rename function ?
- let newGame = data.game;
- newGame.type = this.classifyObject(data.game);
- newGame.vname = newGame.vname;
- this.games.push(newGame);
- break;
- }
-// * - receive "new game": if live, store locally + redirect to game
-// * If corr: notify "new game has started", give link, but do not redirect
- case "newgame":
- {
- // Delete corresponding challenge:
- ArrayFun.remove(this.challenges, c => c.id == data.cid);
- // New game just started: data contain all informations
- this.newGame(data.gameInfo);
- break;
- }
-// * - receive "accept/cancel challenge": apply action to challenges list
- // NOTE: challenge "socket" actions accept+withdraw only for live challenges
- case "acceptchallenge":
- {
- // Someone accept an open (or targeted) challenge
- const cIdx = this.challenges.findIndex(c => c.id == data.cid);
- let c = this.challenges[cIdx];
- const pIdx = this.people.findIndex(p => p.sid == data.from);
- c.seat = this.people[pIdx];
- this.launchGame(c);
+ // NOTE about next condition: see "askchallenge" case.
+ const chall = data.data;
+ if (!chall.to || (this.people[chall.from].id > 0 &&
+ (chall.from == this.st.user.sid || chall.to == this.st.user.name)))
+ {
+ let newChall = Object.assign({}, chall);
+ newChall.type = this.classifyObject(chall);
+ newChall.added = Date.now();
+ let fromValues = Object.assign({}, this.people[chall.from]);
+ delete fromValues["pages"]; //irrelevant in this context
+ newChall.from = Object.assign({sid:chall.from}, fromValues);
+ newChall.vname = this.getVname(newChall.vid);
+ this.challenges.push(newChall);
+ }