cloudcmd/lib/client/socket.js
2013-06-25 10:47:10 +00:00

90 lines
No EOL
2.7 KiB
JavaScript

/* module make possible connectoin thrue socket.io on a client */
var CloudCmd, Util, DOM, jqconsole, io;
(function(CloudCmd, Util, DOM){
'use strict';
var Messages = [],
socket,
Terminal,
ERROR_MSG = 'could not connect to socket.io\n'+
'npm i socket.io';
DOM.jsload('/socket.io/lib/socket.io.js', {
onerror : Util.retExec(Util.log, ERROR_MSG),
onload : function(){
socket = io.connect(CloudCmd.HOST);
CloudCmd.Socket = socket;
socket.on('connect', function () {
outToTerminal({stdout: 'socket connected'});
});
socket.on('message', function (msg) {
var lMsg = Util.parseJSON(msg);
outToTerminal(lMsg);
});
socket.on('disconnect', function () {
outToTerminal({stderr: 'socket disconected'});
});
}
});
function outToTerminal(pMsg){
var lResult, lTerm, lStdout, lStderr;
var lEcho = function(pResult){
CloudCmd.Console.jqconsole.Write(pResult + '\n');
DOM.Images.hideLoad();
};
lTerm = {
echo : lEcho,
error : lEcho
};
if(CloudCmd.Console.jqconsole){
if(Messages.length){
/* show oll msg from buffer */
for(var i = 0, n = Messages.length; i < n; i++){
lStdout = Messages[i].stdout;
lStderr = Messages[i].stderr;
if(lStdout)
lTerm.echo(lStdout);
if(lStderr){
/* if it's object - convert is to string' */
if( Util.isObject(lStderr) )
lStderr = Util.stringifyJSON(lStderr);
lTerm.error(lStderr);
}
}
Messages = [];
}
lStdout = pMsg.stdout;
lStderr = pMsg.stderr;
if(lStdout)
lResult = lTerm.echo(lStdout);
if(lStderr && lStderr.code !== 1)
lResult = lTerm.error(lStderr.toString());
}
else
/* if term not accesable save msg to buffer */
Messages.push(pMsg);
Util.log(pMsg);
return lResult;
}
})(CloudCmd, Util, DOM);