Mercurial > hg > rlgwebd
comparison webtty.js @ 9:826a7ced69f8
Make the emulator screen resizable.
| author | John "Elwin" Edwards <elwin@sdf.org> | 
|---|---|
| date | Wed, 09 May 2012 13:38:05 -0700 | 
| parents | d1b3c3af34d6 | 
| children | d051aad3e95f | 
   comparison
  equal
  deleted
  inserted
  replaced
| 8:ad0a31e52007 | 9:826a7ced69f8 | 
|---|---|
| 12 var env_dontuse = {"TMUX": true, "TMUX_PANE": true}; | 12 var env_dontuse = {"TMUX": true, "TMUX_PANE": true}; | 
| 13 | 13 | 
| 14 /* Constructor for TermSessions. Note that it opens the terminal and | 14 /* Constructor for TermSessions. Note that it opens the terminal and | 
| 15 * adds itself to the sessions dict. | 15 * adds itself to the sessions dict. | 
| 16 */ | 16 */ | 
| 17 function TermSession(sessid) { | 17 function TermSession(sessid, h, w) { | 
| 18 /* Set up the sizes. */ | |
| 19 w = Math.floor(Number(w)); | |
| 20 if (!(w > 0 && w < 256)) | |
| 21 w = 80; | |
| 22 this.w = w; | |
| 23 h = Math.floor(Number(h)); | |
| 24 if (!(h > 0 && h < 256)) | |
| 25 h = 25; | |
| 26 this.h = h; | |
| 27 /* Customize the environment. */ | |
| 18 var childenv = {}; | 28 var childenv = {}; | 
| 19 for (var key in process.env) { | 29 for (var key in process.env) { | 
| 20 if (!(key in env_dontuse)) | 30 if (!(key in env_dontuse)) | 
| 21 childenv[key] = process.env[key]; | 31 childenv[key] = process.env[key]; | 
| 22 } | 32 } | 
| 23 childenv["PTYHELPER"] = "25x80"; | 33 childenv["PTYHELPER"] = String(this.h) + "x" + String(this.w); | 
| 24 // Should setsid get set? | 34 // Should setsid get set? | 
| 25 var spawnopts = {"env": childenv, "cwd": process.env["HOME"]}; | 35 var spawnopts = {"env": childenv, "cwd": process.env["HOME"]}; | 
| 26 this.child = child_process.spawn(ptyhelp, ["bash"], spawnopts); | 36 this.child = child_process.spawn(ptyhelp, ["bash"], spawnopts); | 
| 27 var ss = this; | 37 var ss = this; | 
| 28 /* Eventually we'll need to make sure the sessid isn't in use yet. */ | 38 /* Eventually we'll need to make sure the sessid isn't in use yet. */ | 
| 152 } | 162 } | 
| 153 | 163 | 
| 154 function login(req, res, formdata) { | 164 function login(req, res, formdata) { | 
| 155 var resheaders = {'Content-Type': 'text/plain'}; | 165 var resheaders = {'Content-Type': 'text/plain'}; | 
| 156 var sessid = randkey(); | 166 var sessid = randkey(); | 
| 157 var nsession = new TermSession(sessid); | 167 /* The TermSession constructor will check these thoroughly too, but | 
| 168 * you can't be too suspicious of client-supplied data. */ | |
| 169 var w = 80; | |
| 170 var h = 25; | |
| 171 var t; | |
| 172 if ("w" in formdata) { | |
| 173 t = Math.floor(Number(formdata["w"])); | |
| 174 if (t > 0 && t < 256) | |
| 175 w = t; | |
| 176 } | |
| 177 if ("h" in formdata) { | |
| 178 t = Math.floor(Number(formdata["h"])); | |
| 179 if (t > 0 && t < 256) | |
| 180 h = t; | |
| 181 } | |
| 182 var nsession = new TermSession(sessid, h, w); | |
| 158 resheaders["Set-Cookie"] = "ID=" + sessid; | 183 resheaders["Set-Cookie"] = "ID=" + sessid; | 
| 159 res.writeHead(200, resheaders); | 184 res.writeHead(200, resheaders); | 
| 160 res.write("l1\n" + sessid + "\n"); | 185 res.write("l1\n" + sessid + "\n" + String(h) + "x" + String(w) + "\n"); | 
| 161 res.end(); | 186 res.end(); | 
| 162 console.log("Started new session with key " + sessid + ", pid " + nsession.child.pid); | 187 console.log("Started new session with key " + sessid + ", pid " + nsession.child.pid); | 
| 163 return; | 188 return; | 
| 164 } | 189 } | 
| 165 | 190 | 
