From f7f56fedaeda1e94eaf91447571352a2806c3732 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Mon, 16 Jul 2012 08:23:51 -0700 Subject: [PATCH] RLG-Web: improvements to choices and status messaging. Server-side, have gamemux 'end' events include the name and game, so they can be sent to WebSockets connected to /status. This means a WebSocket client only needs to update its choice list when it gets a begin or end message with its own username. So it only needs to check /pstatus/ at those times and can stop polling. --- rlgterm.js | 18 ++++++++++++------ rlgwebd.js | 8 ++++---- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/rlgterm.js b/rlgterm.js index a462632..786b97b 100644 --- a/rlgterm.js +++ b/rlgterm.js @@ -533,6 +533,10 @@ function wsCurrent() { } return; } + if (session.lcred) { + /* When starting the socket, the choices list might not be initialized. */ + getchoices(); + } if (statsock) return; statsock = new WebSocket("ws://" + window.location.host + "/status"); @@ -544,10 +548,12 @@ function wsCurrent() { if (e instanceof SyntaxError) return; } - if (msg.t != "t") { - return; + if (msg.t == "t") { + tableCurrent(msg.g); + } + else if ((msg.t == "b" || msg.t == "e") && msg.p == session.lname) { + getchoices(); } - tableCurrent(msg.g); }; statsock.onclose = function (ev) { statsock = null; @@ -555,6 +561,9 @@ function wsCurrent() { } function getcurrent(clear) { + if (WebSocket) { + return; + } if (session.id || clear) { if (statInterval) { window.clearInterval(statInterval); @@ -567,9 +576,6 @@ function getcurrent(clear) { } if (session.lcred) getchoices(); - if (WebSocket) { - return; - } var req = new XMLHttpRequest(); req.onerror = errHandler; req.onreadystatechange = function () { diff --git a/rlgwebd.js b/rlgwebd.js index fbd6aa0..968aeb6 100755 --- a/rlgwebd.js +++ b/rlgwebd.js @@ -173,13 +173,13 @@ function TermSession(game, lkey, dims, handlers) { }; // Teardown. this.term.on("exit", function () { + var id = ss.sessid; fs.unlink(ss.lock); ss.record.end(); ss.emit('exit'); - var id = ss.sessid; + gamemux.emit('end', id, ss.pname, ss.game.uname); delete sessions[id]; tslog("Game %s ended.", id); - gamemux.emit('end', id); }); this.close = function () { if (this.sessid in sessions) @@ -1229,8 +1229,8 @@ function wsHandler(wsRequest) { var listH = function (list) { conn.sendUTF(JSON.stringify(list)); }; - var endH = function (n) { - conn.sendUTF(JSON.stringify({"t": "e", "n": n})); + var endH = function (n, pname, gname) { + conn.sendUTF(JSON.stringify({"t": "e", "n": n, "p": pname, "g": gname})); }; gamemux.on('begin', beginH); gamemux.on('list', listH);