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 { Meteor } from 'meteor/meteor';
|
||||||
import { makeCall } from '/imports/ui/services/api';
|
|
||||||
|
|
||||||
let streamer = null;
|
let streamer = null;
|
||||||
const getStreamer = (meetingID) => {
|
const getStreamer = (meetingID) => {
|
||||||
if (!streamer) {
|
if (!streamer) {
|
||||||
streamer = new Meteor.Streamer(`external-videos-${meetingID}`);
|
streamer = new Meteor.Streamer(`external-videos-${meetingID}`);
|
||||||
makeCall('initializeExternalVideo');
|
|
||||||
}
|
}
|
||||||
return streamer;
|
return streamer;
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { check } from 'meteor/check';
|
import { check } from 'meteor/check';
|
||||||
import Logger from '/imports/startup/server/logger';
|
import Logger from '/imports/startup/server/logger';
|
||||||
import Users from '/imports/api/users';
|
|
||||||
import Meetings from '/imports/api/meetings';
|
import Meetings from '/imports/api/meetings';
|
||||||
|
|
||||||
export default function handleStopExternalVideo({ header, body }, meetingId) {
|
export default function handleStopExternalVideo({ header, body }, meetingId) {
|
||||||
@ -9,10 +8,6 @@ export default function handleStopExternalVideo({ header, body }, meetingId) {
|
|||||||
check(meetingId, String);
|
check(meetingId, String);
|
||||||
check(userId, String);
|
check(userId, String);
|
||||||
|
|
||||||
const user = Users.findOne({ meetingId: meetingId, userId: userId })
|
Logger.info(`External video stop sharing was initiated by:[${userId}] for meeting ${meetingId}`);
|
||||||
|
Meetings.update({ meetingId }, { $set: { externalVideoUrl: null } });
|
||||||
if (user && user.presenter) {
|
|
||||||
Logger.info(`User id=${userId} stop sharing an external video for meeting ${meetingId}`);
|
|
||||||
Meetings.update({ meetingId }, { $set: { externalVideoUrl: null } });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,28 +1,21 @@
|
|||||||
import { check } from 'meteor/check';
|
import { check } from 'meteor/check';
|
||||||
import Logger from '/imports/startup/server/logger';
|
import Logger from '/imports/startup/server/logger';
|
||||||
import Users from '/imports/api/users';
|
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';
|
import { extractCredentials } from '/imports/api/common/server/helpers';
|
||||||
|
|
||||||
export default function stopWatchingExternalVideo(options) {
|
export default function stopWatchingExternalVideo() {
|
||||||
const REDIS_CONFIG = Meteor.settings.private.redis;
|
const { meetingId, requesterUserId } = extractCredentials(this.userId);
|
||||||
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;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
check(meetingId, String);
|
check(meetingId, String);
|
||||||
check(requesterUserId, String);
|
check(requesterUserId, String);
|
||||||
|
|
||||||
const user = Users.findOne({ meetingId, userId: requesterUserId });
|
const user = Users.findOne({ meetingId, userId: requesterUserId });
|
||||||
|
|
||||||
if (user && user.presenter) {
|
if (user && user.presenter) {
|
||||||
const payload = { };
|
// proceed and publish the event
|
||||||
Logger.debug(`User id=${requesterUserId} sending ${EVENT_NAME} for meeting ${meetingId}`);
|
stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId });
|
||||||
return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error(`Error on stop sharing an external video for meeting=${meetingId} ${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 { check } from 'meteor/check';
|
||||||
import Meetings from '/imports/api/meetings';
|
import Meetings from '/imports/api/meetings';
|
||||||
import Users from '/imports/api/users';
|
|
||||||
import addScreenshare from '../modifiers/addScreenshare';
|
import addScreenshare from '../modifiers/addScreenshare';
|
||||||
import Logger from '/imports/startup/server/logger';
|
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) {
|
export default function handleScreenshareStarted({ body }, meetingId) {
|
||||||
check(meetingId, String);
|
check(meetingId, String);
|
||||||
check(body, Object);
|
check(body, Object);
|
||||||
|
|
||||||
const meeting = Meetings.findOne({ meetingId });
|
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) {
|
if (meeting && meeting.externalVideoUrl) {
|
||||||
Logger.info(`ScreenshareStarted: There is external video being shared. Stopping it due to presenter change, ${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);
|
return addScreenshare(meetingId, body);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Logger from '/imports/startup/server/logger';
|
import Logger from '/imports/startup/server/logger';
|
||||||
import Users from '/imports/api/users';
|
import Users from '/imports/api/users';
|
||||||
import Meetings from '/imports/api/meetings';
|
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) {
|
export default function changePresenter(presenter, userId, meetingId, changedBy) {
|
||||||
const selector = {
|
const selector = {
|
||||||
@ -19,7 +19,7 @@ export default function changePresenter(presenter, userId, meetingId, changedBy)
|
|||||||
const meeting = Meetings.findOne({ meetingId });
|
const meeting = Meetings.findOne({ meetingId });
|
||||||
if (meeting && meeting.externalVideoUrl) {
|
if (meeting && meeting.externalVideoUrl) {
|
||||||
Logger.info(`ChangePresenter:There is external video being shared. Stopping it due to presenter change, ${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);
|
const numberAffected = Users.update(selector, modifier);
|
||||||
|
@ -2,7 +2,7 @@ import { check } from 'meteor/check';
|
|||||||
import Users from '/imports/api/users';
|
import Users from '/imports/api/users';
|
||||||
import VideoStreams from '/imports/api/video-streams';
|
import VideoStreams from '/imports/api/video-streams';
|
||||||
import Logger from '/imports/startup/server/logger';
|
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 clearUserInfoForRequester from '/imports/api/users-infos/server/modifiers/clearUserInfoForRequester';
|
||||||
import ClientConnections from '/imports/startup/server/ClientConnections';
|
import ClientConnections from '/imports/startup/server/ClientConnections';
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ export default function removeUser(meetingId, userId) {
|
|||||||
if (userToRemove) {
|
if (userToRemove) {
|
||||||
const { presenter } = userToRemove;
|
const { presenter } = userToRemove;
|
||||||
if (presenter) {
|
if (presenter) {
|
||||||
stopWatchingExternalVideo({ meetingId, requesterUserId: userId });
|
stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId: 'system-presenter-was-removed' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user