refactor(socket) incapsulate

This commit is contained in:
coderaiser 2014-01-27 06:23:01 -05:00
parent 714647d3a5
commit e2caa26256
4 changed files with 141 additions and 71 deletions

View file

@ -5,6 +5,7 @@
"help",
"config",
"contact",
"socket",
"console", {
"name": "storage",
"data": [{

View file

@ -11,6 +11,7 @@ var CloudCmd, Util, DOM, CloudFunc, $;
function ConsoleProto(CallBack) {
var Name = 'Console',
Messages= [],
Loading,
jqconsole,
Element,
@ -24,15 +25,16 @@ var CloudCmd, Util, DOM, CloudFunc, $;
Loading = true;
Util.loadOnLoad([
addListeners,
CloudCmd.Socket,
Console.show,
load,
CloudCmd.View,
DOM.jqueryLoad,
DOM.socketLoad
]);
}
this.show = function() {
this.show = function(callback) {
if (!Loading) {
Images.showLoad({top:true});
@ -95,6 +97,8 @@ var CloudCmd, Util, DOM, CloudFunc, $;
}
});
}
Util.exec(callback);
});
}
};
@ -144,6 +148,60 @@ var CloudCmd, Util, DOM, CloudFunc, $;
});
}
function addListeners(callback) {
CloudCmd.Socket.on('message', function(msg) {
var parsed = Util.parseJSON(msg);
outToTerminal(parsed);
});
Util.exec(callback);
}
function outToTerminal(pMsg) {
var i, n, lResult, lStdout, lStderr,
lConsole = CloudCmd.Console;
DOM.Images.hideLoad();
if (Util.isObject(lConsole)) {
if (Messages.length) {
/* show oll msg from buffer */
for (i = 0, n = Messages.length; i < n; i++) {
lStdout = Messages[i].stdout;
lStderr = Messages[i].stderr;
if (lStdout)
lConsole.log(lStdout);
if (lStderr) {
/* if it's object - convert is to string' */
if (Util.isObject(lStderr))
lStderr = Util.stringifyJSON(lStderr);
lConsole.error(lStderr);
}
}
Messages = [];
}
lStdout = pMsg.stdout;
lStderr = pMsg.stderr;
if (lStdout)
lResult = lConsole.log(lStdout);
if (lStderr)
lResult = lConsole.error(lStderr);
}
else
Messages.push(pMsg);
Util.log(pMsg);
return lResult;
}
init();
}

View file

@ -699,14 +699,6 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
});
};
/**
* load socket.io
* @param pCallBack
*/
this.socketLoad = function(pCallBack) {
DOM.jsload('/lib/client/socket.js', pCallBack);
};
/**
* create new folder
*

View file

@ -4,20 +4,85 @@ var CloudCmd, Util, DOM, io;
(function(CloudCmd, Util, DOM) {
'use strict';
CloudCmd.Socket = new SocketProto(CloudCmd, Util, DOM);
CloudCmd.Socket = SocketProto;
function SocketProto(CloudCmd, Util, DOM) {
var Messages = [],
function SocketProto(callback) {
var Socket = function () {
Util.exec.apply(null, arguments);
},
AllListeners = {},
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.retFunc(Util.log, ERROR_MSG),
onload : connect
});
Socket.on = addListener;
Socket.addListener = addListener;
Socket.removeListener = removeListener;
Socket.send = send;
function init(callback) {
DOM.jsload('/socket.io/lib/socket.io.js', {
onerror : Util.retFunc(Util.log, ERROR_MSG),
onload : function() {
Util.exec(callback);
if (!socket)
connect();
}
});
}
function addListener(name, func) {
var listeners = AllListeners[name];
if (!listeners)
listeners = AllListeners[name] = [];
listeners.push(func);
if (func && socket)
socket.on(name, func);
}
function removeListener(name, func) {
var i, n, listeners;
if (socket)
socket.removeListener(name, func);
listeners = AllListeners[name];
if (listeners) {
n = listeners.length;
for (i = 0; i < n; i++)
if (listeners[i] === func)
listeners[i] = null;
}
}
function send(data) {
if (socket)
socket.send(data);
}
function setListeners(all, socket) {
var i, n, name, func, listeners;
for (name in all) {
listeners = all[name];
n = listeners.length;
for (i = 0; i < n; i++) {
func = listeners[i];
if (func && socket)
socket.on(name, func);
}
}
}
function connect() {
var FIVE_SECONDS = 5000;
@ -27,70 +92,24 @@ var CloudCmd, Util, DOM, io;
'reconnection limit' : FIVE_SECONDS
});
CloudCmd.Socket = socket;
socket.on('connect', function () {
outToTerminal({stdout: 'socket connected\n'});
Util.log('socket connected\n');
});
socket.on('message', function (msg) {
var lMsg = Util.parseJSON(msg);
outToTerminal(lMsg);
});
setListeners(AllListeners, socket);
socket.on('disconnect', function () {
outToTerminal({stderr: 'socket disconected\n'});
Util.log('socket disconected\n');
});
socket.on('reconnect_failed', function () {
Util.log('Could not reconnect. Reload page.');
});
}
function outToTerminal(pMsg) {
var i, n, lResult, lStdout, lStderr,
lConsole = CloudCmd.Console;
DOM.Images.hideLoad();
if (Util.isObject(lConsole)) {
if (Messages.length) {
/* show oll msg from buffer */
for (i = 0, n = Messages.length; i < n; i++) {
lStdout = Messages[i].stdout;
lStderr = Messages[i].stderr;
if (lStdout)
lConsole.log(lStdout);
if (lStderr) {
/* if it's object - convert is to string' */
if (Util.isObject(lStderr))
lStderr = Util.stringifyJSON(lStderr);
lConsole.error(lStderr);
}
}
Messages = [];
}
lStdout = pMsg.stdout;
lStderr = pMsg.stderr;
if (lStdout)
lResult = lConsole.log(lStdout);
if (lStderr)
lResult = lConsole.error(lStderr);
}
else
Messages.push(pMsg);
Util.log(pMsg);
return lResult;
}
init(callback);
return Socket;
}
})(CloudCmd, Util, DOM);