bigbluebutton-Github/bigbluebutton-html5/imports/api/ping-pong/server/publishers.js

38 lines
1.2 KiB
JavaScript
Raw Normal View History

2019-07-02 03:00:27 +08:00
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;
2019-07-02 03:00:27 +08:00
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);
2019-07-02 03:00:27 +08:00
this.onStop(() => {
Meteor.clearInterval(interval);
});
}
Meteor.publish('ping-pong', pingPong);