mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
feature(config) add sockets
This commit is contained in:
parent
55838d4937
commit
77244abfb1
3 changed files with 118 additions and 23 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
});
|
||||
|
||||
terminal(socket);
|
||||
config.socket(socket);
|
||||
};
|
||||
|
||||
function cloudcmd() {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue