Mercurial > hg > rlgwebd
comparison rlgwebd.js @ 182:3c0e7697bb30
Begin moving TermSession methods into the prototype.
This should make a clearer line between general functionality and the
initialization of specific instances.
| author | John "Elwin" Edwards |
|---|---|
| date | Sat, 17 Jan 2015 19:57:40 -0500 |
| parents | 926b0780bc44 |
| children | db2f5ab112e9 |
comparison
equal
deleted
inserted
replaced
| 181:926b0780bc44 | 182:3c0e7697bb30 |
|---|---|
| 128 this.frameoff = 0; | 128 this.frameoff = 0; |
| 129 this.playerconn = wsReq.accept(null, wsReq.origin); | 129 this.playerconn = wsReq.accept(null, wsReq.origin); |
| 130 /* Array for watcher connections. */ | 130 /* Array for watcher connections. */ |
| 131 this.watchers = []; | 131 this.watchers = []; |
| 132 /* END setup */ | 132 /* END setup */ |
| 133 this.framepush = function(chunk) { | |
| 134 /* If this chunk resets the screen, discard what preceded it. */ | |
| 135 if (isclear(chunk)) { | |
| 136 this.framebuf = new Buffer(1024); | |
| 137 this.frameoff = 0; | |
| 138 } | |
| 139 /* Make sure there's space. */ | |
| 140 while (this.framebuf.length < chunk.length + this.frameoff) { | |
| 141 var nbuf = new Buffer(this.framebuf.length * 2); | |
| 142 this.framebuf.copy(nbuf, 0, 0, this.frameoff); | |
| 143 this.framebuf = nbuf; | |
| 144 if (this.framebuf.length > 65536) { | |
| 145 tslog("Warning: Game %s frame buffer at %d bytes", this.tag(), | |
| 146 this.framebuf.length); | |
| 147 } | |
| 148 } | |
| 149 chunk.copy(this.framebuf, this.frameoff); | |
| 150 this.frameoff += chunk.length; | |
| 151 }; | |
| 152 function ttyrec_chunk(datastr) { | 133 function ttyrec_chunk(datastr) { |
| 153 ss.lasttime = new Date(); | 134 ss.lasttime = new Date(); |
| 154 var buf = new Buffer(datastr); | 135 var buf = new Buffer(datastr); |
| 155 var chunk = new Buffer(buf.length + 12); | 136 var chunk = new Buffer(buf.length + 12); |
| 156 /* TTYREC headers */ | 137 /* TTYREC headers */ |
| 181 ttyrec_chunk(descstr); | 162 ttyrec_chunk(descstr); |
| 182 this.term.on("data", ttyrec_chunk); | 163 this.term.on("data", ttyrec_chunk); |
| 183 this.write = function(data) { | 164 this.write = function(data) { |
| 184 this.term.write(data); | 165 this.term.write(data); |
| 185 }; | 166 }; |
| 186 this.tag = function() { | |
| 187 return this.game.uname + "/" + this.pname; | |
| 188 }; | |
| 189 // Teardown. | 167 // Teardown. |
| 190 this.term.on("exit", function () { | 168 this.term.on("exit", function () { |
| 191 var tag = ss.tag(); | 169 var tag = ss.tag(); |
| 192 fs.unlink(ss.lock); | 170 fs.unlink(ss.lock); |
| 193 ss.record.end(); | 171 ss.record.end(); |
| 249 }); | 227 }); |
| 250 this.watchers.push(conn); | 228 this.watchers.push(conn); |
| 251 }; | 229 }; |
| 252 } | 230 } |
| 253 TermSession.prototype = new events.EventEmitter(); | 231 TermSession.prototype = new events.EventEmitter(); |
| 232 TermSession.prototype.tag = function () { | |
| 233 if (this.pname === undefined || this.game === undefined) | |
| 234 return ""; | |
| 235 return this.game.uname + "/" + this.pname; | |
| 236 }; | |
| 237 TermSession.prototype.framepush = function(chunk) { | |
| 238 /* If this chunk resets the screen, discard what preceded it. */ | |
| 239 if (isclear(chunk)) { | |
| 240 this.framebuf = new Buffer(1024); | |
| 241 this.frameoff = 0; | |
| 242 } | |
| 243 /* Make sure there's space. */ | |
| 244 while (this.framebuf.length < chunk.length + this.frameoff) { | |
| 245 var nbuf = new Buffer(this.framebuf.length * 2); | |
| 246 this.framebuf.copy(nbuf, 0, 0, this.frameoff); | |
| 247 this.framebuf = nbuf; | |
| 248 if (this.framebuf.length > 65536) { | |
| 249 tslog("Warning: Game %s frame buffer at %d bytes", this.tag(), | |
| 250 this.framebuf.length); | |
| 251 } | |
| 252 } | |
| 253 chunk.copy(this.framebuf, this.frameoff); | |
| 254 this.frameoff += chunk.length; | |
| 255 }; | |
| 254 | 256 |
| 255 function DglSession(filename) { | 257 function DglSession(filename) { |
| 256 var ss = this; | 258 var ss = this; |
| 257 events.EventEmitter.call(this); | 259 events.EventEmitter.call(this); |
| 258 var pathcoms = filename.split('/'); | 260 var pathcoms = filename.split('/'); |
