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