diff --git a/rlgterm.js b/rlgterm.js index 2be84e0..5364e61 100644 --- a/rlgterm.js +++ b/rlgterm.js @@ -318,12 +318,17 @@ function sendkey(ev) { return; } ev.preventDefault(); - var datareq = new XMLHttpRequest(); - var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": code}; - datareq.onerror = errHandler; - datareq.onreadystatechange = postResponseHandler; - datareq.open('POST', '/feed', true); - datareq.send(JSON.stringify(msgDict)); + if (session.sock) { + session.sock.send(JSON.stringify({"t": "d", "d": code})); + } + else { + var datareq = new XMLHttpRequest(); + var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": code}; + datareq.onerror = errHandler; + datareq.onreadystatechange = postResponseHandler; + datareq.open('POST', '/feed', true); + datareq.send(JSON.stringify(msgDict)); + } return; } @@ -376,12 +381,17 @@ function vkey(c) { } else return; - var datareq = new XMLHttpRequest(); - var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": keystr}; - datareq.onerror = errHandler; - datareq.onreadystatechange = postResponseHandler; - datareq.open('POST', '/feed', true); - datareq.send(JSON.stringify(msgDict)); + if (session.sock) { + session.sock.send(JSON.stringify({"t": "d", "d": keystr})); + } + else { + var datareq = new XMLHttpRequest(); + var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": keystr}; + datareq.onerror = errHandler; + datareq.onreadystatechange = postResponseHandler; + datareq.open('POST', '/feed', true); + datareq.send(JSON.stringify(msgDict)); + } return; } @@ -652,6 +662,10 @@ function makeStarter(gname) { function startgame(game) { if (session.id != null || !session.lcred) return; + if (WebSocket) { + wsStart(game); + return; + } var smsg = {}; smsg["key"] = session.lcred; smsg["game"] = game.uname; @@ -695,6 +709,32 @@ function startgame(game) { return; } +function wsStart(game) { + var sockurl = "ws://" + window.location.host + "/play/" + game.uname; + sockurl += "?key=" + session.lcred + "&w=80&h=24"; + ws = new WebSocket(sockurl); + ws.onopen = function (event) { + session.id = true; + session.playing = true; + session.sock = ws; + setmode("play"); + }; + ws.onmessage = function (event) { + var msgObject = JSON.parse(event.data); + if (msgObject.t == 's') { + termemu.resize(msgObject.h, msgObject.w); + message("You are now playing " + msgObject.g + "."); + } + else if (msgObject.t == 'd') { + writeData(msgObject.d); + } + }; + ws.onclose = function (event) { + session.sock = null; + gameover(); + }; +} + function startwatching(gamenumber) { if (session.id != null) return;