2015-08-05 14:18:47 +00:00
|
|
|
#!/usr/bin/env node
|
|
|
|
|
|
|
|
/**
|
|
|
|
* blessed-telnet.js
|
|
|
|
* https://github.com/chjj/blessed
|
|
|
|
* Copyright (c) 2013-2015, Christopher Jeffrey (MIT License)
|
|
|
|
* A blessed telnet server.
|
|
|
|
* See: https://github.com/TooTallNate/node-telnet
|
|
|
|
*/
|
|
|
|
|
|
|
|
process.title = 'blessed-telnet';
|
|
|
|
|
|
|
|
var fs = require('fs');
|
2015-08-08 04:02:26 +00:00
|
|
|
var path = require('path');
|
2015-08-05 14:18:47 +00:00
|
|
|
var blessed = require('blessed');
|
2015-09-03 01:48:05 +00:00
|
|
|
var telnet = require('telnet2');
|
2015-08-06 10:27:18 +00:00
|
|
|
|
2015-09-03 01:48:05 +00:00
|
|
|
var server = telnet({ tty: true }, function(client) {
|
2015-08-08 22:02:53 +00:00
|
|
|
client.on('debug', function(msg) {
|
|
|
|
console.error(msg);
|
|
|
|
});
|
|
|
|
|
2015-09-03 01:48:05 +00:00
|
|
|
client.on('term', function(terminal) {
|
|
|
|
screen.terminal = terminal;
|
|
|
|
screen.render();
|
2015-08-05 14:18:47 +00:00
|
|
|
});
|
|
|
|
|
2015-09-03 01:48:05 +00:00
|
|
|
client.on('size', function(width, height) {
|
|
|
|
client.columns = width;
|
|
|
|
client.rows = height;
|
|
|
|
client.emit('resize');
|
2015-08-05 14:18:47 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
var screen = blessed.screen({
|
|
|
|
smartCSR: true,
|
|
|
|
input: client,
|
|
|
|
output: client,
|
2015-08-09 10:14:03 +00:00
|
|
|
terminal: 'xterm-256color',
|
|
|
|
fullUnicode: true
|
2015-08-05 14:18:47 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
client.on('close', function() {
|
|
|
|
if (!screen.destroyed) {
|
|
|
|
screen.destroy();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
screen.on('destroy', function() {
|
|
|
|
if (client.writable) {
|
|
|
|
client.destroy();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if (test === 'widget-simple') {
|
|
|
|
return simpleTest(screen);
|
|
|
|
}
|
|
|
|
|
|
|
|
loadTest(screen, test);
|
|
|
|
});
|
|
|
|
|
|
|
|
function simpleTest(screen) {
|
|
|
|
screen.data.main = blessed.box({
|
|
|
|
parent: screen,
|
|
|
|
width: '80%',
|
|
|
|
height: '90%',
|
|
|
|
border: 'line',
|
|
|
|
content: 'Welcome to my server. Here is your own private session.',
|
|
|
|
style: {
|
|
|
|
bg: 'red'
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
screen.key('i', function() {
|
|
|
|
screen.data.main.style.bg = 'blue';
|
|
|
|
screen.render();
|
|
|
|
});
|
|
|
|
|
2015-08-08 04:02:26 +00:00
|
|
|
screen.key(['C-c', 'q'], function(ch, key) {
|
|
|
|
screen.destroy();
|
|
|
|
});
|
|
|
|
|
2015-08-05 14:18:47 +00:00
|
|
|
screen.render();
|
|
|
|
}
|
|
|
|
|
2015-08-08 12:04:06 +00:00
|
|
|
var test = process.argv[2] || path.resolve(__dirname, '../test/widget-shadow.js');
|
2015-08-08 04:02:26 +00:00
|
|
|
if (~test.indexOf('widget-png.js')) process.argv.length = 2;
|
|
|
|
test = path.resolve(process.cwd(), test);
|
2015-08-05 14:18:47 +00:00
|
|
|
|
|
|
|
function loadTest(screen, name) {
|
|
|
|
var Screen = blessed.screen;
|
|
|
|
blessed.screen = function() { return screen; };
|
2015-08-08 04:02:26 +00:00
|
|
|
var path = require.resolve(name);
|
2015-08-05 14:18:47 +00:00
|
|
|
delete require.cache[path];
|
2015-08-08 04:02:26 +00:00
|
|
|
require(name);
|
2015-08-05 14:18:47 +00:00
|
|
|
blessed.screen = Screen;
|
|
|
|
}
|
|
|
|
|
|
|
|
server.listen(2300);
|
|
|
|
console.log('Listening on 2300...');
|