Skip to content
Snippets Groups Projects
Commit e67781d1 authored by Lucas Zawacki's avatar Lucas Zawacki
Browse files

Centralize external video presenter message emission via a meteor call

parent b48e474e
No related branches found
No related tags found
No related merge requests found
......@@ -2,9 +2,11 @@ import { Meteor } from 'meteor/meteor';
import startWatchingExternalVideo from './methods/startWatchingExternalVideo';
import stopWatchingExternalVideo from './methods/stopWatchingExternalVideo';
import initializeExternalVideo from './methods/initializeExternalVideo';
import emitExternalVideoEvent from './methods/emitExternalVideoEvent';
Meteor.methods({
initializeExternalVideo,
startWatchingExternalVideo,
stopWatchingExternalVideo,
emitExternalVideoEvent,
});
import Users from '/imports/api/users';
import { extractCredentials } from '/imports/api/common/server/helpers';
export default function emitExternalVideoEvent(messageName, ...rest) {
const { meetingId, userId } = extractCredentials(this.userId);
const user = Users.findOne({ userId });
if (user && user.presenter) {
const streamerName = `external-videos-${meetingId}`;
const streamer = Meteor.StreamerCentral.instances[streamerName];
if (streamer) {
streamer.emit(messageName, ...rest)
} else {
console.log("streamer not found")
}
}
}
......@@ -2,7 +2,9 @@ import { extractCredentials } from '/imports/api/common/server/helpers';
import { check } from 'meteor/check';
import Logger from '/imports/startup/server/logger';
const allowFromPresenter = (eventName, message) => {
const allowRecentMessages = (eventName, message) => {
const LATE_MESSAGE_THRESHOLD = 3000;
const {
userId,
meetingId,
......@@ -12,9 +14,14 @@ const allowFromPresenter = (eventName, message) => {
state,
} = message;
Logger.debug(`ExternalVideo Streamer auth userId: ${userId}, meetingId: ${meetingId}, event: ${eventName}, time: ${time}, timestamp: ${timestamp/1000} rate: ${rate}, state: ${state}`);
if (timestamp > Date.now() - LATE_MESSAGE_THRESHOLD) {
Logger.debug(`ExternalVideo Streamer auth allowed userId: ${userId}, meetingId: ${meetingId}, event: ${eventName}, time: ${time}, timestamp: ${timestamp/1000} rate: ${rate}, state: ${state}`);
return true;
}
Logger.debug(`ExternalVideo Streamer auth rejected userId: ${userId}, meetingId: ${meetingId}, event: ${eventName}, time: ${time}, timestamp: ${timestamp/1000} rate: ${rate}, state: ${state}`);
return true;
return false;
};
export default function initializeExternalVideo() {
......@@ -24,8 +31,9 @@ export default function initializeExternalVideo() {
if (!Meteor.StreamerCentral.instances[streamName]) {
const streamer = new Meteor.Streamer(streamName);
streamer.allowRead('all');
streamer.allowWrite('all');
streamer.allowEmit(allowFromPresenter);
streamer.allowWrite('none');
streamer.allowEmit(allowRecentMessages);
Logger.info(`Created External Video streamer for ${streamName}`);
} else {
Logger.debug(`External Video streamer is already created for ${streamName}`);
}
......
......@@ -355,7 +355,7 @@ class VideoPlayer extends Component {
logger.debug({
logCode: 'external_video_client_update_seek',
extraInfo: { time, timestamp, },
}, 'Seek external video to:');
}, `Seek external video to: ${time}`);
}
}
......
......@@ -20,25 +20,10 @@ const stopWatching = () => {
};
const sendMessage = (event, data) => {
const {
time,
rate,
state,
timestamp,
} = data;
const meetingId = Auth.meetingID;
const userId = Auth.userID;
const user = Users.findOne({ userId });
const suc = user && user.presenter;
if (!suc) {
Logger.warn("Message rejected");
} else {
const streamer = getStreamer(meetingId);
streamer.emit(event, { ...data, meetingId, userId});
}
makeCall('emitExternalVideoEvent', event, { ...data, meetingId, userId });
};
const onMessage = (message, func) => {
......
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