tconv
Version:
Conversations via terminal/command prompt
129 lines (113 loc) • 2.83 kB
JavaScript
var url = "http://tconv.herokuapp.com/";
var http = require('http');
var socket = require('socket.io-client')(url);
var term = require( 'terminal-kit' ).terminal;
var async = require('async');
var colors = require('colors');
var notifier = require('node-notifier');
colors.setTheme({
initiate: ['yellow'],
success: 'green',
promptuser: 'blue',
error: 'red',
newuser: ['cyan','dim'],
messageuser: ['grey', 'bold'],
messagedata: ['grey'],
prompt: ['blue']
});
socket.on('connect', function(){
console.log('Enter your nickname: '.prompt);
async.waterfall([
getusername,
transmitusername,
],function (error, result) {
if(error){
console.log('Something went wrong'.error);
}
else {
term.clear();
console.log('You are chatting as #'.success + socket.username.success);
setup();
}
})
});
socket.on('incoming user', function(msg){
if(msg != socket.username){
console.log(msg.newuser + ' has just joined'.newuser);
notifier.notify({
'title': 'New User',
'message': msg + ' has joined your room'
});
}
});
socket.on('incoming message', function(msg){
if(msg.user != socket.username){
console.log('#'.prompt + msg.user.messageuser + ' > '.prompt + msg.message.messagedata);
notifier.notify({
'title': msg.user,
'message': msg.message
});
}
});
socket.on('disconnect', function(){
term('I am disconnected');
});
http.get(url,function(res) {
res.on('data', function(d) {
})
}).on('error', function(error) {
console.log(error);
});
var getusername = function (callback) {
return term.inputField([],function (error, result) {
if(error){
callback(error);
}
else {
callback(null, result)
}
});
}
var transmitusername = function (username, callback) {
socket.username = username;
socket.emit('new user', username);
callback(null, true)
}
var getmessage = function (callback) {
return term.inputField([],function (error, result) {
callback(null, result)
});
}
var transmitmessage = function(message, callback){
socket.emit('new message',{
user: socket.username,
message: message
});
callback(null, true);
}
var setup = function () {
async.waterfall([
function (callback) {
callback(null)
},
getmessage,
transmitmessage
],function (error,result) {
if (error) {
console.log('Something went wrong'.error);
process.exit(0);
}
else {
console.log('');
setup();
}
});
}
term.on('key', function (name, matches, data) {
if ( name === 'CTRL_C' ){
console.log('tconv closing');
term.grabInput( false ) ;
setTimeout( function() { process.exit() } , 100 ) ;
}
})