comparison shterm.js @ 58:7a50b4412fea

Move credentials into the drivers. The session id, or whether the session is currently active on the server, are better handled in the drivers than in termemu.js.
author John "Elwin" Edwards <elwin@sdf.org>
date Tue, 19 Jun 2012 13:40:30 -0700
parents 155f3c104759
children d7eb63cd7a16
comparison
equal deleted inserted replaced
57:e7c864e80a79 58:7a50b4412fea
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 4
5 var isalive = false; // Whether the session is currently active.
5 var nsend = 0; // The number of the next packet to send. 6 var nsend = 0; // The number of the next packet to send.
6 var nrecv = 0; // The next packet expected. 7 var nrecv = 0; // The next packet expected.
7 var msgQ = []; // Queue for out-of-order messages. 8 var msgQ = []; // Queue for out-of-order messages.
8 9
9 // A state machine that keeps track of polling the server. 10 // A state machine that keeps track of polling the server.
145 debug(1, "Discarding packet " + response.n + ", expected " + nrecv); 146 debug(1, "Discarding packet " + response.n + ", expected " + nrecv);
146 } 147 }
147 } 148 }
148 149
149 function getData() { 150 function getData() {
150 if (!termemu.alive) 151 if (!isalive)
151 return; 152 return;
152 var datareq = new XMLHttpRequest(); 153 var datareq = new XMLHttpRequest();
153 datareq.onreadystatechange = function () { 154 datareq.onreadystatechange = function () {
154 if (datareq.readyState == 4 && datareq.status == 200) { 155 if (datareq.readyState == 4 && datareq.status == 200) {
155 var response = JSON.parse(this.responseText); 156 var response = JSON.parse(this.responseText);
156 if (!response.t) 157 if (!response.t)
157 return; 158 return;
158 else if (response.t == "E") { 159 else if (response.t == "E") {
159 if (response.c == 1) { 160 if (response.c == 1) {
160 termemu.alive = false; 161 isalive = false;
161 debug(1, "Server error: " + response.s); 162 debug(1, "Server error: " + response.s);
162 } 163 }
163 } 164 }
164 else if (response.t == "n") 165 else if (response.t == "n")
165 ajaxstate.gotnothing(); 166 ajaxstate.gotnothing();
180 var response = JSON.parse(this.responseText); 181 var response = JSON.parse(this.responseText);
181 if (!response.t || response.t == "n") 182 if (!response.t || response.t == "n")
182 return; 183 return;
183 else if (response.t == "E") { 184 else if (response.t == "E") {
184 if (response.c == 1) { 185 if (response.c == 1) {
185 termemu.alive = false; 186 isalive = false;
186 debug(1, "Server error: " + response.s); 187 debug(1, "Server error: " + response.s);
187 } 188 }
188 return; 189 return;
189 } 190 }
190 else if (response.t != "d") 191 else if (response.t != "d")
243 } 244 }
244 else { 245 else {
245 debug(1, "Ignoring keycode " + keynum); 246 debug(1, "Ignoring keycode " + keynum);
246 return; 247 return;
247 } 248 }
248 if (termemu.alive) 249 if (isalive)
249 ev.preventDefault(); 250 ev.preventDefault();
250 var formdata = {"t": "d", "n": nsend++, "d": code}; 251 var formdata = {"t": "d", "n": nsend++, "d": code};
251 var datareq = new XMLHttpRequest(); 252 var datareq = new XMLHttpRequest();
252 datareq.onreadystatechange = postResponseHandler; 253 datareq.onreadystatechange = postResponseHandler;
253 datareq.open('POST', '/feed', true); 254 datareq.open('POST', '/feed', true);
331 keydiv.className = "key"; 332 keydiv.className = "key";
332 return; 333 return;
333 } 334 }
334 335
335 function login(h, w) { 336 function login(h, w) {
336 if (termemu.alive) 337 if (isalive)
337 return; 338 return;
338 params = {"login": true, "h": h, "w": w}; 339 params = {"login": true, "h": h, "w": w};
339 var req = new XMLHttpRequest(); 340 var req = new XMLHttpRequest();
340 req.onreadystatechange = function () { 341 req.onreadystatechange = function () {
341 if (req.readyState == 4 && req.status == 200) { 342 if (req.readyState == 4 && req.status == 200) {
342 var logindict = JSON.parse(req.responseText); 343 var logindict = JSON.parse(req.responseText);
343 if (logindict.login) { 344 if (logindict.login) {
344 /* Success */ 345 /* Success */
345 termemu.resize(logindict.h, logindict.w); 346 termemu.resize(logindict.h, logindict.w);
346 termemu.alive = true; 347 isalive = true;
347 nsend = 0; 348 nsend = 0;
348 nrecv = 0; 349 nrecv = 0;
349 setTitle("Logged in"); 350 setTitle("Logged in");
350 debug(1, "Logged in with id " + logindict.id); 351 debug(1, "Logged in with id " + logindict.id);
351 getData(); 352 getData();
364 var req = new XMLHttpRequest(); 365 var req = new XMLHttpRequest();
365 req.onreadystatechange = function () { 366 req.onreadystatechange = function () {
366 if (req.readyState == 4 && req.status == 200) { 367 if (req.readyState == 4 && req.status == 200) {
367 /* Figure out whether or not it worked. */ 368 /* Figure out whether or not it worked. */
368 /* FIXME the server might respond with output. */ 369 /* FIXME the server might respond with output. */
369 termemu.alive = false; 370 isalive = false;
370 return; 371 return;
371 } 372 }
372 }; 373 };
373 req.open('POST', '/feed', true); 374 req.open('POST', '/feed', true);
374 req.send(JSON.stringify({"t": "q", "n": nsend++})); 375 req.send(JSON.stringify({"t": "q", "n": nsend++}));