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/<name> at those times and can stop polling.
This commit is contained in:
John "Elwin" Edwards 2012-07-16 08:23:51 -07:00
parent a0be18657b
commit f7f56fedae
2 changed files with 16 additions and 10 deletions

View file

@ -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 () {