Skip to content
Snippets Groups Projects
Commit 156aaa40 authored by Chad Pilkey's avatar Chad Pilkey
Browse files

harden the cursor streamer emit logic

parent ce94cd51
No related branches found
No related tags found
No related merge requests found
import { check } from 'meteor/check';
import CursorStreamer from '/imports/api/cursor/server/streamer';
import Logger from '/imports/startup/server/logger';
import _ from 'lodash';
const { streamerLog } = Meteor.settings.private.serverLog;
const CURSOR_PROCCESS_INTERVAL = 30;
let cursorQueue = {};
let cursorReceiverIsRunning = false;
const proccess = () => {
if (!Object.keys(cursorQueue).length) {
cursorReceiverIsRunning = false;
return;
}
cursorReceiverIsRunning = true;
const cursorQueue = {};
const proccess = _.throttle(() => {
try {
Object.keys(cursorQueue).forEach((meetingId) => {
CursorStreamer(meetingId).emit('message', { meetingId, cursors: cursorQueue[meetingId] });
try {
const cursors = cursorQueue[meetingId];
delete cursorQueue[meetingId];
CursorStreamer(meetingId).emit('message', { meetingId, cursors });
if (streamerLog) {
Logger.debug(`CursorUpdate process for meeting ${meetingId} has finished`);
}
} catch (error) {
Logger.error(`Error while trying to send cursor streamer data for meeting ${meetingId}. ${error}`);
}
});
cursorQueue = {};
Meteor.setTimeout(proccess, CURSOR_PROCCESS_INTERVAL);
} catch (error) {
Logger.error(`Error while trying to send cursor streamer data. ${error}`);
cursorReceiverIsRunning = false;
Logger.error(`Error while processing cursor queue. ${error}`);
}
};
}, CURSOR_PROCCESS_INTERVAL);
export default function handleCursorUpdate({ header, body }, meetingId) {
const { userId } = header;
......@@ -37,15 +36,12 @@ export default function handleCursorUpdate({ header, body }, meetingId) {
check(meetingId, String);
check(userId, String);
if (!cursorQueue.hasOwnProperty(meetingId)) {
if (!cursorQueue[meetingId]) {
cursorQueue[meetingId] = {};
}
if (streamerLog) {
Logger.debug(`CursorUpdate process for meeting ${meetingId} is running: ${cursorReceiverIsRunning}`);
}
// overwrite since we dont care about the other positions
cursorQueue[meetingId][userId] = body;
if (!cursorReceiverIsRunning) proccess();
proccess();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment