Fixed cleaner might not clean user not in connected list and handle if the user socket not exist

This commit is contained in:
Wu Cheng-Han 2015-10-05 14:32:05 +08:00
parent 9586e2057f
commit 53f26a7771

View file

@ -103,13 +103,19 @@ var updater = setInterval(function () {
if (err) return logger.error('updater error', err); if (err) return logger.error('updater error', err);
}); });
}, 1000); }, 1000);
//clean when user not in any rooms //clean when user not in any rooms or user not in connected list
var cleaner = setInterval(function () { var cleaner = setInterval(function () {
async.each(Object.keys(users), function (key, callback) { async.each(Object.keys(users), function (key, callback) {
var socket = realtime.io.sockets.connected[key]; var socket = realtime.io.sockets.connected[key];
if (socket && (!socket.rooms || socket.rooms.length <= 0)) { if ((!socket && users[key]) ||
(socket && (!socket.rooms || socket.rooms.length <= 0))) {
if (config.debug) if (config.debug)
logger.info("cleaner found redundant user: " + key); logger.info("cleaner found redundant user: " + key);
if (!socket) {
socket = {
id: key
};
}
disconnectSocketQueue.push(socket); disconnectSocketQueue.push(socket);
disconnect(socket); disconnect(socket);
} }