Mercurial > hg > rlgwebd
comparison shterm.js @ 13:bf7c26d0b66d
webtty: switch upward protocol to JSON
Switch the client-to-server messages from the HTML forms format to
JSON (for the webtty app). Message numbers are sent but not yet used.
| author | John "Elwin" Edwards <elwin@sdf.org> |
|---|---|
| date | Sun, 13 May 2012 20:50:13 -0700 |
| parents | 9e1d83f50c9e |
| children | 155f3c104759 |
comparison
equal
deleted
inserted
replaced
| 12:9e1d83f50c9e | 13:bf7c26d0b66d |
|---|---|
| 1 /* shterm.js: browser-side JavaScript to handle I/O for termemu.js when it | 1 /* shterm.js: browser-side JavaScript to handle I/O for termemu.js when it |
| 2 * is running a shell via the webtty.js server. | 2 * is running a shell via the webtty.js server. |
| 3 */ | 3 */ |
| 4 | |
| 5 /* The number of the next packet to send. */ | |
| 6 var nsend = 0; | |
| 4 | 7 |
| 5 // A state machine that keeps track of polling the server. | 8 // A state machine that keeps track of polling the server. |
| 6 var ajaxstate = { | 9 var ajaxstate = { |
| 7 state: 0, | 10 state: 0, |
| 8 timerID: null, | 11 timerID: null, |
| 167 } | 170 } |
| 168 } | 171 } |
| 169 | 172 |
| 170 function sendback(str) { | 173 function sendback(str) { |
| 171 /* For responding to terminal queries. */ | 174 /* For responding to terminal queries. */ |
| 175 var formdata = {"t": "d", "n": nsend++, "d": str}; | |
| 172 var datareq = new XMLHttpRequest(); | 176 var datareq = new XMLHttpRequest(); |
| 173 datareq.onreadystatechange = postResponseHandler; | 177 datareq.onreadystatechange = postResponseHandler; |
| 174 datareq.open('POST', '/feed', true); | 178 datareq.open('POST', '/feed', true); |
| 175 datareq.send("keys=" + str); | 179 datareq.send(JSON.stringify(formdata)); |
| 176 return; | 180 return; |
| 177 } | 181 } |
| 178 | 182 |
| 179 function sendkey(ev) { | 183 function sendkey(ev) { |
| 180 var keynum = ev.keyCode; | 184 var keynum = ev.keyCode; |
| 212 debug(1, "Ignoring keycode " + keynum); | 216 debug(1, "Ignoring keycode " + keynum); |
| 213 return; | 217 return; |
| 214 } | 218 } |
| 215 if (termemu.alive) | 219 if (termemu.alive) |
| 216 ev.preventDefault(); | 220 ev.preventDefault(); |
| 221 var formdata = {"t": "d", "n": nsend++, "d": code}; | |
| 217 var datareq = new XMLHttpRequest(); | 222 var datareq = new XMLHttpRequest(); |
| 218 datareq.onreadystatechange = postResponseHandler; | 223 datareq.onreadystatechange = postResponseHandler; |
| 219 datareq.open('POST', '/feed', true); | 224 datareq.open('POST', '/feed', true); |
| 220 datareq.send("keys=" + code); | 225 datareq.send(JSON.stringify(formdata)); |
| 221 //dkey(code); | 226 //dkey(code); |
| 222 return; | 227 return; |
| 223 } | 228 } |
| 224 | 229 |
| 225 var charshifts = { '-': "5f", '=': "2b", '[': "7b", ']': "7d", '\\': "7c", | 230 var charshifts = { '-': "5f", '=': "2b", '[': "7b", ']': "7d", '\\': "7c", |
| 261 keystr = c.charCodeAt(0).toString(16); | 266 keystr = c.charCodeAt(0).toString(16); |
| 262 } | 267 } |
| 263 else | 268 else |
| 264 return; | 269 return; |
| 265 //writeData("Sending " + keystr); | 270 //writeData("Sending " + keystr); |
| 271 var formdata = {"t": "d", "n": nsend++, "d": code}; | |
| 266 var datareq = new XMLHttpRequest(); | 272 var datareq = new XMLHttpRequest(); |
| 267 datareq.onreadystatechange = postResponseHandler; | 273 datareq.onreadystatechange = postResponseHandler; |
| 268 datareq.open('POST', '/feed', true); | 274 datareq.open('POST', '/feed', true); |
| 269 datareq.send("keys=" + keystr); | 275 datareq.send(JSON.stringify(formdata)); |
| 270 return; | 276 return; |
| 271 } | 277 } |
| 272 | 278 |
| 273 function setup() { | 279 function setup() { |
| 274 keyHexCodes.init(); | 280 keyHexCodes.init(); |
| 298 } | 304 } |
| 299 | 305 |
| 300 function login(h, w) { | 306 function login(h, w) { |
| 301 if (termemu.alive) | 307 if (termemu.alive) |
| 302 return; | 308 return; |
| 309 params = {"login": true, "h": h, "w": w}; | |
| 303 var req = new XMLHttpRequest(); | 310 var req = new XMLHttpRequest(); |
| 304 req.onreadystatechange = function () { | 311 req.onreadystatechange = function () { |
| 305 if (req.readyState == 4 && req.status == 200) { | 312 if (req.readyState == 4 && req.status == 200) { |
| 306 var logindict = JSON.parse(req.responseText); | 313 var logindict = JSON.parse(req.responseText); |
| 307 if (logindict.login) { | 314 if (logindict.login) { |
| 308 /* Success */ | 315 /* Success */ |
| 309 termemu.resize(logindict.h, logindict.w); | 316 termemu.resize(logindict.h, logindict.w); |
| 310 termemu.alive = true; | 317 termemu.alive = true; |
| 318 nsend = 0; | |
| 311 setTitle("Logged in"); | 319 setTitle("Logged in"); |
| 312 debug(1, "Logged in with id " + logindict.id); | 320 debug(1, "Logged in with id " + logindict.id); |
| 313 getData(); | 321 getData(); |
| 314 return; | 322 return; |
| 315 } | 323 } |
| 316 return; | 324 return; |
| 317 } | 325 } |
| 318 }; | 326 }; |
| 319 req.open('POST', '/login', true); | 327 req.open('POST', '/login', true); |
| 320 req.send("login=login&h=" + String(h) + "&w=" + String(w)); | 328 req.send(JSON.stringify(params)); |
| 329 //req.send("login=login&h=" + String(h) + "&w=" + String(w)); | |
| 321 return; | 330 return; |
| 322 } | 331 } |
| 323 | 332 |
| 324 function stop() { | 333 function stop() { |
| 325 var req = new XMLHttpRequest(); | 334 var req = new XMLHttpRequest(); |
| 330 termemu.alive = false; | 339 termemu.alive = false; |
| 331 return; | 340 return; |
| 332 } | 341 } |
| 333 }; | 342 }; |
| 334 req.open('POST', '/feed', true); | 343 req.open('POST', '/feed', true); |
| 335 req.send("quit=quit"); | 344 req.send(JSON.stringify({"t": "q", "n": nsend++})); |
| 336 return; | 345 return; |
| 337 } | 346 } |
| 338 | 347 |
| 339 function setTitle(tstr) { | 348 function setTitle(tstr) { |
| 340 var titlespan = document.getElementById("ttitle"); | 349 var titlespan = document.getElementById("ttitle"); |
