cloudcmd/lib/server/console.js
2014-08-26 05:41:02 -04:00

91 lines
2.6 KiB
JavaScript

(function() {
'use strict';
var DIR = '../',
DIR_SERVER = './',
Util = require(DIR + 'util'),
CloudFunc = require(DIR + 'cloudfunc'),
socket = require(DIR_SERVER + 'socket'),
spawnify = require(DIR_SERVER + 'spawnify'),
Clients = [],
addNewLine = CloudFunc.addNewLine,
ConNum = 0,
CWD = process.cwd(),
CHANNEL = CloudFunc.CHANNEL_CONSOLE;
module.exports = function() {
socket.on('connection', function(clientSocket) {
onConnection(clientSocket, function(json) {
socket.emit(CHANNEL, json, clientSocket);
});
});
};
function onConnection(clientSocket, callback) {
var msg, onDisconnect, onMessage;
++ConNum;
Util.checkArgs(arguments, ['clientSocket', 'callback']);
if (!Clients[ConNum]) {
msg = log(ConNum, 'console connected');
callback({
stdout : addNewLine(msg),
path : CWD
});
Clients[ConNum] = {
cwd : CWD
},
onMessage = function(command) {
log(ConNum, command);
spawnify(command, Clients[ConNum], callback);
},
onDisconnect = function(conNum) {
Clients[conNum] = null;
log(conNum, 'console disconnected');
socket.removeListener(CHANNEL, onMessage, clientSocket);
socket.removeListener('disconnect', onDisconnect, clientSocket);
}.bind(null, ConNum);
socket.on(CHANNEL, onMessage, clientSocket);
socket.on('disconnect', onDisconnect, clientSocket);
} else {
msg = log(ConNum, ' in use. Reconnecting...\n');
callback({
stdout: msg
});
socket.disconnect();
}
}
function log(connNum, str, typeParam) {
var ret,
type = ' ';
if (str) {
if (typeParam)
type += typeParam + ':';
ret = 'client #' + connNum + type + str;
Util.log(ret);
}
return ret;
}
})();