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