diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala index 52492d976133458e820f8cb406718a4593fa9eeb..d29f40d11364f278279ed9965516b4b5fbc26d3d 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala @@ -32,17 +32,31 @@ trait MuteUserCmdMsgHdlr extends RightsManagementTrait { val permissions = MeetingStatus2x.getPermissions(liveMeeting.status) for { - requester <- Users2x.findWithIntId(liveMeeting.users2x, msg.header.userId) - u <- VoiceUsers.findWithIntId(liveMeeting.voiceUsers, msg.body.userId) + requester <- Users2x.findWithIntId( + liveMeeting.users2x, + msg.header.userId + ) + u <- VoiceUsers.findWithIntId( + liveMeeting.voiceUsers, + msg.body.userId + ) } yield { - if (requester.role != Roles.MODERATOR_ROLE && permissions.disableMic && requester.locked && u.muted && + + if (requester.role != Roles.MODERATOR_ROLE + && permissions.disableMic + && requester.locked + && u.muted && msg.body.userId == msg.header.userId) { // unmuting self while not moderator and mic disabled. Do not allow. } else { if (u.muted != msg.body.mute) { log.info("Send mute user request. meetingId=" + meetingId + " userId=" + u.intId + " user=" + u) - val event = MsgBuilder.buildMuteUserInVoiceConfSysMsg(meetingId, voiceConf, - u.voiceUserId, msg.body.mute) + val event = MsgBuilder.buildMuteUserInVoiceConfSysMsg( + meetingId, + voiceConf, + u.voiceUserId, + msg.body.mute + ) outGW.send(event) } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserMutedInVoiceConfEvtMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserMutedInVoiceConfEvtMsgHdlr.scala index 107e326459b8244f43dd4789bd5dfc19f41bd700..fb92365d636d66dfb794379592b30b4cb690b398 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserMutedInVoiceConfEvtMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserMutedInVoiceConfEvtMsgHdlr.scala @@ -1,40 +1,26 @@ package org.bigbluebutton.core.apps.voice import org.bigbluebutton.common2.msgs._ -import org.bigbluebutton.core.models.{ VoiceUserState, VoiceUsers } -import org.bigbluebutton.core.running.{ BaseMeetingActor, LiveMeeting, OutMsgRouter } +import org.bigbluebutton.core.models.{ VoiceUsers } +import org.bigbluebutton.core.running.{ LiveMeeting, MeetingActor, OutMsgRouter } trait UserMutedInVoiceConfEvtMsgHdlr { - this: BaseMeetingActor => + this: MeetingActor => val liveMeeting: LiveMeeting val outGW: OutMsgRouter def handleUserMutedInVoiceConfEvtMsg(msg: UserMutedInVoiceConfEvtMsg): Unit = { - def broadcastEvent(vu: VoiceUserState): Unit = { - val routing = Routing.addMsgToClientRouting( - MessageTypes.BROADCAST_TO_MEETING, - liveMeeting.props.meetingProp.intId, - vu.intId - ) - val envelope = BbbCoreEnvelope(UserMutedVoiceEvtMsg.NAME, routing) - val header = BbbClientMsgHeader( - UserMutedVoiceEvtMsg.NAME, - liveMeeting.props.meetingProp.intId, vu.intId - ) - - val body = UserMutedVoiceEvtMsgBody(voiceConf = msg.header.voiceConf, intId = vu.intId, voiceUserId = vu.intId, vu.muted) - - val event = UserMutedVoiceEvtMsg(header, body) - val msgEvent = BbbCommonEnvCoreMsg(envelope, event) - outGW.send(msgEvent) - } - for { - mutedUser <- VoiceUsers.userMuted(liveMeeting.voiceUsers, msg.body.voiceUserId, msg.body.muted) + vu <- VoiceUsers.findWithVoiceUserId(liveMeeting.voiceUsers, msg.body.voiceUserId) } yield { - broadcastEvent(mutedUser) + VoiceApp.handleUserMutedInVoiceConfEvtMsg( + liveMeeting, + outGW, + msg.body.voiceUserId, + msg.body.muted + ) } } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserStatusVoiceConfEvtMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserStatusVoiceConfEvtMsgHdlr.scala index ccd3ca137f862f8c81c592a91cae4805cb607e8d..7633749dd726ff6d15a1b74f92d4a0a36cca8bb8 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserStatusVoiceConfEvtMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserStatusVoiceConfEvtMsgHdlr.scala @@ -17,6 +17,5 @@ trait UserStatusVoiceConfEvtMsgHdlr { eventBus, msg.body.confUsers ) - } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserTalkingInVoiceConfEvtMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserTalkingInVoiceConfEvtMsgHdlr.scala index f40499382ad447f605dc5587916b819a74f0b529..47070f47a8680678770892da01b86bab8a879c76 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserTalkingInVoiceConfEvtMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/UserTalkingInVoiceConfEvtMsgHdlr.scala @@ -32,9 +32,9 @@ trait UserTalkingInVoiceConfEvtMsgHdlr { } for { - mutedUser <- VoiceUsers.userTalking(liveMeeting.voiceUsers, msg.body.voiceUserId, msg.body.talking) + talkingUser <- VoiceUsers.userTalking(liveMeeting.voiceUsers, msg.body.voiceUserId, msg.body.talking) } yield { - broadcastEvent(mutedUser) + broadcastEvent(talkingUser) } } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/VoiceApp.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/VoiceApp.scala index b5b1dc9e360f698a14ecabddaf987434dc814397..d39bdbd46a0a80838917051b5fc00b0fa2b6e379 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/VoiceApp.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/voice/VoiceApp.scala @@ -95,45 +95,38 @@ object VoiceApp { eventBus: InternalEventBus, users: Vector[ConfVoiceUser] ): Unit = { - users foreach { u => + users foreach { cvu => VoiceUsers.findWithVoiceUserId( liveMeeting.voiceUsers, - u.voiceUserId + cvu.voiceUserId ) match { case Some(vu) => - if (vu.muted != u.muted) { + if (vu.muted != cvu.muted) { handleUserMutedInVoiceConfEvtMsg( liveMeeting, outGW, - u.voiceUserId, - u.muted + cvu.voiceUserId, + cvu.muted ) + } else { + // Update the user status to indicate they are still in the voice conference. + VoiceUsers.setLastStatusUpdate(liveMeeting.voiceUsers, vu) } - - // Update the user status to indicate they are stll in the voice conference. - VoiceUsers.setLastStatusUpdate(liveMeeting.voiceUsers, vu) case None => handleUserJoinedVoiceConfEvtMsg( liveMeeting, outGW, eventBus, liveMeeting.props.voiceProp.voiceConf, - u.intId, - u.voiceUserId, - u.callingWith, - u.callerIdName, - u.callerIdNum, - u.muted, - u.talking, - u.calledInto + cvu.intId, + cvu.voiceUserId, + cvu.callingWith, + cvu.callerIdName, + cvu.callerIdNum, + cvu.muted, + cvu.talking, + cvu.calledInto ) - - // Update this new users status time. - for { - vu <- VoiceUsers.findWithVoiceUserId(liveMeeting.voiceUsers, u.voiceUserId) - } yield { - VoiceUsers.setLastStatusUpdate(liveMeeting.voiceUsers, vu) - } } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/VoiceUsers.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/VoiceUsers.scala index 2055586d05b06d88c4901032e383853724172b56..ba0783a9df0e9a61b083089c6444e17b3f3f30af 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/VoiceUsers.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/VoiceUsers.scala @@ -39,39 +39,19 @@ object VoiceUsers { } yield { val vu = u.modify(_.muted).setTo(muted) .modify(_.talking).setTo(false) + .modify(_.lastStatusUpdateOn).setTo(System.currentTimeMillis()) users.save(vu) vu } } - def userTalking(users: VoiceUsers, voiceUserId: String, talkng: Boolean): Option[VoiceUserState] = { + def userTalking(users: VoiceUsers, voiceUserId: String, talking: Boolean): Option[VoiceUserState] = { for { u <- findWithVoiceUserId(users, voiceUserId) } yield { val vu = u.modify(_.muted).setTo(false) - .modify(_.talking).setTo(talkng) - users.save(vu) - vu - } - } - - def joinedVoiceListenOnly(users: VoiceUsers, userId: String): Option[VoiceUserState] = { - for { - u <- findWIthIntId(users, userId) - } yield { - val vu = u.modify(_.muted).setTo(true) - .modify(_.talking).setTo(false) - users.save(vu) - vu - } - } - - def leftVoiceListenOnly(users: VoiceUsers, userId: String): Option[VoiceUserState] = { - for { - u <- findWIthIntId(users, userId) - } yield { - val vu = u.modify(_.muted).setTo(false) - .modify(_.talking).setTo(false) + .modify(_.talking).setTo(talking) + .modify(_.lastStatusUpdateOn).setTo(System.currentTimeMillis()) users.save(vu) vu } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala index c82f5ac3a46ec1210d85a0f30c36cb392aa9935a..1723a91c887ed74d74cf4fbd7b3b328f1a488019 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala @@ -30,65 +30,69 @@ class AnalyticsActor extends Actor with ActorLogging { def handleBbbCommonEnvCoreMsg(msg: BbbCommonEnvCoreMsg): Unit = { msg.core match { - case m: GetAllMeetingsReqMsg => logMessage(msg) - - case m: RegisterUserReqMsg => logMessage(msg) - case m: RegisteredUserJoinTimeoutMsg => logMessage(msg) - case m: UserRegisteredRespMsg => logMessage(msg) - case m: DisconnectAllClientsSysMsg => logMessage(msg) - case m: DisconnectClientSysMsg => logMessage(msg) - case m: MeetingEndingEvtMsg => logMessage(msg) - case m: MeetingCreatedEvtMsg => logMessage(msg) - case m: LogoutAndEndMeetingCmdMsg => logMessage(msg) - case m: ValidateAuthTokenRespMsg => logMessage(msg) - case m: UserJoinedMeetingEvtMsg => logMessage(msg) - case m: RecordingStatusChangedEvtMsg => logMessage(msg) - case m: WebcamsOnlyForModeratorChangedEvtMsg => logMessage(msg) - case m: UserLeftMeetingEvtMsg => logMessage(msg) - case m: PresenterUnassignedEvtMsg => logMessage(msg) - case m: PresenterAssignedEvtMsg => logMessage(msg) - case m: MeetingIsActiveEvtMsg => logMessage(msg) - case m: UserEjectedFromMeetingEvtMsg => logMessage(msg) - case m: EjectUserFromVoiceConfSysMsg => logMessage(msg) - case m: CreateBreakoutRoomSysCmdMsg => logMessage(msg) - case m: RequestBreakoutJoinURLReqMsg => logMessage(msg) - case m: EndAllBreakoutRoomsMsg => logMessage(msg) - case m: TransferUserToMeetingRequestMsg => logMessage(msg) - case m: UserLeftVoiceConfToClientEvtMsg => logMessage(msg) - case m: UserLeftVoiceConfEvtMsg => logMessage(msg) - case m: RecordingStartedVoiceConfEvtMsg => logMessage(msg) - case m: MuteUserCmdMsg => logMessage(msg) - case m: MuteUserInVoiceConfSysMsg => logMessage(msg) - case m: MuteAllExceptPresentersCmdMsg => logMessage(msg) - case m: EjectUserFromVoiceCmdMsg => logMessage(msg) - case m: MuteMeetingCmdMsg => logMessage(msg) - case m: UserConnectedToGlobalAudioMsg => logMessage(msg) - case m: UserJoinedVoiceConfToClientEvtMsg => logMessage(msg) - case m: UserDisconnectedFromGlobalAudioMsg => logMessage(msg) - case m: AssignPresenterReqMsg => logMessage(msg) - case m: ScreenshareStartedVoiceConfEvtMsg => logMessage(msg) - case m: ScreenshareStoppedVoiceConfEvtMsg => logMessage(msg) + case m: GetAllMeetingsReqMsg => logMessage(msg) + + case m: RegisterUserReqMsg => logMessage(msg) + case m: RegisteredUserJoinTimeoutMsg => logMessage(msg) + case m: UserRegisteredRespMsg => logMessage(msg) + case m: DisconnectAllClientsSysMsg => logMessage(msg) + case m: DisconnectClientSysMsg => logMessage(msg) + case m: MeetingEndingEvtMsg => logMessage(msg) + case m: MeetingCreatedEvtMsg => logMessage(msg) + case m: LogoutAndEndMeetingCmdMsg => logMessage(msg) + case m: ValidateAuthTokenRespMsg => logMessage(msg) + case m: UserJoinedMeetingEvtMsg => logMessage(msg) + case m: RecordingStatusChangedEvtMsg => logMessage(msg) + case m: WebcamsOnlyForModeratorChangedEvtMsg => logMessage(msg) + case m: UserLeftMeetingEvtMsg => logMessage(msg) + case m: PresenterUnassignedEvtMsg => logMessage(msg) + case m: PresenterAssignedEvtMsg => logMessage(msg) + case m: MeetingIsActiveEvtMsg => logMessage(msg) + case m: UserEjectedFromMeetingEvtMsg => logMessage(msg) + case m: EjectUserFromVoiceConfSysMsg => logMessage(msg) + case m: CreateBreakoutRoomSysCmdMsg => logMessage(msg) + case m: RequestBreakoutJoinURLReqMsg => logMessage(msg) + case m: EndAllBreakoutRoomsMsg => logMessage(msg) + case m: TransferUserToMeetingRequestMsg => logMessage(msg) + case m: UserLeftVoiceConfToClientEvtMsg => logMessage(msg) + case m: UserLeftVoiceConfEvtMsg => logMessage(msg) + case m: RecordingStartedVoiceConfEvtMsg => logMessage(msg) + case m: MuteUserCmdMsg => logMessage(msg) + case m: MuteUserInVoiceConfSysMsg => logMessage(msg) + case m: MuteAllExceptPresentersCmdMsg => logMessage(msg) + case m: EjectUserFromVoiceCmdMsg => logMessage(msg) + case m: MuteMeetingCmdMsg => logMessage(msg) + case m: UserConnectedToGlobalAudioMsg => logMessage(msg) + case m: UserJoinedVoiceConfToClientEvtMsg => logMessage(msg) + case m: UserDisconnectedFromGlobalAudioMsg => logMessage(msg) + case m: AssignPresenterReqMsg => logMessage(msg) + case m: ScreenshareStartedVoiceConfEvtMsg => logMessage(msg) + case m: ScreenshareStoppedVoiceConfEvtMsg => logMessage(msg) case m: ScreenshareRtmpBroadcastStartedVoiceConfEvtMsg => logMessage(msg) case m: ScreenshareRtmpBroadcastStoppedVoiceConfEvtMsg => logMessage(msg) - case m: ScreenshareStartRtmpBroadcastVoiceConfMsg => logMessage(msg) - case m: ScreenshareStopRtmpBroadcastVoiceConfMsg => logMessage(msg) - case m: ScreenshareRtmpBroadcastStartedEvtMsg => logMessage(msg) - case m: ScreenshareRtmpBroadcastStoppedEvtMsg => logMessage(msg) - case m: MeetingInactivityWarningEvtMsg => logMessage(msg) - case m: StartRecordingVoiceConfSysMsg => logMessage(msg) - case m: StopRecordingVoiceConfSysMsg => logMessage(msg) + case m: ScreenshareStartRtmpBroadcastVoiceConfMsg => logMessage(msg) + case m: ScreenshareStopRtmpBroadcastVoiceConfMsg => logMessage(msg) + case m: ScreenshareRtmpBroadcastStartedEvtMsg => logMessage(msg) + case m: ScreenshareRtmpBroadcastStoppedEvtMsg => logMessage(msg) + case m: MeetingInactivityWarningEvtMsg => logMessage(msg) + case m: StartRecordingVoiceConfSysMsg => logMessage(msg) + case m: StopRecordingVoiceConfSysMsg => logMessage(msg) //case m: UpdateRecordingTimerEvtMsg => logMessage(msg) - case m: RecordAndClearPreviousMarkersCmdMsg => logMessage(msg) - case m: TransferUserToVoiceConfSysMsg => logMessage(msg) - case m: UserBroadcastCamStartMsg => logMessage(msg) - case m: UserBroadcastCamStopMsg => logMessage(msg) - case m: UserBroadcastCamStoppedEvtMsg => logMessage(msg) - case m: UserBroadcastCamStartedEvtMsg => logMessage(msg) - case m: EjectUserFromMeetingSysMsg => logMessage(msg) - case m: UserActivitySignCmdMsg => logMessage(msg) - case m: UserInactivityInspectMsg => logMessage(msg) - - case m: ChangeUserRoleCmdMsg => logMessage(msg) + case m: RecordAndClearPreviousMarkersCmdMsg => logMessage(msg) + case m: TransferUserToVoiceConfSysMsg => logMessage(msg) + case m: UserBroadcastCamStartMsg => logMessage(msg) + case m: UserBroadcastCamStopMsg => logMessage(msg) + case m: UserBroadcastCamStoppedEvtMsg => logMessage(msg) + case m: UserBroadcastCamStartedEvtMsg => logMessage(msg) + case m: EjectUserFromMeetingSysMsg => logMessage(msg) + case m: UserActivitySignCmdMsg => logMessage(msg) + case m: UserInactivityInspectMsg => logMessage(msg) + + case m: ChangeUserRoleCmdMsg => logMessage(msg) + + // Voice + case m: UserMutedVoiceEvtMsg => + logMessage(msg) // Breakout case m: BreakoutRoomEndedEvtMsg => logMessage(msg)