RLGWebD: overhaul the list of current games.
The /status WebSocket now only sends a complete list when opened. At 40-second intervals, it sends a list of games that have been updated in the last minute. The client now uses this to keep its own list.
This commit is contained in:
parent
7e294b2136
commit
2064d2a9e6
2 changed files with 81 additions and 13 deletions
56
rlgterm.js
56
rlgterm.js
|
|
@ -40,6 +40,10 @@ var statInterval = null;
|
|||
var statDelta = 8000;
|
||||
/* A WebSocket to listen for status events. */
|
||||
var statsock = null;
|
||||
/* List of currently active games. */
|
||||
var currentList = [];
|
||||
/* Last time the list was updated. */
|
||||
var currentTS = null;
|
||||
|
||||
function writeData(hexstr) {
|
||||
var codenum;
|
||||
|
|
@ -315,7 +319,6 @@ function formlogin(ev) {
|
|||
return;
|
||||
}
|
||||
|
||||
/* FIXME game list API has changed */
|
||||
function tableCurrent(gamelist) {
|
||||
var gamediv = document.getElementById("gametable");
|
||||
while (gamediv.children.length > 2)
|
||||
|
|
@ -383,11 +386,54 @@ function wsCurrent() {
|
|||
return;
|
||||
}
|
||||
if (msg.t == "t") {
|
||||
tableCurrent(msg.g);
|
||||
currentList = msg.g;
|
||||
currentTS = new Date();
|
||||
tableCurrent(currentList);
|
||||
}
|
||||
else if ((msg.t == "b" || msg.t == "e") &&
|
||||
msg.p == sessionStorage.getItem("lname")) {
|
||||
getchoices();
|
||||
else if (msg.t == "p") {
|
||||
var now = new Date();
|
||||
var idletimes = {};
|
||||
for (var i = 0; i < msg.g.length; i++) {
|
||||
var tag = msg.g[i].g + "/" + msg.g[i].p;
|
||||
idletimes[tag] = msg.g[i].i;
|
||||
}
|
||||
for (var i = 0; i < currentList.length; i++) {
|
||||
var tag = currentList[i].g + "/" + currentList[i].p;
|
||||
if (tag in idletimes) {
|
||||
currentList[i].i = idletimes[tag];
|
||||
}
|
||||
else {
|
||||
currentList[i].i += now - currentTS;
|
||||
}
|
||||
}
|
||||
currentTS = now;
|
||||
tableCurrent(currentList);
|
||||
}
|
||||
else if (msg.t == "b") {
|
||||
var justbegun = {};
|
||||
justbegun.g = msg.g;
|
||||
justbegun.p = msg.p;
|
||||
justbegun.i = 0;
|
||||
currentList.push(justbegun);
|
||||
tableCurrent(currentList);
|
||||
if (msg.p == sessionStorage.getItem("lname")) {
|
||||
getchoices();
|
||||
}
|
||||
}
|
||||
else if (msg.t == "e") {
|
||||
var i = 0;
|
||||
while (i < currentList.length) {
|
||||
if (currentList[i].g == msg.g && currentList[i].p == msg.p)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
if (i < currentList.length) {
|
||||
currentList.splice(i, 1);
|
||||
}
|
||||
tableCurrent(currentList);
|
||||
if (msg.p == sessionStorage.getItem("lname")) {
|
||||
getchoices();
|
||||
}
|
||||
}
|
||||
};
|
||||
statsock.onclose = function (ev) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue