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"); |