mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-08 15:05:46 +01:00
auto update user counts dont transmit all room data
This commit is contained in:
@@ -3,14 +3,18 @@
|
|||||||
|
|
||||||
define('forum/admin/index', function() {
|
define('forum/admin/index', function() {
|
||||||
var Admin = {};
|
var Admin = {};
|
||||||
|
var updateIntervalId = 0;
|
||||||
Admin.init = function() {
|
Admin.init = function() {
|
||||||
|
|
||||||
app.enterRoom('admin');
|
app.enterRoom('admin');
|
||||||
socket.emit('meta.rooms.getAll', Admin.updateRoomUsage);
|
socket.emit('meta.rooms.getAll', Admin.updateRoomUsage);
|
||||||
|
|
||||||
socket.removeListener('event:meta.rooms.update', Admin.updateRoomUsage);
|
if (updateIntervalId) {
|
||||||
socket.on('event:meta.rooms.update', Admin.updateRoomUsage);
|
clearInterval(updateIntervalId);
|
||||||
|
}
|
||||||
|
updateIntervalId = setInterval(function() {
|
||||||
|
socket.emit('meta.rooms.getAll', Admin.updateRoomUsage);
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
$('#logout-link').on('click', function() {
|
$('#logout-link').on('click', function() {
|
||||||
$.post(RELATIVE_PATH + '/logout', {
|
$.post(RELATIVE_PATH + '/logout', {
|
||||||
@@ -93,54 +97,16 @@ define('forum/admin/index', function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Admin.updateRoomUsage = function(err, data) {
|
Admin.updateRoomUsage = function(err, data) {
|
||||||
|
if (err) {
|
||||||
var roomData = data.rooms;
|
return app.alertError(err.message);
|
||||||
|
|
||||||
function getUserCountIn(room) {
|
|
||||||
var count = 0;
|
|
||||||
for(var user in roomData[room]) {
|
|
||||||
if (roomData[room].hasOwnProperty(user)) {
|
|
||||||
++count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
console.log(data);
|
||||||
|
var html = '<strong>Online Users [ ' + data.onlineRegisteredCount + ' ]</strong><br/>' +
|
||||||
|
'<strong>Online Guests [ ' + data.onlineGuestCount + ' ]</strong><br/>' +
|
||||||
|
'<strong>Online Total [ ' + (data.onlineRegisteredCount + data.onlineGuestCount) + ' ]</strong><br/>' +
|
||||||
|
'<strong>Socket Connections [ ' + data.socketCount + ' ]</strong>';
|
||||||
|
|
||||||
var active_users = $('#active_users').html(''),
|
$('#active_users').html(html);
|
||||||
total = 0;
|
|
||||||
|
|
||||||
if(!active_users.length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var sortedData = [];
|
|
||||||
|
|
||||||
for (var room in roomData) {
|
|
||||||
if (room !== '') {
|
|
||||||
sortedData.push({room: room, count: roomData[room].length});
|
|
||||||
total += roomData[room].length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sortedData.sort(function(a, b) {
|
|
||||||
return parseInt(b.count, 10) - parseInt(a.count, 10);
|
|
||||||
});
|
|
||||||
|
|
||||||
var usersHtml = '';
|
|
||||||
for(var i=0; i<sortedData.length; ++i) {
|
|
||||||
usersHtml += "<div class='alert alert-success'><strong>" + sortedData[i].room + "</strong> " +
|
|
||||||
sortedData[i].count + " active user" + (sortedData[i].count > 1 ? "s" : "") + "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
var parent = active_users.parent();
|
|
||||||
parent.prepend('<hr/>');
|
|
||||||
parent.prepend('<strong>Online Total [ ' + (data.onlineRegisteredCount + data.onlineGuestCount) + ' ]</strong>');
|
|
||||||
parent.prepend('<strong>Online Guests [ ' + data.onlineGuestCount + ' ]</strong><br/>');
|
|
||||||
parent.prepend('<strong>Online Users [ ' + data.onlineRegisteredCount + ' ]</strong><br/>');
|
|
||||||
|
|
||||||
active_users.html(usersHtml);
|
|
||||||
$('#connections').html(total);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return Admin;
|
return Admin;
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ var onlineUsers = [];
|
|||||||
var uidToSocketId = {};
|
var uidToSocketId = {};
|
||||||
var socketIdToUid = {};
|
var socketIdToUid = {};
|
||||||
|
|
||||||
process.on('message', function(msg) {
|
process.on('message', onMessage);
|
||||||
|
|
||||||
|
function onMessage(msg) {
|
||||||
if (typeof msg !== 'object') {
|
if (typeof msg !== 'object') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -41,6 +43,7 @@ process.on('message', function(msg) {
|
|||||||
} else {
|
} else {
|
||||||
onlineUsersMap[msg.uid]++;
|
onlineUsersMap[msg.uid]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg.uid && onlineUsers.indexOf(msg.uid) === -1) {
|
if (msg.uid && onlineUsers.indexOf(msg.uid) === -1) {
|
||||||
onlineUsers.push(msg.uid);
|
onlineUsers.push(msg.uid);
|
||||||
}
|
}
|
||||||
@@ -52,14 +55,16 @@ process.on('message', function(msg) {
|
|||||||
}
|
}
|
||||||
socketIdToUid[msg.socketid] = msg.uid;
|
socketIdToUid[msg.socketid] = msg.uid;
|
||||||
} else if(msg.action === 'user:disconnect') {
|
} else if(msg.action === 'user:disconnect') {
|
||||||
|
if (onlineUsersMap[msg.uid]) {
|
||||||
|
onlineUsersMap[msg.uid] -= 1;
|
||||||
|
onlineUsersMap[msg.uid] = Math.max(0, onlineUsersMap[msg.uid]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg.uid && onlineUsersMap[msg.uid] === 0) {
|
||||||
var index = onlineUsers.indexOf(msg.uid);
|
var index = onlineUsers.indexOf(msg.uid);
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
onlineUsers.splice(index, 1);
|
onlineUsers.splice(index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (onlineUsersMap[msg.uid]) {
|
|
||||||
onlineUsersMap[msg.uid] -= 1;
|
|
||||||
onlineUsersMap[msg.uid] = Math.max(0, onlineUsersMap[msg.uid]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uidToSocketId[msg.uid]) {
|
if (uidToSocketId[msg.uid]) {
|
||||||
@@ -70,8 +75,25 @@ process.on('message', function(msg) {
|
|||||||
}
|
}
|
||||||
delete socketIdToUid[msg.socketid];
|
delete socketIdToUid[msg.socketid];
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
var msg = {action: 'user:disconnect', uid: uid, socketid: socketid};
|
||||||
|
if (process.send) {
|
||||||
|
process.send(msg);
|
||||||
|
} else {
|
||||||
|
onMessage(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Sockets.init = function(server) {
|
Sockets.init = function(server) {
|
||||||
var RedisStore = require('socket.io/lib/stores/redis'),
|
var RedisStore = require('socket.io/lib/stores/redis'),
|
||||||
@@ -128,9 +150,8 @@ Sockets.init = function(server) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
socket.uid = parseInt(uid, 10);
|
socket.uid = parseInt(uid, 10);
|
||||||
if (process.send) {
|
onUserConnect(uid, socket.id);
|
||||||
process.send({action: 'user:connect', uid: uid, socketid: socket.id});
|
|
||||||
}
|
|
||||||
/* If meta.config.loggerIOStatus > 0, logger.io_one will hook into this socket */
|
/* If meta.config.loggerIOStatus > 0, logger.io_one will hook into this socket */
|
||||||
logger.io_one(socket, uid);
|
logger.io_one(socket, uid);
|
||||||
|
|
||||||
@@ -181,9 +202,7 @@ Sockets.init = function(server) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.send) {
|
onUserDisconnect(uid, socket.id);
|
||||||
process.send({action: 'user:disconnect', uid: uid, socketid: socket.id});
|
|
||||||
}
|
|
||||||
|
|
||||||
emitOnlineUserCount();
|
emitOnlineUserCount();
|
||||||
|
|
||||||
@@ -270,6 +289,9 @@ Sockets.uidInRoom = function(uid, room) {
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Sockets.getSocketCount = function() {
|
||||||
|
return Object.keys(socketIdToUid).length;
|
||||||
|
}
|
||||||
Sockets.getConnectedClients = function() {
|
Sockets.getConnectedClients = function() {
|
||||||
return onlineUsers;
|
return onlineUsers;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ SocketMeta.rooms.getAll = function(socket, data, callback) {
|
|||||||
var userData = {
|
var userData = {
|
||||||
onlineGuestCount: websockets.getOnlineAnonCount(),
|
onlineGuestCount: websockets.getOnlineAnonCount(),
|
||||||
onlineRegisteredCount: websockets.getConnectedClients().length,
|
onlineRegisteredCount: websockets.getConnectedClients().length,
|
||||||
rooms: websockets.server.sockets.manager.rooms
|
socketCount: websockets.getSocketCount()
|
||||||
};
|
};
|
||||||
|
|
||||||
callback(null, userData);
|
callback(null, userData);
|
||||||
|
|||||||
Reference in New Issue
Block a user