linagora-rse
Version:
67 lines (53 loc) • 1.51 kB
JavaScript
;
var pubsub = require('../../core/pubsub').global,
logger = require('../../core/logger'),
iohelper = require('../helper/socketio');
var initialized = false;
var NAMESPACE = '/activitystreams';
var NOTIFICATION_EVENT = 'notification';
var topics = [
'message:activity'
];
function notify(io, uuids, msg) {
uuids.forEach(function(uuid) {
io.of(NAMESPACE)
.in(uuid)
.emit(NOTIFICATION_EVENT, {room: uuid, data: msg});
});
}
function init(io) {
if (initialized) {
logger.warn('The notification activitystream service is already initialized');
return;
}
topics.forEach(function(topic) {
pubsub.topic(topic).subscribe(function(msg) {
var uuids = msg.target.filter(function(share) {
return share.objectType === 'activitystream';
}).map(function(share) {
return share._id;
});
notify(io, uuids, msg);
});
});
io.of(NAMESPACE)
.on('connection', function(socket) {
var infos = iohelper.getInfos(socket);
var client = {
user: infos.userId,
address: infos.remoteAddress,
port: infos.remotePort
};
logger.info('New connection on ' + NAMESPACE, client);
socket.on('subscribe', function(uuid) {
logger.info('Joining room', uuid, client);
socket.join(uuid);
});
socket.on('unsubscribe', function(uuid) {
logger.info('Leaving room', uuid, client);
socket.leave(uuid);
});
});
initialized = true;
}
module.exports.init = init;