X-Git-Url: https://git.auder.net/js/img/rock_paper_scissors_lizard_spock.gif?a=blobdiff_plain;f=server%2Fsockets.js;h=cf5ea1b82bbc558f9f87c651f4c16c607b91b48e;hb=db1f1f9adb920605c7a16b060a7737e54636ee08;hp=1cc47aeb454eb2bb6889a00cac891d4574a9d5bb;hpb=910d631b73cad5ffef1b4461157b704e7e7057d8;p=vchess.git diff --git a/server/sockets.js b/server/sockets.js index 1cc47aeb..cf5ea1b8 100644 --- a/server/sockets.js +++ b/server/sockets.js @@ -153,7 +153,7 @@ module.exports = function(wss) { { const pg = obj.page || page; //required for askidentity and askgame // In cas askfullgame to wrong SID for example, would crash: - if (!!clients[pg][obj.target]) + if (clients[pg] && clients[pg][obj.target]) { const tmpIds = Object.keys(clients[pg][obj.target]); if (obj.target == sid) //targetting myself @@ -190,8 +190,30 @@ module.exports = function(wss) { case "abort": case "drawoffer": case "draw": + { notifyRoom(page, obj.code, {data:obj.data}); + const mygamesPg = "/mygames"; + if (obj.code == "newmove" && clients[mygamesPg]) + { + // Relay newmove info to myGames page + // NOTE: the move itself is not needed (for now at least) + const newmoveForMygames = { + gid: page.split("/")[2] //format is "/game/gid" + }; + obj.data.players.forEach(pSid => { + if (clients[mygamesPg][pSid]) + { + Object.keys(clients[mygamesPg][pSid]).forEach(x => { + send( + clients[mygamesPg][pSid][x], + {code:"newmove", data:newmoveForMygames} + ); + }); + } + }); + } break; + } case "result": // Special case: notify all, 'transroom': Game --> Hall @@ -207,7 +229,10 @@ module.exports = function(wss) { case "lastate": { const pg = obj.target[2] || page; //required for identity and game - send(clients[pg][obj.target[0]][obj.target[1]], {code:obj.code, data:obj.data}); + // NOTE: if in game we ask identity to opponent still in Hall, + // but leaving Hall, clients[pg] or clients[pg][target] could be ndefined + if (clients[pg] && clients[pg][obj.target[0]]) + send(clients[pg][obj.target[0]][obj.target[1]], {code:obj.code, data:obj.data}); break; } }