Mercurial > hg > rlgwebd
diff rlgterm.js @ 111:f56fdfeed01a
Replace taking over games with forced saves.
Instead of reusing the id, just SIGHUP the game process. This works
whether it is using polling, WebSockets, or dgamelaunch.
author | John "Elwin" Edwards <elwin@sdf.org> |
---|---|
date | Sun, 15 Jul 2012 22:33:44 -0700 |
parents | 67b393f10c2b |
children | 4f2b89e6fde2 |
line wrap: on
line diff
--- a/rlgterm.js Sun Jul 15 21:03:36 2012 -0700 +++ b/rlgterm.js Sun Jul 15 22:33:44 2012 -0700 @@ -622,18 +622,20 @@ acttext = "Resume your game"; else if (reply.stat[gname] == "0") acttext = "Start a game"; - else if (reply.stat[gname] == "p") - acttext = "Reconnect"; - else if (reply.stat[gname] == "d") - acttext = "Game in progress (dgl)"; + else if (reply.stat[gname] == "p" || reply.stat[gname] == "d") + acttext = "Force save"; else continue; var button = document.createElement("span"); button.appendChild(document.createTextNode(acttext)); - if ("s0p".indexOf(reply.stat[gname]) >= 0) { + if ("s0".indexOf(reply.stat[gname]) >= 0) { button.onclick = makeStarter(gname); button.className = "ibutton"; } + else { + button.onclick = makeStopper(gname); + button.className = "ibutton"; + } var actdiv = document.createElement("div"); actdiv.appendChild(button); var gamediv = document.createElement("div"); @@ -719,6 +721,44 @@ return; } +function makeStopper(gname) { + if (!(gname in games)) + return null; + var game = games[gname]; + function stopper(ev) { + stopgame(game); + } + return stopper; +} + +function stopgame(game) { + if (!session.lcred) + return; + var stopmsg = {"key": session.lcred, "g": game.uname}; + var req = new XMLHttpRequest(); + req.onerror = errHandler; + req.onreadystatechange = function () { + if (req.readyState != 4 || req.status != 200) + return; + var reply = JSON.parse(req.responseText); + if (reply.t == 'E') { + if (reply.c == 7) + message("That game has already stopped."); + else if (reply.c == 1) { + logout(); + message("The server forgot about you, please log in again.", "warn"); + } + else { + message("That game could not be stopped because: " + reply.s + + "This might be a bug.", "warn"); + } + } + } + req.open('POST', '/quit', true); + req.send(JSON.stringify(stopmsg)); + return; +} + function wsStart(game) { var sockurl = "ws://" + window.location.host + "/play/" + game.uname; sockurl += "?key=" + session.lcred + "&w=80&h=24";