X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=sockets.js;h=8548e2fe4da1666dc60758ce939b1844e34a971f;hb=a29d9d6b7703d680ddb49cd3fe096f49b1d774f5;hp=6dbb24a27b01456c0536939663f44133cdd25254;hpb=0cb758e078f4981d1e5b5209e66ca02f544ec9d5;p=vchess.git diff --git a/sockets.js b/sockets.js index 6dbb24a2..8548e2fe 100644 --- a/sockets.js +++ b/sockets.js @@ -1,16 +1,6 @@ -//const url = require('url'); +const url = require('url'); const Variants = require("./variants"); -function getJsonFromUrl(url) { - var query = url.substr(2); //starts with "/?" - var result = {}; - query.split("&").forEach(function(part) { - var item = part.split("="); - result[item[0]] = decodeURIComponent(item[1]); - }); - return result; -} - module.exports = function(wss) { let clients = { "index": {} }; @@ -19,10 +9,9 @@ module.exports = function(wss) { clients[v.name] = {}; wss.on("connection", (socket, req) => { - //const params = new URL("http://localhost" + req.url).searchParams; - var query = getJsonFromUrl(req.url); - const sid = query["sid"]; //params.get("sid"); - const page = query["page"]; //params.get("page"); + const params = new URL("http://localhost" + req.url).searchParams; + const sid = params.get("sid"); + const page = params.get("page"); clients[page][sid] = socket; if (page == "index") { @@ -47,8 +36,6 @@ module.exports = function(wss) { switch (obj.code) { case "newmove": - // TODO: adjust with readyState? (+ setTimeout()?) + send opponent (re)disconnect - // https://github.com/websockets/ws/blob/master/lib/websocket.js line 313 if (!!clients[page][obj.oppid]) clients[page][obj.oppid].send(JSON.stringify({code:"newmove",move:obj.move})); break; @@ -56,6 +43,10 @@ module.exports = function(wss) { if (!!clients[page][obj.oppid]) socket.send(JSON.stringify({code:"pong"})); break; + case "lastate": + if (!!clients[page][obj.oppid]) + clients[page][obj.oppid].send(objtxt); + break; case "newgame": if (!!games[page]) { @@ -65,14 +56,15 @@ module.exports = function(wss) { delete games[page]; const mycolor = Math.random() < 0.5 ? 'w' : 'b'; socket.send(JSON.stringify({code:"newgame",fen:fen,oppid:oppId,color:mycolor})); - // TODO: check readyState, potential setTimeout()? + send opponent (re)disconnect - clients[page][oppId].send(JSON.stringify({code:"newgame",fen:fen,oppid:sid,color:mycolor=="w"?"b":"w"})); + if (!!clients[page][oppId]) + clients[page][oppId].send(JSON.stringify({code:"newgame",fen:fen,oppid:sid,color:mycolor=="w"?"b":"w"})); } else games[page] = {id:sid, fen:obj.fen}; //wait for opponent break; case "resign": - clients[page][obj.oppid].send(JSON.stringify({code:"resign"})); + if (!!clients[page][obj.oppid]) + clients[page][obj.oppid].send(JSON.stringify({code:"resign"})); break; } });