Mercurial > hg > rlgwebd
diff rlgterm.js @ 55:96815eae4ebe
RLG-Web: make multiple watchers possible.
Split the TermSession class into the new TermSession, which handles the
PTY, and client classes, which handle HTTP sessions. These are Player
and Watcher. This allows multiple watchers per game, and other
improvements.
author | John "Elwin" Edwards <elwin@sdf.org> |
---|---|
date | Mon, 18 Jun 2012 13:43:51 -0700 |
parents | 2eda3909f6a3 |
children | 7f3ca16409fe |
line wrap: on
line diff
--- a/rlgterm.js Fri Jun 15 16:23:57 2012 -0700 +++ b/rlgterm.js Mon Jun 18 13:43:51 2012 -0700 @@ -151,60 +151,61 @@ * All non-special responseTexts should be handed directly to this function. */ function processMsg(msg) { - var msgDict; + var msgDicts; var havedata = null; // eventual return value try { - msgDict = JSON.parse(msg); + msgDicts = JSON.parse(msg); } catch (e) { if (e instanceof SyntaxError) return null; } - if (!msgDict.t) - return null; - else if (msgDict.t == "E") { - if (msgDict.c == 1 || msgDict.c == 6 || msgDict.c == 7) { - gameover(); - if (msgDict.c == 1) { - logout(); + if (msgDicts.length === 0) + return false; + for (var j = 0; j < msgDicts.length; j++) { + if (!msgDicts[j].t) + continue; + else if (msgDicts[j].t == "E") { + if (msgDicts[j].c == 1 || msgDicts[j].c == 6 || msgDicts[j].c == 7) { + gameover(); + if (msgDicts[j].c == 1) { + logout(); + } } + debug(1, "Server error: " + msgDicts[j].s); } - debug(1, "Server error: " + msgDict.s); - } - else if (msgDict.t == "n") { - havedata = false; - } - // A data message - else if (msgDict.t == "d"){ - if (msgDict.n === nrecv) { - writeData(msgDict.d); - nrecv++; - /* Process anything in the queue that's now ready. */ - var next; - while ((next = msgQ.shift()) !== undefined) { - writeData(next.d); + // A data message + else if (msgDicts[j].t == "d") { + if (msgDicts[j].n === nrecv) { + writeData(msgDicts[j].d); nrecv++; + /* Process anything in the queue that's now ready. */ + var next; + while ((next = msgQ.shift()) !== undefined) { + writeData(next.d); + nrecv++; + } } + else if (msgDicts[j].n > nrecv) { + /* The current message comes after one still missing. Queue this one + * for later use. */ + debug(1, "Got packet " + msgDicts[j].n + ", expected " + nrecv); + msgQ[msgDicts[j].n - nrecv - 1] = msgDicts[j]; + } + else { + /* This message's number was encountered previously. */ + debug(1, "Discarding packet " + msgDicts[j].n + ", expected " + nrecv); + } + havedata = true; } - else if (msgDict.n > nrecv) { - /* The current message comes after one still missing. Queue this one - * for later use. */ - debug(1, "Got packet " + msgDict.n + ", expected " + nrecv); - msgQ[msgDict.n - nrecv - 1] = msgDict; + else if (msgDicts[j].t == "T") { + setTitle(msgDicts[j].d); + } + else if (msgDicts[j].t == "q") { + gameover(); } else { - /* This message's number was encountered previously. */ - debug(1, "Discarding packet " + msgDict.n + ", expected " + nrecv); + debug(1, "Unrecognized server message " + msg); } - havedata = true; - } - else if (msgDict.t == "T") { - setTitle(msgDict.d); - } - else if (msgDict.t == "q") { - gameover(); - } - else { - debug(1, "Unrecognized server message " + msg); } return havedata; } @@ -488,7 +489,7 @@ if (req.readyState != 4 || req.status != 200) return; var reply = JSON.parse(req.responseText); - if (reply.t == 'l') { + if (reply.t == 's') { /* Success */ termemu.sessid = reply.id; termemu.resize(reply.h, reply.w);