From 8abdd10393b3e55c3d05a26e323df20f4f3e80ab Mon Sep 17 00:00:00 2001 From: Oswaldo Acauan <oswaldoacauan@gmail.com> Date: Wed, 22 Feb 2017 18:59:47 +0000 Subject: [PATCH] Refactor handler for emojiStatus --- .../imports/api/users/server/eventHandlers.js | 2 + .../api/users/server/handlers/emojiStatus.js | 37 +++++++++++ .../server/handlers/presenterAssigned.js | 61 +++++++++++++++++++ .../api/users/server/handlers/removeUser.js | 14 +++++ .../api/users/server/modifiers/removeUser.js | 56 +++++++++++++++++ 5 files changed, 170 insertions(+) create mode 100644 bigbluebutton-html5/imports/api/users/server/handlers/emojiStatus.js create mode 100644 bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js create mode 100644 bigbluebutton-html5/imports/api/users/server/handlers/removeUser.js create mode 100644 bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js diff --git a/bigbluebutton-html5/imports/api/users/server/eventHandlers.js b/bigbluebutton-html5/imports/api/users/server/eventHandlers.js index ffa138652d..6f5b534cbf 100644 --- a/bigbluebutton-html5/imports/api/users/server/eventHandlers.js +++ b/bigbluebutton-html5/imports/api/users/server/eventHandlers.js @@ -1,8 +1,10 @@ import RedisPubSub from '/imports/startup/server/redis'; import handleRemoveUser from './handlers/removeUser'; import handlePresenterAssigned from './handlers/presenterAssigned'; +import handleEmojiStatus from './handlers/emojiStatus'; RedisPubSub.on('user_eject_from_meeting', handleRemoveUser); RedisPubSub.on('disconnect_user_message', handleRemoveUser); RedisPubSub.on('user_left_message', handleRemoveUser); RedisPubSub.on('presenter_assigned_message', handlePresenterAssigned); +RedisPubSub.on('user_emoji_status_message', handleEmojiStatus); diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/emojiStatus.js b/bigbluebutton-html5/imports/api/users/server/handlers/emojiStatus.js new file mode 100644 index 0000000000..ee6a0f966d --- /dev/null +++ b/bigbluebutton-html5/imports/api/users/server/handlers/emojiStatus.js @@ -0,0 +1,37 @@ +import Logger from '/imports/startup/server/logger'; +import { check } from 'meteor/check'; +import Users from '/imports/api/users'; + +export default function handleEmojiStatus({ payload }) { + const meetingId = payload.meeting_id; + const userId = payload.userid; + const status = payload.emoji_status; + + check(meetingId, String); + check(userId, String); + check(status, String); + + const selector = { + meetingId, + userId, + }; + + const modifier = { + $set: { + 'user.set_emoji_time': new Date(), + 'user.emoji_status': status, + }, + }; + + const cb = (err, numChanged) => { + if (err) { + return Logger.error(`Assigning user emoji status: ${err}`); + } + + if (numChanged) { + return Logger.info(`Assigned user emoji status '${status}' id=${newPresenterId} meeting=${meetingId}`); + } + }; + + return Users.update(selector, modifier, cb); +}; diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js b/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js new file mode 100644 index 0000000000..9d4e1fe652 --- /dev/null +++ b/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js @@ -0,0 +1,61 @@ +import Logger from '/imports/startup/server/logger'; +import { check } from 'meteor/check'; +import Users from '/imports/api/users'; + +export default function handlePresenterAssigned({ payload }) { + const meetingId = payload.meeting_id; + const newPresenterId = payload.new_presenter_id; + + check(meetingId, String); + check(newPresenterId, String); + + const selector = { + meetingId, + userId: newPresenterId, + }; + + const modifier = { + $set: { + 'user.presenter': true, + }, + }; + + const cb = (err, numChanged) => { + if (err) { + return Logger.error(`Assigning user as presenter: ${err}`); + } + + if (numChanged) { + unassignCurrentPresenter(meetingId, newPresenterId); + return Logger.info(`Assigned user as presenter id=${newPresenterId} meeting=${meetingId}`); + } + }; + + return Users.update(selector, modifier, cb); +}; + +const unassignCurrentPresenter = (meetingId, newPresenterId) => { + const selector = { + meetingId, + userId: { $ne: newPresenterId }, + 'user.presenter': true, + }; + + const modifier = { + $set: { + 'user.presenter': false, + }, + }; + + const cb = (err, numChanged) => { + if (err) { + return Logger.error(`Unassigning current presenter from collection: ${err}`); + } + + if (numChanged) { + return Logger.info(`Unassign current presenter meeting=${meetingId}`); + } + }; + + return Users.update(selector, modifier, cb); +}; diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/removeUser.js b/bigbluebutton-html5/imports/api/users/server/handlers/removeUser.js new file mode 100644 index 0000000000..4a54919913 --- /dev/null +++ b/bigbluebutton-html5/imports/api/users/server/handlers/removeUser.js @@ -0,0 +1,14 @@ +import Logger from '/imports/startup/server/logger'; +import { check } from 'meteor/check'; + +import removeUser from '../modifiers/removeUser'; + +export default function handleRemoveUser({ payload }) { + const meetingId = payload.meeting_id; + const userId = payload.userid; + + check(meetingId, String); + check(userId, String); + + return removeUser(meetingId, userId); +}; diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js b/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js new file mode 100644 index 0000000000..87a1153702 --- /dev/null +++ b/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js @@ -0,0 +1,56 @@ +import { check } from 'meteor/check'; +import Users from '/imports/api/slides'; +import Logger from '/imports/startup/server/logger'; + +import setConnectionStatus from './setConnectionStatus'; + +const CLIENT_TYPE_HTML = 'HTML5'; + +export default function removeUser(meetingId, userId) { + check(meetingId, String); + check(userId, String); + + const selector = { + meetingId, + userId, + }; + + const User = Users.findOne(selector); + + if (User && User.clientType !== CLIENT_TYPE_HTML) { + const cb = (err, numChanged) => { + if (err) { + return Logger.error(`Removing user from collection: ${err}`); + } + + if (numChanged) { + return Logger.info(`Removed user id=${userId} meeting=${meetingId}`); + } + }; + + return Users.remove(selector, cb); + } + + const modifier = { + $set: { + 'user.connection_status': 'offline', + 'user.voiceUser.talking': false, + 'user.voiceUser.joined': false, + 'user.voiceUser.muted': false, + 'user.time_of_joining': 0, + 'user.listenOnly': false, //TODO make this user: {} + }, + }; + + const cb = (err, numChanged) => { + if (err) { + return Logger.error(`Removing user from collection: ${err}`); + } + + if (numChanged) { + return Logger.info(`Removed ${CLIENT_TYPE_HTML} user id=${userId} meeting=${meetingId}`); + } + }; + + return Users.update(selector, modifier, cb); +}; -- GitLab