Mercurial > hg > rlgwebd
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++})); |