better error checking with socket broadcast method

v1.18.x
Julian Lam 10 years ago
parent 7e640806b5
commit eac92b00c6

@ -142,7 +142,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra
} }
}); });
callback(chats); callback(null, chats);
}); });
socket.on('event:chats.open', function(data) { socket.on('event:chats.open', function(data) {

@ -39,19 +39,29 @@ rooms.broadcast = function(socket, room, msg, data, callback) {
callback = callback || function() {}; callback = callback || function() {};
// Filter out socketIds that aren't actually connected
socketIds = socketIds.filter(function(id) {
return io.server.sockets.connected.hasOwnProperty(id);
});
async.map(socketIds, function(id, next) { async.map(socketIds, function(id, next) {
var timeout; var timeout,
timeoutPassed = false;
if (socket.id === id) { if (socket.id === id) {
return setImmediate(next, null, []); return setImmediate(next, null, []);
} }
timeout = setTimeout(function() { timeout = setTimeout(function() {
timeoutPassed = true;
next(null, []); next(null, []);
}, 500); }, 500);
io.server.sockets.connected[id].emit(msg, data || {}, function(chats) { io.server.sockets.connected[id].emit(msg, data || {}, function(err, returnData) {
clearTimeout(timeout); clearTimeout(timeout);
next(null, chats); if (!timeoutPassed) {
next(null, returnData);
}
}); });
}, callback); }, callback);
}; };

Loading…
Cancel
Save