RLG-Web client: add playing through WebSockets.

Add client-side support for WebSocket play.
This commit is contained in:
John "Elwin" Edwards 2012-07-15 18:18:53 -07:00
parent d11eb5e22a
commit 3abb05683e

View file

@ -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;