- this.st.conn.send(JSON.stringify({code:"identity",
- user: {
- // NOTE: decompose to avoid revealing email
- name: this.st.user.name,
- sid: this.st.user.sid,
- id: this.st.user.id,
- },
- target:data.from}));
+ // 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)
+ {
+ this.newConnect[data.from] = true; //for self multi-connects tests
+ this.send("askidentity", {target:data.from, page:page});
+ }
+ break;
+ }
+ case "disconnect":
+ case "gdisconnect":
+ if (!this.people[data.from])
+ return; //TODO: solve this bug
+ // (anonymous reloads page, onclose event triggered twice...)
+ // Disconnect means no more tmpIds:
+ if (data.code == "disconnect")
+ {
+ // Remove the live challenge sent by this player:
+ ArrayFun.remove(this.challenges, c => c.from.sid == data.from);
+ }
+ else
+ {
+ // Remove the matching live game if now unreachable
+ const gid = data.page.match(/[a-zA-Z0-9]+$/)[0];
+ const gidx = this.games.findIndex(g => g.id == gid);
+ if (gidx >= 0)
+ {
+ const game = this.games[gidx];
+ if (game.type == "live" &&
+ game.rids.length == 1 && game.rids[0] == data.from)
+ {
+ this.games.splice(gidx, 1);
+ }
+ }