UNPKG

linagora-rse

Version:
67 lines (53 loc) 1.51 kB
'use strict'; 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;