stop external video if presenter changed
This commit is contained in:
parent
0b6496618c
commit
740a3a9db9
@ -1,11 +1,9 @@
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import { makeCall } from '/imports/ui/services/api';
|
||||
|
||||
let streamer = null;
|
||||
const getStreamer = (meetingID) => {
|
||||
if (!streamer) {
|
||||
streamer = new Meteor.Streamer(`external-videos-${meetingID}`);
|
||||
makeCall('initializeExternalVideo');
|
||||
}
|
||||
return streamer;
|
||||
};
|
||||
|
@ -1,6 +1,5 @@
|
||||
import { check } from 'meteor/check';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import Users from '/imports/api/users';
|
||||
import Meetings from '/imports/api/meetings';
|
||||
|
||||
export default function handleStopExternalVideo({ header, body }, meetingId) {
|
||||
@ -9,10 +8,6 @@ export default function handleStopExternalVideo({ header, body }, meetingId) {
|
||||
check(meetingId, String);
|
||||
check(userId, String);
|
||||
|
||||
const user = Users.findOne({ meetingId: meetingId, userId: userId })
|
||||
|
||||
if (user && user.presenter) {
|
||||
Logger.info(`User id=${userId} stop sharing an external video for meeting ${meetingId}`);
|
||||
Logger.info(`External video stop sharing was initiated by:[${userId}] for meeting ${meetingId}`);
|
||||
Meetings.update({ meetingId }, { $set: { externalVideoUrl: null } });
|
||||
}
|
||||
}
|
||||
|
@ -1,28 +1,21 @@
|
||||
import { check } from 'meteor/check';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import Users from '/imports/api/users';
|
||||
import RedisPubSub from '/imports/startup/server/redis';
|
||||
import stopWatchingExternalVideoSystemCall from '/imports/api/external-videos/server/methods/stopWatchingExternalVideoSystemCall';
|
||||
import { extractCredentials } from '/imports/api/common/server/helpers';
|
||||
|
||||
export default function stopWatchingExternalVideo(options) {
|
||||
const REDIS_CONFIG = Meteor.settings.private.redis;
|
||||
const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
|
||||
const EVENT_NAME = 'StopExternalVideoPubMsg';
|
||||
|
||||
// when we call stopWatchingExternalVideo as a Meteor method from client side we obtain
|
||||
// user credentials from the connection via extractCredentials
|
||||
// However, we also call this function from server side (end meeting, user left, etc)
|
||||
const { meetingId, requesterUserId } = this.userId ? extractCredentials(this.userId) : options;
|
||||
export default function stopWatchingExternalVideo() {
|
||||
const { meetingId, requesterUserId } = extractCredentials(this.userId);
|
||||
|
||||
try {
|
||||
check(meetingId, String);
|
||||
check(requesterUserId, String);
|
||||
|
||||
const user = Users.findOne({ meetingId, userId: requesterUserId });
|
||||
|
||||
if (user && user.presenter) {
|
||||
const payload = { };
|
||||
Logger.debug(`User id=${requesterUserId} sending ${EVENT_NAME} for meeting ${meetingId}`);
|
||||
return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
|
||||
// proceed and publish the event
|
||||
stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId });
|
||||
}
|
||||
} catch (error) {
|
||||
Logger.error(`Error on stop sharing an external video for meeting=${meetingId} ${error}`);
|
||||
|
@ -0,0 +1,26 @@
|
||||
import { check } from 'meteor/check';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import Meetings from '/imports/api/meetings';
|
||||
import RedisPubSub from '/imports/startup/server/redis';
|
||||
|
||||
export default function stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId }) {
|
||||
const REDIS_CONFIG = Meteor.settings.private.redis;
|
||||
const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
|
||||
const EVENT_NAME = 'StopExternalVideoPubMsg';
|
||||
|
||||
try {
|
||||
check(meetingId, String);
|
||||
check(requesterUserId, String);
|
||||
|
||||
// check if there is ongoing video shared
|
||||
const meeting = Meetings.findOne({ meetingId });
|
||||
if (!meeting || meeting.externalVideoUrl === null) return;
|
||||
|
||||
Logger.info('ExternalVideo::stopWatchingExternalVideo was triggered ', { meetingId, requesterUserId });
|
||||
|
||||
const payload = { };
|
||||
return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
|
||||
} catch (error) {
|
||||
Logger.error(`Error on stop sharing an external video for meeting=${meetingId} ${error}`);
|
||||
}
|
||||
}
|
@ -1,20 +1,17 @@
|
||||
import { check } from 'meteor/check';
|
||||
import Meetings from '/imports/api/meetings';
|
||||
import Users from '/imports/api/users';
|
||||
import addScreenshare from '../modifiers/addScreenshare';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import stopWatchingExternalVideo from '/imports/api/external-videos/server/methods/stopWatchingExternalVideo';
|
||||
import stopWatchingExternalVideoSystemCall from '/imports/api/external-videos/server/methods/stopWatchingExternalVideoSystemCall';
|
||||
|
||||
export default function handleScreenshareStarted({ body }, meetingId) {
|
||||
check(meetingId, String);
|
||||
check(body, Object);
|
||||
|
||||
const meeting = Meetings.findOne({ meetingId });
|
||||
const presenter = Users.findOne({ meetingId, presenter: true });
|
||||
const presenterId = presenter && presenter.userId ? presenter.userId : 'system-screenshare-starting';
|
||||
if (meeting && meeting.externalVideoUrl) {
|
||||
Logger.info(`ScreenshareStarted: There is external video being shared. Stopping it due to presenter change, ${meeting.externalVideoUrl}`);
|
||||
stopWatchingExternalVideo({ meetingId, requesterUserId: presenterId });
|
||||
stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId: 'system-screenshare-starting' });
|
||||
}
|
||||
return addScreenshare(meetingId, body);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import Users from '/imports/api/users';
|
||||
import Meetings from '/imports/api/meetings';
|
||||
import stopWatchingExternalVideo from '/imports/api/external-videos/server/methods/stopWatchingExternalVideo';
|
||||
import stopWatchingExternalVideoSystemCall from '/imports/api/external-videos/server/methods/stopWatchingExternalVideoSystemCall';
|
||||
|
||||
export default function changePresenter(presenter, userId, meetingId, changedBy) {
|
||||
const selector = {
|
||||
@ -19,7 +19,7 @@ export default function changePresenter(presenter, userId, meetingId, changedBy)
|
||||
const meeting = Meetings.findOne({ meetingId });
|
||||
if (meeting && meeting.externalVideoUrl) {
|
||||
Logger.info(`ChangePresenter:There is external video being shared. Stopping it due to presenter change, ${meeting.externalVideoUrl}`);
|
||||
stopWatchingExternalVideo({ meetingId, requesterUserId: userId });
|
||||
stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId: 'system-presenter-changed' });
|
||||
}
|
||||
|
||||
const numberAffected = Users.update(selector, modifier);
|
||||
|
@ -2,7 +2,7 @@ import { check } from 'meteor/check';
|
||||
import Users from '/imports/api/users';
|
||||
import VideoStreams from '/imports/api/video-streams';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import stopWatchingExternalVideo from '/imports/api/external-videos/server/methods/stopWatchingExternalVideo';
|
||||
import stopWatchingExternalVideoSystemCall from '/imports/api/external-videos/server/methods/stopWatchingExternalVideoSystemCall';
|
||||
import clearUserInfoForRequester from '/imports/api/users-infos/server/modifiers/clearUserInfoForRequester';
|
||||
import ClientConnections from '/imports/startup/server/ClientConnections';
|
||||
|
||||
@ -22,7 +22,7 @@ export default function removeUser(meetingId, userId) {
|
||||
if (userToRemove) {
|
||||
const { presenter } = userToRemove;
|
||||
if (presenter) {
|
||||
stopWatchingExternalVideo({ meetingId, requesterUserId: userId });
|
||||
stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId: 'system-presenter-was-removed' });
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user