UNPKG

runtime-telnet-server

Version:
68 lines (63 loc) 1.98 kB
'use strict'; const runtime = require('runtimejs'); const net = require('net'); module.exports = (opts, cb) => { if (typeof opts === 'function') { cb = opts; opts = null; } opts = opts || {}; const server = net.createServer((client) => { let ondata; let defaultOndata = (data) => { if (data.substr(data.length-2) == '\r\n') data = data.substr(0, data.length-2); if (data.substr(data.length-1) == '\n') data = data.substr(0, data.length-1); if (data === 'exit') return client.end(); let arr = data.split(' '); let cmd = arr.shift(); let io = new runtime.stdio.StdioInterface(); io.onwrite = io.onwriteerror = (text) => { if (text.substr(text.length-1) == '\n') text = text.substr(0, text.length-1) + '\r\n'; client.write(text); } io.onread = (cb) => { ondata = (data) => { ondata = defaultOndata; cb(data.substr(0, 1)); } } io.onreadline = (cb) => { ondata = (data) => { if (data.substr(data.length-2) == '\r\n') data = data.substr(0, data.length-2); if (data.substr(data.length-1) == '\n') data = data.substr(0, data.length-1); ondata = defaultOndata; cb(data); } } try { const command = runtime.shell.runCommand(cmd, { stdio: io, args: arr }, (rescode) => { client.write('$ '); }); } catch(e) { let msg = e.stack; if (e instanceof TypeError && e.message === 'commands.get(...) is not a function') msg = `${cmd}: Command not found`; client.write(msg + '\r\n'); client.write('$ '); } } ondata = defaultOndata; client.on('data', (data) => { data = String(data); ondata(data); }); client.write('$ '); }); module.exports.exit = () => { server.close(); connections = null; } server.listen(opts.port || 9000, () => cb && cb()); }