- Save TooTallNate/2209310 to your computer and use it in GitHub Desktop.
Running a "full-featured" REPL using a net.Server and net.Socket
| var net = require('net') | |
| var sock = net.connect(1337) | |
| process.stdin.pipe(sock) | |
| sock.pipe(process.stdout) | |
| sock.on('connect', function () { | |
| process.stdin.resume(); | |
| process.stdin.setRawMode(true) | |
| }) | |
| sock.on('close', function done () { | |
| process.stdin.setRawMode(false) | |
| process.stdin.pause() | |
| sock.removeListener('close', done) | |
| }) | |
| process.stdin.on('end', function () { | |
| sock.destroy() | |
| console.log() | |
| }) | |
| process.stdin.on('data', function (b) { | |
| if (b.length === 1 && b[0] === 4) { | |
| process.stdin.emit('end') | |
| } | |
| }) |
| var repl = require('repl') | |
| var net = require('net') | |
| net.createServer(function (socket) { | |
| var r = repl.start({ | |
| prompt: 'socket '+socket.remoteAddress+':'+socket.remotePort+'> ' | |
| , input: socket | |
| , output: socket | |
| , terminal: true | |
| , useGlobal: false | |
| }) | |
| r.on('exit', function () { | |
| socket.end() | |
| }) | |
| r.context.socket = socket | |
| }).listen(1337) |