-
-
Save omega/1069367 to your computer and use it in GitHub Desktop.
| // | |
| // This server will start a bash shell and expose it | |
| // over socket.io to a browser. See ./term.html for the | |
| // client side. | |
| // | |
| // You should probably: | |
| // | |
| // npm install socket.io | |
| // curl -O https://github.com/LearnBoost/Socket.IO/raw/master/socket.io.min.js | |
| // | |
| // To get socket.io in the node_modules directory and | |
| // the socket.io.min.js file needed for the client. | |
| // | |
| // To start the server: | |
| // | |
| // node server.js | |
| // | |
| // And then load up your term! | |
| // | |
| // open http://`hostname`:8080/term.html | |
| // | |
| // You can even share the url with a friend on your | |
| // local network. Be sure they're a friend though :-) | |
| // | |
| var http = require('http'), | |
| url = require('url'), | |
| path = require('path'), | |
| fs = require('fs'), | |
| io = require('socket.io'), | |
| sys = require('sys'), | |
| util = require('util'), | |
| spawn = require('child_process').spawn; | |
| var sh = spawn('bash'); | |
| sh.stdout.on('data', function(data) { | |
| listener.sockets.emit("stdout", data); | |
| }); | |
| sh.stderr.on('data', function(data) { | |
| listener.sockets.emit("stderr", data); | |
| }); | |
| sh.on('exit', function (code) { | |
| listener.sockets.emit("exit", '** Shell exited: '+code+' **'); | |
| }); | |
| server = http.createServer(function(request, response){ | |
| var uri = url.parse(request.url).pathname; | |
| var filename = path.join(process.cwd(), uri); | |
| path.exists(filename, function(exists) { | |
| if (!exists) { | |
| response.writeHead(404, {'Content-Type':'text/plain'}); | |
| response.end("Can''t find it..."); | |
| } | |
| fs.readFile(filename, 'binary',function(err, file){ | |
| if (err) { | |
| response.writeHead(500, {'Content-Type':'text/plain'}); | |
| response.end(err + "\n"); | |
| return; | |
| } | |
| response.writeHead(200); | |
| response.write(file, 'binary'); | |
| response.end(); | |
| }); | |
| }); | |
| } | |
| ); | |
| server.listen(8080); | |
| var listener = io.listen(server); | |
| listener.sockets.on('connection', function(client){ | |
| client.on('message', function(data){ | |
| sh.stdin.write(data+"\n"); | |
| client.broadcast.send(new Buffer("> "+data)); | |
| }); | |
| }); |
| <!doctype html> | |
| <html> | |
| <head> | |
| <script src="http://code.jquery.com/jquery-latest.min.js"></script> | |
| <script src="/socket.io/socket.io.js" type="text/javascript" charset="utf-8"></script> | |
| <script type="text/javascript" charset="utf-8"> | |
| function add_content(str){ | |
| console.log(str); | |
| $('div').append('<p>' + $('<div/>').text(str).html() + '</p>'); | |
| $(window).scrollTop($('body').height() - $(window).height() + 80); | |
| } | |
| //var socket = new io.Socket(null, {rememberTransport: false, port: 8080}); | |
| var socket = io.connect('/'); | |
| socket.on('stdout', function(data) { | |
| add_content($.map(data, function(e,i) { | |
| return String.fromCharCode(e); | |
| }).join('')); | |
| }); | |
| $(function(){ | |
| $('form').submit(function(e){ | |
| var input = $('input'); | |
| socket.send(input.val()); | |
| input.val(''); | |
| return false; | |
| }); | |
| $('input').focus(); | |
| }); | |
| </script> | |
| <style type="text/css"> | |
| body, p, input { | |
| font-family: fixed; | |
| font-size: 13px; | |
| border: none; | |
| } | |
| p { white-space: pre; } | |
| p, form, input { margin:0; padding:0; } | |
| input:focus { outline: none; border: none; } | |
| </style> | |
| </head> | |
| <body> | |
| <div></div> | |
| <form> | |
| > <input> | |
| </form> | |
| </body> | |
| </html> |
Hi, (sorry for my poor English)
I'm tying to use your example, starting Server.js is good, but when i trying to connect term.html in a browser, this error appeared :
/var/www/socket/server.js:52
path.exists(filename, function(exists) {
^
TypeError: undefined is not a function
at Server. (/var/www/socket/server.js:52:10)
at Server. (/var/www/socket/node_modules/socket.io/node_modules/engine.io/lib/server.js:369:22)
at Server. (/var/www/socket/node_modules/socket.io/lib/index.js:258:16)
at Server.emit (events.js:110:17)
at HTTPParser.parserOnIncoming as onIncoming
at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
at Socket.socketOnData (_http_server.js:343:22)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
Help please, i don't understand why
Thank's for your answers, i continue trying....
Krzysiu
But it still faile to start: