From 098e8468ae7a52a55850c09f90506f52b8133567 Mon Sep 17 00:00:00 2001 From: Benjamin Auder Date: Sat, 8 Dec 2018 14:34:52 +0100 Subject: [PATCH] Attempt to not throw exception on server socket error --- TODO | 4 --- public/javascripts/base_rules.js | 1 + public/javascripts/variants/Checkered.js | 6 ++-- sockets.js | 40 ++++++++++++++++++------ 4 files changed, 36 insertions(+), 15 deletions(-) delete mode 100644 TODO diff --git a/TODO b/TODO deleted file mode 100644 index bcda2e84..00000000 --- a/TODO +++ /dev/null @@ -1,4 +0,0 @@ -For animation, moves should contains "moving" and "fading" maybe... -(But it's really just for Magnetic chess) -setInterval "CRON" task in sockets.js to check connected clients -(every 1hour maybe, or more) diff --git a/public/javascripts/base_rules.js b/public/javascripts/base_rules.js index 172f68b4..860495a4 100644 --- a/public/javascripts/base_rules.js +++ b/public/javascripts/base_rules.js @@ -10,6 +10,7 @@ class PiPo //Piece+Position } } +// TODO: for animation, moves should contains "moving" and "fading" maybe... class Move { // o: {appear, vanish, [start,] [end,]} diff --git a/public/javascripts/variants/Checkered.js b/public/javascripts/variants/Checkered.js index b702018a..b9e7223b 100644 --- a/public/javascripts/variants/Checkered.js +++ b/public/javascripts/variants/Checkered.js @@ -262,9 +262,11 @@ class CheckeredRules extends ChessRules notation = startColumn + "x" + finalSquare + "=" + move.appear[0].p.toUpperCase(); } else //no capture + { notation = finalSquare; - if (move.appear.length > 0 && piece != move.appear[0].p) //promotion - notation += "=" + move.appear[0].p.toUpperCase(); + if (move.appear.length > 0 && piece != move.appear[0].p) //promotion + notation += "=" + move.appear[0].p.toUpperCase(); + } return notation; } diff --git a/sockets.js b/sockets.js index 820a88c7..452cb6e0 100644 --- a/sockets.js +++ b/sockets.js @@ -8,6 +8,19 @@ module.exports = function(wss) { for (const v of Variants) clients[v.name] = {}; +// // Safety counter (TODO: is it necessary ?) +// setInterval(() => { +// Object.keys(clients).forEach(k => { +// Object.keys(clients[k]).forEach(ck => { +// if (!clients[k][ck] || clients[k][ck].readyState != 1) +// delete clients[k][ck]; +// }); +// }); +// }, 60000); //every minute (will be lowered if a lot of users...) + + // No-op function as a callback when sending messages + const noop = () => { }; + wss.on("connection", (socket, req) => { const params = new URL("http://localhost" + req.url).searchParams; const sid = params.get("sid"); @@ -25,11 +38,11 @@ module.exports = function(wss) { { // Send to every client connected on index an update message for counts Object.keys(clients["index"]).forEach( k => { - clients["index"][k].send(JSON.stringify({code:"increase",vname:page})); + clients["index"][k].send(JSON.stringify({code:"increase",vname:page}), noop); }); // Also notify potential opponents: hit all clients which check if sid corresponds Object.keys(clients[page]).forEach( k => { - clients[page][k].send(JSON.stringify({code:"connect",id:sid})); + clients[page][k].send(JSON.stringify({code:"connect",id:sid}), noop); }); socket.on("message", objtxt => { let obj = JSON.parse(objtxt); @@ -37,7 +50,10 @@ module.exports = function(wss) { { case "newmove": if (!!clients[page][obj.oppid]) - clients[page][obj.oppid].send(JSON.stringify({code:"newmove",move:obj.move})); + { + clients[page][obj.oppid].send( + JSON.stringify({code:"newmove",move:obj.move}), noop); + } break; case "ping": if (!!clients[page][obj.oppid]) @@ -48,7 +64,7 @@ module.exports = function(wss) { { const oppId = obj.oppid; obj.oppid = sid; //I'm oppid for my opponent - clients[page][oppId].send(JSON.stringify(obj)); + clients[page][oppId].send(JSON.stringify(obj), noop); } break; case "newgame": @@ -59,16 +75,22 @@ module.exports = function(wss) { const fen = games[page]["fen"]; delete games[page]; const mycolor = Math.random() < 0.5 ? 'w' : 'b'; - socket.send(JSON.stringify({code:"newgame",fen:fen,oppid:oppId,color:mycolor})); + socket.send( + JSON.stringify({code:"newgame",fen:fen,oppid:oppId,color:mycolor})); if (!!clients[page][oppId]) - clients[page][oppId].send(JSON.stringify({code:"newgame",fen:fen,oppid:sid,color:mycolor=="w"?"b":"w"})); + { + clients[page][oppId].send( + JSON.stringify( + {code:"newgame",fen:fen,oppid:sid,color:mycolor=="w"?"b":"w"}), + noop); + } } else games[page] = {id:sid, fen:obj.fen}; //wait for opponent break; case "resign": if (!!clients[page][obj.oppid]) - clients[page][obj.oppid].send(JSON.stringify({code:"resign"})); + clients[page][obj.oppid].send(JSON.stringify({code:"resign"}), noop); break; } }); @@ -82,12 +104,12 @@ module.exports = function(wss) { { // Send to every client connected on index an update message for counts Object.keys(clients["index"]).forEach( k => { - clients["index"][k].send(JSON.stringify({code:"decrease",vname:page})); + clients["index"][k].send(JSON.stringify({code:"decrease",vname:page}), noop); }); } // Also notify potential opponents: hit all clients which check if sid corresponds Object.keys(clients[page]).forEach( k => { - clients[page][k].send(JSON.stringify({code:"disconnect",id:sid})); + clients[page][k].send(JSON.stringify({code:"disconnect",id:sid}), noop); }); }); }); -- 2.44.0