- // Send my current live game (if any)
- GameStorage.getCurrent((game) => {
- if (!!game)
- {
- const myGame =
- {
- // Minimal game informations:
- id: game.id,
- players: game.players.map(p => p.name),
- vname: game.vname,
- timeControl: game.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(); //TODO: this is reception timestamp, not creation
- newChall.vname = this.getVname(newChall.vid); //TODO: just send vname?
- this.challenges.push(newChall);
- break;
- }
- case "game":
- {
- // Receive game from some player (+sid)
- // NOTE: it may be correspondance (if newgame while we are connected)
- let newGame = data.game;
- newGame.type = this.classifyObject(data.game);
- newGame.rid = data.from;
- newGame.score = "*";
- 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.startNewGame(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);
+ }