RLG-Web server: refactor statusmsg() to work with WebSockets.

Separate the game-listing and http-responding components of statusmsg()
so the listing function can be reused for WebSockets.
This commit is contained in:
John "Elwin" Edwards 2012-07-13 09:17:05 -07:00
parent 031bc239f8
commit 4174840c3e

View file

@ -872,34 +872,28 @@ function readFeed(client, res) {
res.end(); res.end();
} }
function statusmsg(req, res) { function getStatus(callback) {
var now = new Date(); var now = new Date();
var reply = {"s": allowlogin, "g": []}; var statusinfo = {"s": allowlogin, "g": []};
function respond() {
res.writeHead(200, { "Content-Type": "application/json" });
if (req.method != 'HEAD')
res.write(JSON.stringify(reply));
res.end();
}
function idleset(i, idletime) { function idleset(i, idletime) {
if (i >= 0 && i < reply.g.length) { if (i >= 0 && i < statusinfo.g.length) {
reply.g[i].i = idletime; statusinfo.g[i].i = idletime;
} }
for (var j = 0; j < reply.g.length; j++) { for (var j = 0; j < statusinfo.g.length; j++) {
if (!("i" in reply.g[j])) if (!("i" in statusinfo.g[j]))
return; return;
} }
respond(); callback(statusinfo);
} }
for (var sessid in sessions) { for (var sessid in sessions) {
var gamedesc = {}; var gamedesc = {};
gamedesc["n"] = sessid; gamedesc["n"] = sessid;
gamedesc["p"] = sessions[sessid].pname; gamedesc["p"] = sessions[sessid].pname;
gamedesc["g"] = sessions[sessid].game.uname; gamedesc["g"] = sessions[sessid].game.uname;
reply["g"].push(gamedesc); statusinfo["g"].push(gamedesc);
} }
if (reply.g.length == 0) { if (statusinfo.g.length == 0) {
respond(); callback(statusinfo);
return; return;
} }
function makecallback(i) { function makecallback(i) {
@ -910,9 +904,9 @@ function statusmsg(req, res) {
idleset(i, now - stats.mtime); idleset(i, now - stats.mtime);
} }
} }
for (var i = 0; i < reply.g.length; i++) { for (var i = 0; i < statusinfo.g.length; i++) {
if (reply.g[i].n in sessions) { if (statusinfo.g[i].n in sessions) {
fs.fstat(sessions[reply.g[i].n].record.fd, makecallback(i)); fs.fstat(sessions[statusinfo.g[i].n].record.fd, makecallback(i));
} }
else { else {
idleset(i, null); idleset(i, null);
@ -920,6 +914,16 @@ function statusmsg(req, res) {
} }
} }
function statusmsg(req, res) {
function respond(info) {
res.writeHead(200, { "Content-Type": "application/json" });
if (req.method != 'HEAD')
res.write(JSON.stringify(info));
res.end();
}
getStatus(respond);
}
function pstatusmsg(req, res) { function pstatusmsg(req, res) {
if (req.method == 'HEAD') { if (req.method == 'HEAD') {
res.writeHead(200, { "Content-Type": "application/json" }); res.writeHead(200, { "Content-Type": "application/json" });