RLG-Web client: add playing through WebSockets.
Add client-side support for WebSocket play.
This commit is contained in:
parent
d11eb5e22a
commit
3abb05683e
1 changed files with 52 additions and 12 deletions
64
rlgterm.js
64
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue