webtty: switch all server responses to JSON.
This commit is contained in:
parent
71d43603a9
commit
b6bf7038ca
2 changed files with 38 additions and 36 deletions
39
shterm.js
39
shterm.js
|
|
@ -119,23 +119,20 @@ function getData() {
|
||||||
var datareq = new XMLHttpRequest();
|
var datareq = new XMLHttpRequest();
|
||||||
datareq.onreadystatechange = function () {
|
datareq.onreadystatechange = function () {
|
||||||
if (datareq.readyState == 4 && datareq.status == 200) {
|
if (datareq.readyState == 4 && datareq.status == 200) {
|
||||||
var datalines = datareq.responseText.split("\n");
|
var response = JSON.parse(this.responseText);
|
||||||
if (!datalines[0]) {
|
if (!response.t)
|
||||||
return;
|
return;
|
||||||
}
|
else if (response.t == "E") {
|
||||||
else if (datalines[0] == "E1") {
|
if (response.c == 1) {
|
||||||
termemu.alive = false;
|
termemu.alive = false;
|
||||||
return;
|
debug(1, "Server error: " + response.s);
|
||||||
}
|
}
|
||||||
else if (datalines[0].charAt(0) != 'd') {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (datalines[1]) {
|
else if (response.t == "n")
|
||||||
writeData(datalines[1]);
|
|
||||||
ajaxstate.gotdata();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ajaxstate.gotnothing();
|
ajaxstate.gotnothing();
|
||||||
|
else if (response.t == "d") {
|
||||||
|
writeData(response.d);
|
||||||
|
ajaxstate.gotdata();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -147,18 +144,21 @@ function getData() {
|
||||||
|
|
||||||
function postResponseHandler() {
|
function postResponseHandler() {
|
||||||
if (this.readyState == 4 && this.status == 200) {
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
var datalines = this.responseText.split("\n");
|
var response = JSON.parse(this.responseText);
|
||||||
if (!datalines[0])
|
if (!response.t || response.t == "n")
|
||||||
return;
|
return;
|
||||||
else if (datalines[0] == "E1") {
|
else if (response.t == "E") {
|
||||||
|
if (response.c == 1) {
|
||||||
termemu.alive = false;
|
termemu.alive = false;
|
||||||
|
debug(1, "Server error: " + response.s);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (datalines[0].charAt(0) != "d")
|
else if (response.t != "d")
|
||||||
return;
|
return;
|
||||||
/* It is a data message */
|
/* It is a data message */
|
||||||
if (datalines[1]) {
|
if (response.d) {
|
||||||
writeData(datalines[1]);
|
writeData(response.d);
|
||||||
}
|
}
|
||||||
ajaxstate.posted();
|
ajaxstate.posted();
|
||||||
return;
|
return;
|
||||||
|
|
@ -301,7 +301,6 @@ function login(h, w) {
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
req.onreadystatechange = function () {
|
req.onreadystatechange = function () {
|
||||||
if (req.readyState == 4 && req.status == 200) {
|
if (req.readyState == 4 && req.status == 200) {
|
||||||
var datalines = req.responseText.split("\n");
|
|
||||||
var logindict = JSON.parse(req.responseText);
|
var logindict = JSON.parse(req.responseText);
|
||||||
if (logindict.login) {
|
if (logindict.login) {
|
||||||
/* Success */
|
/* Success */
|
||||||
|
|
@ -324,8 +323,8 @@ function stop() {
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
req.onreadystatechange = function () {
|
req.onreadystatechange = function () {
|
||||||
if (req.readyState == 4 && req.status == 200) {
|
if (req.readyState == 4 && req.status == 200) {
|
||||||
var datalines = req.responseText.split("\n");
|
|
||||||
/* Figure out whether or not it worked. */
|
/* Figure out whether or not it worked. */
|
||||||
|
/* FIXME the server might respond with output. */
|
||||||
termemu.alive = false;
|
termemu.alive = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
29
webtty.js
29
webtty.js
|
|
@ -39,6 +39,7 @@ function TermSession(sessid, h, w) {
|
||||||
this.sessid = sessid;
|
this.sessid = sessid;
|
||||||
this.alive = true;
|
this.alive = true;
|
||||||
this.data = [];
|
this.data = [];
|
||||||
|
this.nsend = 0;
|
||||||
this.child.stdout.on("data", function (buf) {
|
this.child.stdout.on("data", function (buf) {
|
||||||
ss.data.push(buf);
|
ss.data.push(buf);
|
||||||
});
|
});
|
||||||
|
|
@ -244,16 +245,21 @@ function serveStatic(req, res, fname) {
|
||||||
function readFeed(res, term) {
|
function readFeed(res, term) {
|
||||||
res.writeHead(200, { "Content-Type": "text/plain" });
|
res.writeHead(200, { "Content-Type": "text/plain" });
|
||||||
if (term) {
|
if (term) {
|
||||||
|
var answer = {};
|
||||||
var result = term.read();
|
var result = term.read();
|
||||||
if (result == null)
|
if (result == null) {
|
||||||
resultstr = "";
|
answer["t"] = "n";
|
||||||
else
|
|
||||||
resultstr = result.toString("hex");
|
|
||||||
res.write("d" + resultstr.length.toString() + "\n" + resultstr + "\n");
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//console.log("Where's the term?");
|
answer["t"] = "d";
|
||||||
res.write("d0\n\n");
|
answer["d"] = result.toString("hex");
|
||||||
|
answer["n"] = term.nsend++;
|
||||||
|
}
|
||||||
|
res.write(JSON.stringify(answer));
|
||||||
|
res.end();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sendError(res, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -261,10 +267,9 @@ var errorcodes = [ "Generic Error", "Not logged in", "Invalid data" ];
|
||||||
|
|
||||||
function sendError(res, ecode) {
|
function sendError(res, ecode) {
|
||||||
res.writeHead(200, { "Content-Type": "text/plain" });
|
res.writeHead(200, { "Content-Type": "text/plain" });
|
||||||
if (ecode < errorcodes.length && ecode > 0)
|
if (!(ecode >= 0 && ecode < errorcodes.length))
|
||||||
res.write("E" + ecode + '\n' + errorcodes[ecode] + '\n');
|
ecode = 0;
|
||||||
else
|
res.write(JSON.stringify({"t": "E", "c": ecode, "s": errorcodes[ecode]}));
|
||||||
res.write("E0\nGeneric Error\n");
|
|
||||||
res.end();
|
res.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -309,7 +314,6 @@ function handler(req, res) {
|
||||||
cterm.write(keybuf);
|
cterm.write(keybuf);
|
||||||
}
|
}
|
||||||
readFeed(res, cterm);
|
readFeed(res, cterm);
|
||||||
res.end();
|
|
||||||
}
|
}
|
||||||
else if (target == "/login") {
|
else if (target == "/login") {
|
||||||
login(req, res, formdata);
|
login(req, res, formdata);
|
||||||
|
|
@ -326,7 +330,6 @@ function handler(req, res) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
readFeed(res, cterm);
|
readFeed(res, cterm);
|
||||||
res.end();
|
|
||||||
}
|
}
|
||||||
/* Default page, create a new term */
|
/* Default page, create a new term */
|
||||||
/* FIXME New term not created anymore, is a special case still needed? */
|
/* FIXME New term not created anymore, is a special case still needed? */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue