feature(config) add sockets

This commit is contained in:
coderaiser 2014-11-06 10:40:39 -05:00
parent 55838d4937
commit 77244abfb1
3 changed files with 118 additions and 23 deletions

View file

@ -1,4 +1,4 @@
var CloudCmd, Util, DOM;
var CloudCmd, Util, DOM, io;
(function(CloudCmd, Util, DOM) {
'use strict';
@ -29,11 +29,57 @@ var CloudCmd, Util, DOM;
function(callback) {
Loading = false;
Util.exec(callback);
DOM.loadSocket(initSocket);
},
Config.show
]);
}
function getHost() {
var l = location,
href = l.origin || l.protocol + '//' + l.host;
return href;
}
function initSocket(error) {
var socket,
href = getHost(),
FIVE_SECONDS = 5000,
save = function(data) {
socket.send(data);
};
if (!error) {
socket = io.connect(href + '/config', {
'max reconnection attempts' : Math.pow(2, 32),
'reconnection limit' : FIVE_SECONDS
});
socket.on('connect', function() {
Config.save = save;
});
socket.on('message', function(data) {
onSave(data);
});
socket.on('log', function(msg) {
Util.log(msg);
});
socket.on('disconnect', function() {
Config.save = saveHttp;
});
socket.on('err', function(error) {
Util.log(error);
});
}
}
Config.save = saveHttp;
this.show = function() {
var prefix = CloudCmd.PREFIX,
exec = Util.exec,
@ -84,10 +130,7 @@ var CloudCmd, Util, DOM;
Util.forEach(inputs, function(input) {
Events.add('change', input, onChange)
.addKey(input, onKey)
.addClick(input, function(event) {
event.preventDefault();
});
.addKey(input, onKey);
});
CloudCmd.View.show(div, {
@ -122,24 +165,22 @@ var CloudCmd, Util, DOM;
function onChange(event) {
var data,
Config = DOM.RESTful.Config,
obj = {},
el = event.target,
name = el.id,
type = el.type;
obj[name] =
data = getValue(el);
if (type === 'checkbox')
if (el.id === 'localStorage')
onLocalStorageChange(data);
data = onLocalStorageChange(data);
else if (el.id === 'diff')
onLSChange(data);
data = onLSChange(data);
else if (el.id === 'buffer')
onLSChange(data);
data = onLSChange(data);
else if (el.id === 'dirStorage')
onLSChange(data);
data = onLSChange(data);
else if (el.id === 'auth')
onAuthChange(data);
@ -148,10 +189,27 @@ var CloudCmd, Util, DOM;
Notify.request();
}
Config.write(obj, function() {
obj[name] = data;
Config.save(obj);
}
function onSave(obj) {
Object.keys(obj).forEach(function(name) {
var data = obj[name];
CONFIG[name] = data;
DOM.Files.set('config', CONFIG);
setValue(el, data);
setValue(name, data);
});
DOM.Files.set('config', CONFIG);
}
function saveHttp(obj, callback) {
var RESTful = DOM.RESTful;
RESTful.Config.write(obj, function() {
onSave(obj);
});
}
@ -175,8 +233,9 @@ var CloudCmd, Util, DOM;
return data;
}
function setValue(el, value) {
var type = el.type;
function setValue(name, value) {
var el = DOM.getById(name, Element),
type = el.type;
switch(type) {
case 'checkbox':
@ -190,18 +249,20 @@ var CloudCmd, Util, DOM;
}
function onLocalStorageChange(checked) {
var elDiff = DOM.getById('diff', Element),
var elLocalStorage = DOM.getById('localStorage', Element),
elDiff = DOM.getById('diff', Element),
elBuffer = DOM.getById('buffer', Element),
elDirStorage = DOM.getById('dirStorage', Element),
isChecked = elDiff.checked || elBuffer.checked || elDirStorage.checked,
msg = 'Diff, Buffer and Directory Storage do not work without localStorage';
if (!checked && isChecked) {
if (isChecked && !elLocalStorage.checked) {
alert(msg);
checked =
elDiff.checked =
elBuffer.checked =
elDirStorage.checked = false;
elDirStorage.checked = false;
onChange({
target: elDiff
@ -211,16 +272,17 @@ var CloudCmd, Util, DOM;
target: elBuffer
});
}
return checked;
}
function onLSChange(checked) {
var element = DOM.getById('localStorage', Element);
if (!element.checked && checked) {
onLocalStorageChange(element.checked);
}
if (checked && !element.checked)
checked = onLocalStorageChange(checked);
return element.checked;
return checked;
}
function onAuthChange(checked) {

View file

@ -58,6 +58,7 @@
});
terminal(socket);
config.socket(socket);
};
function cloudcmd() {

View file

@ -31,6 +31,7 @@
module.exports = set;
module.exports.save = save;
module.exports.socket = socket;
function set(key, value) {
var result;
@ -59,6 +60,37 @@
});
}
function socket(sock) {
Util.check(arguments, ['socket']);
sock.of('/config')
.on('connection', function(socket) {
socket.on('message', function(json) {
var data,
is = Util.type.object(json);
if (!is) {
socket.emit('err', Error('wrong data type'));
} else {
Object.keys(json).forEach(function(name) {
data = CloudFunc.formatMsg('config', name);
set(name, json[name]);
});
save(function(error) {
if (error) {
socket.emit('error', error);
} else {
socket.broadcast.send(json);
socket.send(json);
socket.emit('log', data);
}
});
}
});
});
}
function middle(req, res, next) {
if (req.url !== apiURL + '/config') {
next();