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; return;
} }
ev.preventDefault(); ev.preventDefault();
var datareq = new XMLHttpRequest(); if (session.sock) {
var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": code}; session.sock.send(JSON.stringify({"t": "d", "d": code}));
datareq.onerror = errHandler; }
datareq.onreadystatechange = postResponseHandler; else {
datareq.open('POST', '/feed', true); var datareq = new XMLHttpRequest();
datareq.send(JSON.stringify(msgDict)); 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; return;
} }
@ -376,12 +381,17 @@ function vkey(c) {
} }
else else
return; return;
var datareq = new XMLHttpRequest(); if (session.sock) {
var msgDict = {"id": session.id, "t": "d", "n": nsend++, "d": keystr}; session.sock.send(JSON.stringify({"t": "d", "d": keystr}));
datareq.onerror = errHandler; }
datareq.onreadystatechange = postResponseHandler; else {
datareq.open('POST', '/feed', true); var datareq = new XMLHttpRequest();
datareq.send(JSON.stringify(msgDict)); 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; return;
} }
@ -652,6 +662,10 @@ function makeStarter(gname) {
function startgame(game) { function startgame(game) {
if (session.id != null || !session.lcred) if (session.id != null || !session.lcred)
return; return;
if (WebSocket) {
wsStart(game);
return;
}
var smsg = {}; var smsg = {};
smsg["key"] = session.lcred; smsg["key"] = session.lcred;
smsg["game"] = game.uname; smsg["game"] = game.uname;
@ -695,6 +709,32 @@ function startgame(game) {
return; 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) { function startwatching(gamenumber) {
if (session.id != null) if (session.id != null)
return; return;