v1.18.x
barisusakli 11 years ago
commit c213f77f91

@ -137,8 +137,8 @@ Loader.addClusterEvents = function(callback) {
Loader.primaryWorker = parseInt(worker.id, 10); Loader.primaryWorker = parseInt(worker.id, 10);
} }
break; break;
case 'user:connect': // case 'user:connect':
case 'user:disconnect': // case 'user:disconnect':
case 'config:update': case 'config:update':
Loader.notifyWorkers(message); Loader.notifyWorkers(message);
break; break;

@ -15,7 +15,8 @@ usersController.getOnlineUsers = function(req, res, next) {
user.getUsersFromSet('users:online', 0, 49, next); user.getUsersFromSet('users:online', 0, 49, next);
}, },
count: function(next) { count: function(next) {
next(null, websockets.getConnectedClients().length); var now = Date.now();
db.sortedSetCount('users:online', now - 300000, now, next);
}, },
isAdministrator: function(next) { isAdministrator: function(next) {
user.isAdministrator(uid, next); user.isAdministrator(uid, next);

@ -24,47 +24,6 @@ var SocketIO = require('socket.io'),
var io; var io;
var onlineUsers = [];
process.on('message', onMessage);
function onMessage(msg) {
if (typeof msg !== 'object') {
return;
}
if (msg.action === 'user:connect') {
if (msg.uid && onlineUsers.indexOf(msg.uid) === -1) {
onlineUsers.push(msg.uid);
}
} else if(msg.action === 'user:disconnect') {
if (msg.uid && msg.socketCount <= 1) {
var index = onlineUsers.indexOf(msg.uid);
if (index !== -1) {
onlineUsers.splice(index, 1);
}
}
}
}
function onUserConnect(uid, socketid) {
var msg = {action: 'user:connect', uid: uid, socketid: socketid};
if (process.send) {
process.send(msg);
} else {
onMessage(msg);
}
}
function onUserDisconnect(uid, socketid, socketCount) {
var msg = {action: 'user:disconnect', uid: uid, socketid: socketid, socketCount: socketCount};
if (process.send) {
process.send(msg);
} else {
onMessage(msg);
}
}
Sockets.init = function(server) { Sockets.init = function(server) {
var config = { var config = {
transports: ['polling', 'websocket'], transports: ['polling', 'websocket'],
@ -131,7 +90,6 @@ Sockets.init = function(server) {
logger.io_one(socket, socket.uid); logger.io_one(socket, socket.uid);
if (socket.uid) { if (socket.uid) {
onUserConnect(socket.uid, socket.id);
socket.join('uid_' + socket.uid); socket.join('uid_' + socket.uid);
socket.join('online_users'); socket.join('online_users');
@ -174,8 +132,6 @@ Sockets.init = function(server) {
socket.broadcast.emit('event:user_status_change', {uid: socket.uid, status: 'offline'}); socket.broadcast.emit('event:user_status_change', {uid: socket.uid, status: 'offline'});
} }
onUserDisconnect(socket.uid, socket.id, socketCount);
// for(var roomName in io.sockets.manager.roomClients[socket.id]) { // for(var roomName in io.sockets.manager.roomClients[socket.id]) {
// if (roomName.indexOf('topic') !== -1) { // if (roomName.indexOf('topic') !== -1) {
// io.sockets.in(roomName.slice(1)).emit('event:user_leave', socket.uid); // io.sockets.in(roomName.slice(1)).emit('event:user_leave', socket.uid);
@ -291,10 +247,6 @@ Sockets.getSocketCount = function() {
return Array.isArray(clients) ? clients.length : 0; return Array.isArray(clients) ? clients.length : 0;
}; };
Sockets.getConnectedClients = function() {
return onlineUsers;
};
Sockets.getUserSocketCount = function(uid) { Sockets.getUserSocketCount = function(uid) {
return 0; return 0;
@ -305,10 +257,6 @@ Sockets.getUserSocketCount = function(uid) {
return roomClients.length; return roomClients.length;
}; };
Sockets.getOnlineUserCount = function () {
return onlineUsers.length;
};
Sockets.getOnlineAnonCount = function () { Sockets.getOnlineAnonCount = function () {
return 0; return 0;

@ -86,11 +86,15 @@ SocketMeta.rooms.enter = function(socket, data, callback) {
}; };
SocketMeta.rooms.getAll = function(socket, data, callback) { SocketMeta.rooms.getAll = function(socket, data, callback) {
var rooms = {}; //websockets.server.sockets.manager.rooms; doesnt work in socket.io 1.x db.sortedSetCount('users:online', now - 300000, now, function(err, onlineRegisteredCount) {
if (err) {
return callback(err);
}
var rooms = {}; //websockets.server.sockets.manager.rooms; doesnt work in socket.io 1.x
var socketData = { var socketData = {
onlineGuestCount: websockets.getOnlineAnonCount(), onlineGuestCount: websockets.getOnlineAnonCount(),
onlineRegisteredCount: websockets.getOnlineUserCount(), onlineRegisteredCount: onlineRegisteredCount,
socketCount: websockets.getSocketCount(), socketCount: websockets.getSocketCount(),
users: { users: {
home: rooms['/home'] ? rooms['/home'].length : 0, home: rooms['/home'] ? rooms['/home'].length : 0,
@ -143,6 +147,7 @@ SocketMeta.rooms.getAll = function(socket, data, callback) {
callback(null, socketData); callback(null, socketData);
}); });
});
}; };
/* Exports */ /* Exports */

@ -46,8 +46,10 @@ SocketPosts.reply = function(socket, data, callback) {
socket.emit('event:new_post', result); socket.emit('event:new_post', result);
var uids = websockets.getConnectedClients(); user.getUidsFromSet('users:online', 0, -1, function(err, uids) {
if (err) {
return;
}
privileges.categories.filterUids('read', postData.topic.cid, uids, function(err, uids) { privileges.categories.filterUids('read', postData.topic.cid, uids, function(err, uids) {
if (err) { if (err) {
return; return;
@ -64,6 +66,7 @@ SocketPosts.reply = function(socket, data, callback) {
}); });
}); });
}); });
});
}; };
SocketPosts.upvote = function(socket, data, callback) { SocketPosts.upvote = function(socket, data, callback) {

@ -41,7 +41,10 @@ SocketTopics.post = function(socket, data, callback) {
socket.emit('event:new_post', {posts: [result.postData]}); socket.emit('event:new_post', {posts: [result.postData]});
socket.emit('event:new_topic', result.topicData); socket.emit('event:new_topic', result.topicData);
var uids = websockets.getConnectedClients(); user.getUidsFromSet('users:online', 0, -1, function(err, uids) {
if (err) {
return;
}
privileges.categories.filterUids('read', result.topicData.cid, uids, function(err, uids) { privileges.categories.filterUids('read', result.topicData.cid, uids, function(err, uids) {
if (err) { if (err) {
@ -60,6 +63,7 @@ SocketTopics.post = function(socket, data, callback) {
}); });
}); });
}); });
});
}; };
SocketTopics.enter = function(socket, tid, callback) { SocketTopics.enter = function(socket, tid, callback) {

@ -137,11 +137,14 @@ var async = require('async'),
User.updateLastOnlineTime = function(uid, callback) { User.updateLastOnlineTime = function(uid, callback) {
callback = callback || function() {}; callback = callback || function() {};
User.getUserFields(uid, ['status', 'lastonline'], function(err, userData) { User.getUserFields(uid, ['status', 'lastonline'], function(err, userData) {
if(err || userData.status === 'offline' || Date.now() - parseInt(userData.lastonline, 10) < 300000) { var now = Date.now();
if(err || userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) {
return callback(err); return callback(err);
} }
User.setUserField(uid, 'lastonline', Date.now(), callback); db.sortedSetAdd('users:online', now, uid);
User.setUserField(uid, 'lastonline', now, callback);
}); });
}; };
@ -184,15 +187,20 @@ var async = require('async'),
}); });
}; };
User.getUsersFromSet = function(set, start, stop, callback) { User.getUidsFromSet = function(set, start, stop, callback) {
async.waterfall([
function(next) {
if (set === 'users:online') { if (set === 'users:online') {
var uids = require('./socket.io').getConnectedClients(); var count = parseInt(stop, 10) === -1 ? stop : stop - start + 1;
next(null, uids.slice(start, stop + 1)); var now = Date.now();
db.getSortedSetRevRangeByScore(set, start, count, now, now - 300000, next);
} else { } else {
db.getSortedSetRevRange(set, start, stop, next); db.getSortedSetRevRange(set, start, stop, next);
} }
};
User.getUsersFromSet = function(set, start, stop, callback) {
async.waterfall([
function(next) {
User.getUidsFromSet(set, start, stop, next);
}, },
function(uids, next) { function(uids, next) {
User.getUsers(uids, next); User.getUsers(uids, next);

Loading…
Cancel
Save