X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=server%2Fsockets.js;h=42a8840fc51fb014e593c6312b9315b62ca50ca4;hb=8477e53d8e78606e4c4e4bf91c77b1011aab583c;hp=175fe7e95ce71b9b3223e527ec3f7bb604f9e604;hpb=7f36b53a818bd707e49e7109275e3659e97d91b4;p=vchess.git diff --git a/server/sockets.js b/server/sockets.js index 175fe7e9..42a8840f 100644 --- a/server/sockets.js +++ b/server/sockets.js @@ -152,15 +152,22 @@ module.exports = function(wss) { case "askfullgame": { const pg = obj.page || page; //required for askidentity and askgame - const tmpIds = Object.keys(clients[pg][obj.target]); - if (obj.target == sid) //targetting myself + // In cas askfullgame to wrong SID for example, would crash: + if (clients[pg] && clients[pg][obj.target]) { - const idx_myTmpid = tmpIds.findIndex(x => x == tmpId); - if (idx_myTmpid >= 0) - tmpIds.splice(idx_myTmpid, 1); + const tmpIds = Object.keys(clients[pg][obj.target]); + if (obj.target == sid) //targetting myself + { + const idx_myTmpid = tmpIds.findIndex(x => x == tmpId); + if (idx_myTmpid >= 0) + tmpIds.splice(idx_myTmpid, 1); + } + const tmpId_idx = Math.floor(Math.random() * tmpIds.length); + send( + clients[pg][obj.target][tmpIds[tmpId_idx]], + {code:obj.code, from:[sid,tmpId,page]} + ); } - const tmpId_idx = Math.floor(Math.random() * tmpIds.length); - send(clients[pg][obj.target][tmpIds[tmpId_idx]], {code:obj.code, from:[sid,tmpId,page]}); break; } @@ -186,6 +193,11 @@ module.exports = function(wss) { notifyRoom(page, obj.code, {data:obj.data}); break; + case "result": + // Special case: notify all, 'transroom': Game --> Hall + notifyRoom("/", "result", {gid:obj.gid, score:obj.score}); + break; + // Passing, relaying something: from isn't needed, // but target is fully identified (sid + tmpId) case "challenge": @@ -195,15 +207,16 @@ 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; } } }; const closeListener = () => { - // TODO: BUG: this is triggered twice when anonymous reloads page - // (+ registered users, everyone in Hall). - // For tab or browser closing: + // For browser or tab closing (including page reload): doDisconnect(); }; // Update clients object: add new connexion