Merge pull request #14541 from gustavotrott/fix-breakout-user-remove
fix: Users not being ejected from breakout rooms (only from main room)
This commit is contained in:
commit
d737ad59b0
@ -83,6 +83,18 @@ case class EndBreakoutRoomInternalMsg(parentId: String, breakoutId: String, reas
|
|||||||
*/
|
*/
|
||||||
case class ExtendBreakoutRoomTimeInternalMsg(parentId: String, breakoutId: String, extendTimeInMinutes: Int) extends InMessage
|
case class ExtendBreakoutRoomTimeInternalMsg(parentId: String, breakoutId: String, extendTimeInMinutes: Int) extends InMessage
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sent by parent meeting to breakout room to eject user.
|
||||||
|
* @param parentId
|
||||||
|
* @param breakoutId
|
||||||
|
* @param extUserId
|
||||||
|
* @param ejectedBy
|
||||||
|
* @param reason
|
||||||
|
* @param reasonCode
|
||||||
|
* @param ban
|
||||||
|
*/
|
||||||
|
case class EjectUserFromBreakoutInternalMsg(parentId: String, breakoutId: String, extUserId: String, ejectedBy: String, reason: String, reasonCode: String, ban: Boolean) extends InMessage
|
||||||
|
|
||||||
// DeskShare
|
// DeskShare
|
||||||
case class DeskShareStartedRequest(conferenceName: String, callerId: String, callerIdName: String) extends InMessage
|
case class DeskShareStartedRequest(conferenceName: String, callerId: String, callerIdName: String) extends InMessage
|
||||||
case class DeskShareStoppedRequest(conferenceName: String, callerId: String, callerIdName: String) extends InMessage
|
case class DeskShareStoppedRequest(conferenceName: String, callerId: String, callerIdName: String) extends InMessage
|
||||||
|
@ -16,6 +16,7 @@ trait BreakoutApp2x extends BreakoutRoomCreatedMsgHdlr
|
|||||||
with TransferUserToMeetingRequestHdlr
|
with TransferUserToMeetingRequestHdlr
|
||||||
with EndBreakoutRoomInternalMsgHdlr
|
with EndBreakoutRoomInternalMsgHdlr
|
||||||
with ExtendBreakoutRoomTimeInternalMsgHdlr
|
with ExtendBreakoutRoomTimeInternalMsgHdlr
|
||||||
|
with EjectUserFromBreakoutInternalMsgHdlr
|
||||||
with BreakoutRoomEndedInternalMsgHdlr {
|
with BreakoutRoomEndedInternalMsgHdlr {
|
||||||
|
|
||||||
this: MeetingActor =>
|
this: MeetingActor =>
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package org.bigbluebutton.core.apps.breakout
|
||||||
|
|
||||||
|
import org.bigbluebutton.core.api.EjectUserFromBreakoutInternalMsg
|
||||||
|
import org.bigbluebutton.core.apps.users.UsersApp
|
||||||
|
import org.bigbluebutton.core.models.{ RegisteredUsers }
|
||||||
|
import org.bigbluebutton.core.running.{ LiveMeeting, MeetingActor, OutMsgRouter }
|
||||||
|
import org.bigbluebutton.core2.message.senders.Sender
|
||||||
|
|
||||||
|
trait EjectUserFromBreakoutInternalMsgHdlr {
|
||||||
|
this: MeetingActor =>
|
||||||
|
|
||||||
|
val liveMeeting: LiveMeeting
|
||||||
|
|
||||||
|
val outGW: OutMsgRouter
|
||||||
|
|
||||||
|
def handleEjectUserFromBreakoutInternalMsgHdlr(msg: EjectUserFromBreakoutInternalMsg) = {
|
||||||
|
|
||||||
|
for {
|
||||||
|
registeredUser <- RegisteredUsers.findAllWithExternUserId(msg.extUserId, liveMeeting.registeredUsers)
|
||||||
|
} yield {
|
||||||
|
UsersApp.ejectUserFromMeeting(
|
||||||
|
outGW,
|
||||||
|
liveMeeting,
|
||||||
|
registeredUser.id,
|
||||||
|
msg.ejectedBy,
|
||||||
|
msg.reason,
|
||||||
|
msg.reasonCode,
|
||||||
|
msg.ban
|
||||||
|
)
|
||||||
|
// send a system message to force disconnection
|
||||||
|
Sender.sendDisconnectClientSysMsg(msg.breakoutId, registeredUser.id, msg.ejectedBy, msg.reasonCode, outGW)
|
||||||
|
|
||||||
|
log.info("Eject user {} id={} in breakoutId {}", registeredUser.name, registeredUser.id, msg.breakoutId)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,12 @@
|
|||||||
package org.bigbluebutton.core.apps.users
|
package org.bigbluebutton.core.apps.users
|
||||||
|
|
||||||
import org.bigbluebutton.common2.msgs._
|
import org.bigbluebutton.common2.msgs._
|
||||||
|
import org.bigbluebutton.core.api.{ EjectUserFromBreakoutInternalMsg }
|
||||||
import org.bigbluebutton.core.running.{ LiveMeeting, OutMsgRouter }
|
import org.bigbluebutton.core.running.{ LiveMeeting, OutMsgRouter }
|
||||||
import org.bigbluebutton.core2.message.senders.Sender
|
import org.bigbluebutton.core2.message.senders.Sender
|
||||||
import org.bigbluebutton.core.apps.{ PermissionCheck, RightsManagementTrait }
|
import org.bigbluebutton.core.apps.{ PermissionCheck, RightsManagementTrait }
|
||||||
|
import org.bigbluebutton.core.bus.BigBlueButtonEvent
|
||||||
|
import org.bigbluebutton.core.domain.MeetingState2x
|
||||||
import org.bigbluebutton.core.models.{ EjectReasonCode, RegisteredUsers }
|
import org.bigbluebutton.core.models.{ EjectReasonCode, RegisteredUsers }
|
||||||
|
|
||||||
trait EjectUserFromMeetingCmdMsgHdlr extends RightsManagementTrait {
|
trait EjectUserFromMeetingCmdMsgHdlr extends RightsManagementTrait {
|
||||||
@ -12,7 +15,7 @@ trait EjectUserFromMeetingCmdMsgHdlr extends RightsManagementTrait {
|
|||||||
val liveMeeting: LiveMeeting
|
val liveMeeting: LiveMeeting
|
||||||
val outGW: OutMsgRouter
|
val outGW: OutMsgRouter
|
||||||
|
|
||||||
def handleEjectUserFromMeetingCmdMsg(msg: EjectUserFromMeetingCmdMsg) {
|
def handleEjectUserFromMeetingCmdMsg(msg: EjectUserFromMeetingCmdMsg, state: MeetingState2x) {
|
||||||
val meetingId = liveMeeting.props.meetingProp.intId
|
val meetingId = liveMeeting.props.meetingProp.intId
|
||||||
val userId = msg.body.userId
|
val userId = msg.body.userId
|
||||||
val ejectedBy = msg.body.ejectedBy
|
val ejectedBy = msg.body.ejectedBy
|
||||||
@ -42,6 +45,18 @@ trait EjectUserFromMeetingCmdMsgHdlr extends RightsManagementTrait {
|
|||||||
// Hunt down all registered users based on extern userid and eject them all.
|
// Hunt down all registered users based on extern userid and eject them all.
|
||||||
// ralam april 21, 2020
|
// ralam april 21, 2020
|
||||||
RegisteredUsers.findAllWithExternUserId(registeredUser.externId, liveMeeting.registeredUsers) foreach { ru =>
|
RegisteredUsers.findAllWithExternUserId(registeredUser.externId, liveMeeting.registeredUsers) foreach { ru =>
|
||||||
|
|
||||||
|
//Eject from Breakouts
|
||||||
|
for {
|
||||||
|
breakoutModel <- state.breakout
|
||||||
|
} yield {
|
||||||
|
breakoutModel.rooms.values.foreach { room =>
|
||||||
|
room.users.filter(u => u.id == ru.externId + "-" + room.sequence).foreach(user => {
|
||||||
|
eventBus.publish(BigBlueButtonEvent(room.id, EjectUserFromBreakoutInternalMsg(meetingId, room.id, user.id, ejectedBy, reason, EjectReasonCode.EJECT_USER, ban)))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//println("****************** User " + ejectedBy + " ejecting other user " + ru.id)
|
//println("****************** User " + ejectedBy + " ejecting other user " + ru.id)
|
||||||
UsersApp.ejectUserFromMeeting(
|
UsersApp.ejectUserFromMeeting(
|
||||||
outGW,
|
outGW,
|
||||||
@ -53,7 +68,7 @@ trait EjectUserFromMeetingCmdMsgHdlr extends RightsManagementTrait {
|
|||||||
ban
|
ban
|
||||||
)
|
)
|
||||||
|
|
||||||
log.info("Eject userId=" + userId + " by " + ejectedBy + " and ban=" + banUser)
|
log.info("Eject user {} userId={} by {} and ban=" + banUser + " in meeting {}", registeredUser.name, userId, ejectedBy, meetingId)
|
||||||
|
|
||||||
// send a system message to force disconnection
|
// send a system message to force disconnection
|
||||||
Sender.sendDisconnectClientSysMsg(meetingId, ru.id, ejectedBy, EjectReasonCode.EJECT_USER, outGW)
|
Sender.sendDisconnectClientSysMsg(meetingId, ru.id, ejectedBy, EjectReasonCode.EJECT_USER, outGW)
|
||||||
|
@ -284,6 +284,7 @@ class MeetingActor(
|
|||||||
case msg: BreakoutRoomUsersUpdateInternalMsg => state = handleBreakoutRoomUsersUpdateInternalMsg(msg, state)
|
case msg: BreakoutRoomUsersUpdateInternalMsg => state = handleBreakoutRoomUsersUpdateInternalMsg(msg, state)
|
||||||
case msg: EndBreakoutRoomInternalMsg => handleEndBreakoutRoomInternalMsg(msg)
|
case msg: EndBreakoutRoomInternalMsg => handleEndBreakoutRoomInternalMsg(msg)
|
||||||
case msg: ExtendBreakoutRoomTimeInternalMsg => state = handleExtendBreakoutRoomTimeInternalMsgHdlr(msg, state)
|
case msg: ExtendBreakoutRoomTimeInternalMsg => state = handleExtendBreakoutRoomTimeInternalMsgHdlr(msg, state)
|
||||||
|
case msg: EjectUserFromBreakoutInternalMsg => handleEjectUserFromBreakoutInternalMsgHdlr(msg)
|
||||||
case msg: BreakoutRoomEndedInternalMsg => state = handleBreakoutRoomEndedInternalMsg(msg, state)
|
case msg: BreakoutRoomEndedInternalMsg => state = handleBreakoutRoomEndedInternalMsg(msg, state)
|
||||||
case msg: SendBreakoutTimeRemainingInternalMsg =>
|
case msg: SendBreakoutTimeRemainingInternalMsg =>
|
||||||
handleSendBreakoutTimeRemainingInternalMsg(msg)
|
handleSendBreakoutTimeRemainingInternalMsg(msg)
|
||||||
@ -408,7 +409,7 @@ class MeetingActor(
|
|||||||
|
|
||||||
// Client requested to eject user
|
// Client requested to eject user
|
||||||
case m: EjectUserFromMeetingCmdMsg =>
|
case m: EjectUserFromMeetingCmdMsg =>
|
||||||
usersApp.handleEjectUserFromMeetingCmdMsg(m)
|
usersApp.handleEjectUserFromMeetingCmdMsg(m, state)
|
||||||
updateUserLastActivity(m.body.ejectedBy)
|
updateUserLastActivity(m.body.ejectedBy)
|
||||||
|
|
||||||
// Another part of system (e.g. bbb-apps) requested to eject user.
|
// Another part of system (e.g. bbb-apps) requested to eject user.
|
||||||
|
Loading…
Reference in New Issue
Block a user