mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-27 17:16:14 +01:00
proper tracking of users' reply status when others enter the room
This commit is contained in:
@@ -12,6 +12,7 @@ var posts = require('../posts'),
|
||||
async = require('async'),
|
||||
S = require('string'),
|
||||
winston = require('winston'),
|
||||
_ = require('underscore'),
|
||||
server = require('./'),
|
||||
|
||||
SocketModules = {};
|
||||
@@ -22,6 +23,27 @@ SocketModules.composer = {
|
||||
replyHash: {}
|
||||
};
|
||||
|
||||
var stopTracking = function(replyObj) {
|
||||
if (isLast(replyObj.uid, replyObj.tid)) {
|
||||
server.in('topic_' + replyObj.tid).emit('event:topic.replyStop', replyObj.uid);
|
||||
}
|
||||
|
||||
clearInterval(replyObj.timer);
|
||||
delete SocketModules.composer.replyHash[replyObj.uuid];
|
||||
},
|
||||
isLast = function(uid, tid) {
|
||||
return _.filter(SocketModules.composer.replyHash, function(replyObj, uuid) {
|
||||
if (
|
||||
parseInt(replyObj.tid, 10) === parseInt(tid, 10) &&
|
||||
parseInt(replyObj.uid, 10) === parseInt(uid, 10)
|
||||
) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}).length === 1;
|
||||
};
|
||||
|
||||
SocketModules.composer.push = function(socket, pid, callback) {
|
||||
if (socket.uid || parseInt(meta.config.allowGuestPosting, 10)) {
|
||||
if (parseInt(pid, 10) > 0) {
|
||||
@@ -90,8 +112,7 @@ SocketModules.composer.register = function(socket, data) {
|
||||
data.lastPing = Date.now();
|
||||
socket.emit('event:composer.ping', data.uuid);
|
||||
} else {
|
||||
server.in('topic_' + data.tid).emit('event:topic.replyStop', data.uid);
|
||||
delete SocketModules.composer.replyHash[data.uuid];
|
||||
stopTracking(data);
|
||||
}
|
||||
}, 1000*5); // Every 5 seconds...
|
||||
|
||||
@@ -101,9 +122,7 @@ SocketModules.composer.register = function(socket, data) {
|
||||
SocketModules.composer.unregister = function(socket, uuid) {
|
||||
var replyObj = SocketModules.composer.replyHash[uuid];
|
||||
if (uuid && replyObj) {
|
||||
server.in('topic_' + replyObj.tid).emit('event:topic.replyStop', replyObj.uid);
|
||||
clearInterval(replyObj.timer);
|
||||
delete SocketModules.composer.replyHash[replyObj.uuid];
|
||||
stopTracking(replyObj);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -114,6 +133,20 @@ SocketModules.composer.pingActive = function(socket, uuid) {
|
||||
}
|
||||
};
|
||||
|
||||
SocketModules.composer.getUsersByTid = function(socket, tid, callback) {
|
||||
// Return uids with active composers
|
||||
console.log(tid);
|
||||
callback(null, _.filter(SocketModules.composer.replyHash, function(replyObj, uuid) {
|
||||
if (parseInt(replyObj.tid, 10) === parseInt(tid, 10)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}).map(function(replyObj) {
|
||||
return replyObj.uid
|
||||
}));
|
||||
}
|
||||
|
||||
/* Chat */
|
||||
|
||||
SocketModules.chats = {};
|
||||
|
||||
Reference in New Issue
Block a user