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
38
rlgwebd.js
38
rlgwebd.js
|
|
@ -698,7 +698,6 @@ function getStatus(callback) {
|
|||
var statusinfo = {"s": allowlogin, "g": []};
|
||||
for (var tag in sessions) {
|
||||
var gamedesc = {};
|
||||
gamedesc["tag"] = tag;
|
||||
gamedesc["p"] = sessions[tag].pname;
|
||||
gamedesc["g"] = sessions[tag].game.uname;
|
||||
gamedesc["i"] = now - sessions[tag].lasttime;
|
||||
|
|
@ -706,7 +705,12 @@ function getStatus(callback) {
|
|||
}
|
||||
statusinfo["dgl"] = [];
|
||||
for (var tag in dglgames) {
|
||||
statusinfo["dgl"].push(tag);
|
||||
var dglinfo = {};
|
||||
var slash = tag.search('/');
|
||||
dglinfo["g"] = tag.slice(0, slash);
|
||||
dglinfo["p"] = tag.slice(slash + 1);
|
||||
dglinfo["i"] = -1;
|
||||
statusinfo["dgl"].push(dglinfo);
|
||||
}
|
||||
callback(statusinfo);
|
||||
}
|
||||
|
|
@ -973,12 +977,30 @@ function wsHandler(wsRequest) {
|
|||
wsRequest.reject(404, "No such resource.");
|
||||
}
|
||||
|
||||
/* TODO use a list instead */
|
||||
/* Only games with low idle time are included. Use getStatus() for the
|
||||
* complete list. */
|
||||
function pushStatus() {
|
||||
getStatus(function(info) {
|
||||
info["t"] = "t";
|
||||
gamemux.emit('list', info);
|
||||
});
|
||||
var now = new Date();
|
||||
var statusinfo = {"t": "p", "s": allowlogin, "g": [], "dgl": []};
|
||||
for (var tag in sessions) {
|
||||
var delta = now - sessions[tag].lasttime;
|
||||
if (delta < 60000) {
|
||||
var gamedesc = {};
|
||||
gamedesc["p"] = sessions[tag].pname;
|
||||
gamedesc["g"] = sessions[tag].game.uname;
|
||||
gamedesc["i"] = delta;
|
||||
statusinfo["g"].push(gamedesc);
|
||||
}
|
||||
}
|
||||
for (var tag in dglgames) {
|
||||
var dglinfo = {};
|
||||
var slash = tag.search('/');
|
||||
dglinfo["g"] = tag.slice(0, slash);
|
||||
dglinfo["p"] = tag.slice(slash + 1);
|
||||
dglinfo["i"] = -1;
|
||||
statusinfo["dgl"].push(dglinfo);
|
||||
}
|
||||
gamemux.emit('list', statusinfo);
|
||||
}
|
||||
|
||||
function shutdown () {
|
||||
|
|
@ -1067,6 +1089,6 @@ ctlServer.listen(ctlsocket, function () {
|
|||
wsServer.on("request", wsHandler);
|
||||
tslog('WebSockets are online');
|
||||
progressWatcher = startProgressWatcher();
|
||||
setInterval(pushStatus, 4000);
|
||||
setInterval(pushStatus, 40000);
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue