- this.vr.re_init(game.fen);
- });
-// // Poll all players except me (if I'm playing) to know online status.
-// // --> Send ping to server (answer pong if players[s] are connected)
-// if (this.gameInfo.players.some(p => p.sid == this.st.user.sid))
-// {
-// this.game.players.forEach(p => {
-// if (p.sid != this.st.user.sid)
-// this.st.conn.send(JSON.stringify({code:"ping", oppid:p.sid}));
-// });
-// }
+ if (gtype == "live" && game.clocks[0] < 0) //game unstarted
+ {
+ game.clocks = [tc.mainTime, tc.mainTime];
+ if (game.score == "*")
+ {
+ game.initime[0] = Date.now();
+ if (myIdx >= 0)
+ {
+ // I play in this live game; corr games don't have clocks+initime
+ GameStorage.update(game.id,
+ {
+ clocks: game.clocks,
+ initime: game.initime,
+ });
+ }
+ }
+ }
+ if (!!game.drawOffer)
+ {
+ if (game.drawOffer == "t") //three repetitions
+ this.drawOffer = "threerep";
+ else
+ {
+ if (myIdx < 0)
+ this.drawOffer = "received"; //by any of the players
+ else
+ {
+ // I play in this game:
+ if ((game.drawOffer == "w" && myIdx==0) || (game.drawOffer=="b" && myIdx==1))
+ this.drawOffer = "sent";
+ else //all other cases
+ this.drawOffer = "received";
+ }
+ }
+ }
+ if (!!game.scoreMsg)
+ game.scoreMsg = this.st.tr[game.scoreMsg]; //stored in english
+ this.game = Object.assign({},
+ game,
+ // NOTE: assign mycolor here, since BaseGame could also be VS computer
+ {
+ type: gtype,
+ increment: tc.increment,
+ mycolor: [undefined,"w","b"][myIdx+1],
+ // opponent sid not strictly required (or available), but easier
+ // at least oppsid or oppid is available anyway:
+ oppsid: (myIdx < 0 ? undefined : game.players[1-myIdx].sid),
+ oppid: (myIdx < 0 ? undefined : game.players[1-myIdx].uid),
+ }
+ );
+ this.repeat = {}; //reset: scan past moves' FEN:
+ let repIdx = 0;
+ // NOTE: vr_tmp to obtain FEN strings is redundant with BaseGame
+ let vr_tmp = new V(game.fenStart);
+ game.moves.forEach(m => {
+ vr_tmp.play(m);
+ const fenObj = V.ParseFen( vr_tmp.getFen() );
+ repIdx = fenObj.position + "_" + fenObj.turn;
+ if (!!fenObj.flags)
+ repIdx += "_" + fenObj.flags;
+ this.repeat[repIdx] = (!!this.repeat[repIdx]
+ ? this.repeat[repIdx]+1
+ : 1);
+ });
+ if (this.repeat[repIdx] >= 3)
+ this.drawOffer = "threerep";
+ if (!!this.lastate) //lastate arrived before game was loaded:
+ this.processLastate();
+ callback();
+ };
+ if (!!game)
+ return afterRetrieval(game);
+ if (!!this.gameRef.rid)
+ {
+ // Remote live game: forgetting about callback func... (TODO: design)
+ this.st.conn.send(JSON.stringify(
+ {code:"askfullgame", target:this.gameRef.rid}));
+ }
+ else
+ {
+ // Local or corr game
+ GameStorage.get(this.gameRef.id, afterRetrieval);
+ }