# HG changeset patch # User John "Elwin" Edwards # Date 1342452231 25200 # Node ID 4f2b89e6fde2c2cec5471e9718942bf2249601d1 # Parent f56fdfeed01a6cfa04cadbd9bc2f7ef2bc25e8cb 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. diff -r f56fdfeed01a -r 4f2b89e6fde2 rlgterm.js --- a/rlgterm.js Sun Jul 15 22:33:44 2012 -0700 +++ b/rlgterm.js Mon Jul 16 08:23:51 2012 -0700 @@ -533,6 +533,10 @@ } 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 @@ if (e instanceof SyntaxError) return; } - if (msg.t != "t") { - return; + if (msg.t == "t") { + tableCurrent(msg.g); } - tableCurrent(msg.g); + else if ((msg.t == "b" || msg.t == "e") && msg.p == session.lname) { + getchoices(); + } }; statsock.onclose = function (ev) { statsock = null; @@ -555,6 +561,9 @@ } function getcurrent(clear) { + if (WebSocket) { + return; + } if (session.id || clear) { if (statInterval) { window.clearInterval(statInterval); @@ -567,9 +576,6 @@ } if (session.lcred) getchoices(); - if (WebSocket) { - return; - } var req = new XMLHttpRequest(); req.onerror = errHandler; req.onreadystatechange = function () { diff -r f56fdfeed01a -r 4f2b89e6fde2 rlgwebd.js --- a/rlgwebd.js Sun Jul 15 22:33:44 2012 -0700 +++ b/rlgwebd.js Mon Jul 16 08:23:51 2012 -0700 @@ -173,13 +173,13 @@ }; // 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 @@ 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);