let challenges = {}; //variantName --> socketId, name
let games = {}; //gameId --> gameInfo (vname, fen, players, options, time)
+let moveHash = {}; //gameId --> set of hashes seen so far
let sockets = {}; //socketId --> socket
const variants = require("./variants.js");
const Crypto = require("crypto");
// Provide seed in case of, so that both players initialize with same FEN
function launchGame(gid) {
+ moveHash[gid] = {};
const gameInfo = Object.assign(
{seed: Math.floor(Math.random() * 1984), gid: gid},
games[gid]
break;
// Relay a move + update games object
case "newmove":
+ // NOTE: still potential racing issues, but... fingers crossed
+ const hash = Crypto.createHash("md5")
+ .update(JSON.stringify(obj.fen))
+ .digest("hex");
+ if (moveHash[hash])
+ break;
+ moveHash[hash] = true;
games[obj.gid].fen = obj.fen;
games[obj.gid].time = Date.now(); //update timestamp in case of
const playingWhite = (games[obj.gid].players[0].sid == sid);