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=" +
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
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") ||
"/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);
}
}
};