Mercurial > hg > rlgwebd
comparison webtty.js @ 11:481dcee353c9
webtty: switch all server responses to JSON.
| author | John "Elwin" Edwards <elwin@sdf.org> |
|---|---|
| date | Fri, 11 May 2012 13:33:48 -0700 |
| parents | d051aad3e95f |
| children | bf7c26d0b66d |
comparison
equal
deleted
inserted
replaced
| 10:d051aad3e95f | 11:481dcee353c9 |
|---|---|
| 37 var ss = this; | 37 var ss = this; |
| 38 /* Eventually we'll need to make sure the sessid isn't in use yet. */ | 38 /* Eventually we'll need to make sure the sessid isn't in use yet. */ |
| 39 this.sessid = sessid; | 39 this.sessid = sessid; |
| 40 this.alive = true; | 40 this.alive = true; |
| 41 this.data = []; | 41 this.data = []; |
| 42 this.nsend = 0; | |
| 42 this.child.stdout.on("data", function (buf) { | 43 this.child.stdout.on("data", function (buf) { |
| 43 ss.data.push(buf); | 44 ss.data.push(buf); |
| 44 }); | 45 }); |
| 45 this.child.stderr.on("data", function (buf) { | 46 this.child.stderr.on("data", function (buf) { |
| 46 ss.data.push(buf); | 47 ss.data.push(buf); |
| 242 } | 243 } |
| 243 | 244 |
| 244 function readFeed(res, term) { | 245 function readFeed(res, term) { |
| 245 res.writeHead(200, { "Content-Type": "text/plain" }); | 246 res.writeHead(200, { "Content-Type": "text/plain" }); |
| 246 if (term) { | 247 if (term) { |
| 248 var answer = {}; | |
| 247 var result = term.read(); | 249 var result = term.read(); |
| 248 if (result == null) | 250 if (result == null) { |
| 249 resultstr = ""; | 251 answer["t"] = "n"; |
| 250 else | 252 } |
| 251 resultstr = result.toString("hex"); | 253 else { |
| 252 res.write("d" + resultstr.length.toString() + "\n" + resultstr + "\n"); | 254 answer["t"] = "d"; |
| 255 answer["d"] = result.toString("hex"); | |
| 256 answer["n"] = term.nsend++; | |
| 257 } | |
| 258 res.write(JSON.stringify(answer)); | |
| 259 res.end(); | |
| 253 } | 260 } |
| 254 else { | 261 else { |
| 255 //console.log("Where's the term?"); | 262 sendError(res, 1); |
| 256 res.write("d0\n\n"); | |
| 257 } | 263 } |
| 258 } | 264 } |
| 259 | 265 |
| 260 var errorcodes = [ "Generic Error", "Not logged in", "Invalid data" ]; | 266 var errorcodes = [ "Generic Error", "Not logged in", "Invalid data" ]; |
| 261 | 267 |
| 262 function sendError(res, ecode) { | 268 function sendError(res, ecode) { |
| 263 res.writeHead(200, { "Content-Type": "text/plain" }); | 269 res.writeHead(200, { "Content-Type": "text/plain" }); |
| 264 if (ecode < errorcodes.length && ecode > 0) | 270 if (!(ecode >= 0 && ecode < errorcodes.length)) |
| 265 res.write("E" + ecode + '\n' + errorcodes[ecode] + '\n'); | 271 ecode = 0; |
| 266 else | 272 res.write(JSON.stringify({"t": "E", "c": ecode, "s": errorcodes[ecode]})); |
| 267 res.write("E0\nGeneric Error\n"); | |
| 268 res.end(); | 273 res.end(); |
| 269 } | 274 } |
| 270 | 275 |
| 271 function handler(req, res) { | 276 function handler(req, res) { |
| 272 /* default headers for the response */ | 277 /* default headers for the response */ |
| 307 } | 312 } |
| 308 keybuf = new Buffer(hexstr, "hex"); | 313 keybuf = new Buffer(hexstr, "hex"); |
| 309 cterm.write(keybuf); | 314 cterm.write(keybuf); |
| 310 } | 315 } |
| 311 readFeed(res, cterm); | 316 readFeed(res, cterm); |
| 312 res.end(); | |
| 313 } | 317 } |
| 314 else if (target == "/login") { | 318 else if (target == "/login") { |
| 315 login(req, res, formdata); | 319 login(req, res, formdata); |
| 316 } | 320 } |
| 317 else { | 321 else { |
| 324 if (!cterm) { | 328 if (!cterm) { |
| 325 sendError(res, 1); | 329 sendError(res, 1); |
| 326 return; | 330 return; |
| 327 } | 331 } |
| 328 readFeed(res, cterm); | 332 readFeed(res, cterm); |
| 329 res.end(); | |
| 330 } | 333 } |
| 331 /* Default page, create a new term */ | 334 /* Default page, create a new term */ |
| 332 /* FIXME New term not created anymore, is a special case still needed? */ | 335 /* FIXME New term not created anymore, is a special case still needed? */ |
| 333 else if (target == '/') { | 336 else if (target == '/') { |
| 334 serveStatic(req, res, "/"); | 337 serveStatic(req, res, "/"); |
