lpio
Version:
The last dashboard app you'll ever need
53 lines (41 loc) • 1.59 kB
JavaScript
var _ = require('underscore');
var Q = require('q');
var log = require('./log');
exports.start = function start(io,socket) {
log.info("Socket "+socket.id+" Connected");
socket.on('registerDataIds', function (data) {
if(_.isArray(data.dataIds)){
log.info("joining "+data.dataIds.length+" rooms by "+socket.id);
var rooms = socket.rooms;
var new_rooms = data.dataIds;
new_rooms.push(socket.id);
var q_all = [];
_.difference(rooms,new_rooms).forEach( function(room){
log.info("leaving: " + room + " by: "+socket.id);
socket.leave(room);
});
_.difference(new_rooms,rooms).forEach( function(key, index){
var widget = data.dataIds[index];
var defer = Q.defer();
q_all.push(defer.promise);
socket.join(key,function(err){
if(err){
defer.reject(err);
return log.error(err,"Error joining room "+key);
}
log.info("joining: " + key);
defer.resolve(true);
// @TODO: get from cache
io.to(socket.id).emit('update',{});
});
}); // data.widgets.every
Q.all(q_all)
.catch(function(err){
log.error(err);
});
}
});
socket.on('disconnect', function () {
log.info("Socket "+socket.id+" Disconnected");
});
}