import { Meteor } from 'meteor/meteor'; import Logger from '/imports/startup/server/logger'; import _ from 'lodash'; const COLLECTION_NAME = 'ping-pong'; const INTERVAL_IN_SETTINGS = (Meteor.settings.public.pingPong.clearUsersInSeconds) * 1000; const INTERVAL_TIME = INTERVAL_IN_SETTINGS < 10000 ? 10000 : INTERVAL_IN_SETTINGS; const PONG_INTERVAL_IN_SETTINGS = (Meteor.settings.public.pingPong.pongTimeInSeconds) * 1000; const PONG_INTERVAL = PONG_INTERVAL_IN_SETTINGS >= INTERVAL_TIME ? (INTERVAL_TIME / 2) : PONG_INTERVAL_IN_SETTINGS; function pingPong(credentials) { const { meetingId, requesterUserId } = credentials; const id = _.uniqueId('pong-'); Logger.info(`Starting ping-pong publish for userId: ${requesterUserId}`); const pongSender = (interval) => { const payload = { pong: { message: 'pong', time: Date.now(), meetingId, }, }; let fn = this.added.bind(this); if (interval) fn = this.changed.bind(this); fn(COLLECTION_NAME, id, payload); }; pongSender(); this.ready(); const interval = Meteor.setInterval(() => pongSender(true), PONG_INTERVAL); this.onStop(() => { Meteor.clearInterval(interval); }); } Meteor.publish('ping-pong', pingPong);