diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java index 97d1a884ea2f..5b02869e2c59 100644 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java @@ -87,31 +87,15 @@ public void getRecordingStatus(String meetingId, String userId) { bbbInGW.getRecordingStatus(meetingId, userId); } - public void askingToEnter(String meetingId, String userId) { - bbbInGW.userRequestToEnter(meetingId, userId); - } - public void getGuestPolicy(String meetingId, String requesterId) { bbbInGW.getGuestPolicy(meetingId, requesterId); } - public void newGuestPolicy(String meetingId, String guestPolicy) { - bbbInGW.setGuestPolicy(meetingId, guestPolicy); - } - - public void askingForGuestWaiting(String meetingId, String requesterId) { - bbbInGW.getGuestsWaiting(meetingId, requesterId); - } - - public void responseToGuest(String meetingId, String userId, Boolean resp) { - bbbInGW.responseToGuest(meetingId, userId, resp); - } - - public void responseToAllGuests(String meetingId, Boolean resp) { - bbbInGW.responseToAllGuests(meetingId, resp); + public void newGuestPolicy(String meetingId, String guestPolicy, String setBy) { + bbbInGW.setGuestPolicy(meetingId, guestPolicy, setBy); } - public void kickGuest(String meetingId, String guestId) { - bbbInGW.kickGuest(meetingId, guestId); + public void responseToGuest(String meetingId, String userId, Boolean response, String requesterId) { + bbbInGW.responseToGuest(meetingId, userId, response, requesterId); } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsService.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsService.java index 7c4da6b478c2..e7406367ef46 100644 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsService.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsService.java @@ -104,12 +104,6 @@ private BigBlueButtonSession getBbbSession() { return (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION); } - public void askingToEnter() { - String userId = getBbbSession().getInternalUserID(); - String roomName = Red5.getConnectionLocal().getScope().getName(); - application.askingToEnter(roomName, userId); - } - public void getGuestPolicy() { String requesterId = getBbbSession().getInternalUserID(); String roomName = Red5.getConnectionLocal().getScope().getName(); @@ -117,28 +111,14 @@ public void getGuestPolicy() { } public void setGuestPolicy(String guestPolicy) { + String requesterId = getBbbSession().getInternalUserID(); String roomName = Red5.getConnectionLocal().getScope().getName(); - application.newGuestPolicy(roomName, guestPolicy); - } - - public void getGuestsWaiting() { - String userId = getBbbSession().getInternalUserID(); - String roomName = Red5.getConnectionLocal().getScope().getName(); - application.askingForGuestWaiting(roomName, userId); - } - - public void responseToAllGuests(Boolean resp) { - String roomName = Red5.getConnectionLocal().getScope().getName(); - application.responseToAllGuests(roomName, resp); + application.newGuestPolicy(roomName, guestPolicy, requesterId); } public void responseToGuest(Map msg) { + String requesterId = getBbbSession().getInternalUserID(); String roomName = Red5.getConnectionLocal().getScope().getName(); - application.responseToGuest(roomName, (String) msg.get("guestID"), (Boolean) msg.get("response")); - } - - public void kickGuest(String guestId) { - String roomName = Red5.getConnectionLocal().getScope().getName(); - application.kickGuest(roomName, guestId); + application.responseToGuest(roomName, (String) msg.get("guestID"), (Boolean) msg.get("response"), requesterId); } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java index 65e23964ff8c..765fd1aa4ea3 100644 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/core/api/IBigBlueButtonInGW.java @@ -44,13 +44,9 @@ void createMeeting2(String meetingID, String externalMeetingID, String meetingNa void getRecordingStatus(String meetingId, String userId); void userConnectedToGlobalAudio(String voiceConf, String userid, String name); void userDisconnectedFromGlobalAudio(String voiceConf, String userid, String name); - void userRequestToEnter(String meetingID, String userID); void getGuestPolicy(String meetingID, String userID); - void setGuestPolicy(String meetingID, String guestPolicy); - void getGuestsWaiting(String meetingID, String requesterID); - void responseToGuest(String meetingID, String userID, Boolean response); - void responseToAllGuests(String meetingID, Boolean response); - void kickGuest(String meetingID, String guestID); + void setGuestPolicy(String meetingID, String guestPolicy, String setBy); + void responseToGuest(String meetingID, String userID, Boolean response, String requesterID); // Voice void muteAllExceptPresenter(String meetingID, String requesterID, Boolean mute); diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala index 4542b5e3eef1..65f8610558d4 100755 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala @@ -190,15 +190,11 @@ class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway, presUtil: PreuploadedPresen } // Guest support - def userRequestToEnter(meetingID: String, userID: String) { - bbbGW.accept(new UserRequestToEnter(meetingID, userID)) - } - def getGuestPolicy(meetingID: String, requesterID: String) { bbbGW.accept(new GetGuestPolicy(meetingID, requesterID)) } - def setGuestPolicy(meetingID: String, guestPolicy: String) { + def setGuestPolicy(meetingID: String, guestPolicy: String, setBy: String) { val policy = guestPolicy.toUpperCase() match { case "ALWAYS_ACCEPT" => GuestPolicy.ALWAYS_ACCEPT case "ALWAYS_DENY" => GuestPolicy.ALWAYS_DENY @@ -206,23 +202,11 @@ class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway, presUtil: PreuploadedPresen //default case undef => GuestPolicy.ASK_MODERATOR } - bbbGW.accept(new SetGuestPolicy(meetingID, policy)) - } - - def getGuestsWaiting(meetingID: String, requesterID: String) { - bbbGW.accept(new GetGuestsWaiting(meetingID, requesterID)) - } - - def responseToGuest(meetingID: String, guestID: String, response: java.lang.Boolean) { - bbbGW.accept(new RespondToGuest(meetingID, guestID, response)) - } - - def responseToAllGuests(meetingID: String, response: java.lang.Boolean) { - bbbGW.accept(new RespondToAllGuests(meetingID, response)) + bbbGW.accept(new SetGuestPolicy(meetingID, policy, setBy)) } - def kickGuest(meetingID: String, guestID: String) { - bbbGW.accept(new KickGuest(meetingID, guestID)) + def responseToGuest(meetingID: String, guestID: String, response: java.lang.Boolean, requesterID: String) { + bbbGW.accept(new RespondToGuest(meetingID, guestID, response, requesterID)) } /************************************************************************************** diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/CollectorActor.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/CollectorActor.scala index 1e513e9a5a9b..da09b0fe53c4 100755 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/CollectorActor.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/CollectorActor.scala @@ -98,12 +98,9 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor { case msg: UndoWhiteboardRequest => handleUndoWhiteboardRequest(msg) case msg: EnableWhiteboardRequest => handleEnableWhiteboardRequest(msg) case msg: IsWhiteboardEnabledRequest => handleIsWhiteboardEnabledRequest(msg) - case msg: UserRequestToEnter => handleUserRequestToEnter(msg) case msg: GetGuestPolicy => handleGetGuestPolicy(msg) case msg: SetGuestPolicy => handleSetGuestPolicy(msg) - case msg: GetGuestsWaiting => handleGetGuestsWaiting(msg) case msg: RespondToGuest => handleRespondToGuest(msg) - case msg: KickGuest => handleKickGuest(msg) case msg: GetAllMeetingsRequest => handleGetAllMeetingsRequest(msg) //OUT MESSAGES @@ -184,12 +181,9 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor { case msg: UndoWhiteboardEvent => handleUndoWhiteboardEvent(msg) case msg: WhiteboardEnabledEvent => handleWhiteboardEnabledEvent(msg) case msg: IsWhiteboardEnabledReply => handleIsWhiteboardEnabledReply(msg) - case msg: GuestRequestedToEnter => handleGuestRequestedToEnter(msg) case msg: GetGuestPolicyReply => handleGetGuestPolicyReply(msg) case msg: GuestPolicyChanged => handleGuestPolicyChanged(msg) - case msg: GetGuestsWaitingReply => handleGetGuestsWaitingReply(msg) case msg: ResponseToGuest => handleResponseToGuest(msg) - case msg: GuestKicked => handleGuestKicked(msg) case msg: GetAllMeetingsReply => handleGetAllMeetingsReply(msg) case _ => // do nothing @@ -220,6 +214,8 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor { wuser.put(Constants.LOCKED, user.locked:java.lang.Boolean) wuser.put(Constants.WEBCAM_STREAM, user.webcamStream) wuser.put(Constants.PHONE_USER, user.phoneUser:java.lang.Boolean) + wuser.put(Constants.GUEST, user.guest:java.lang.Boolean) + wuser.put(Constants.WAITING_FOR_ACCEPTANCE, user.waitingForAcceptance:java.lang.Boolean) wuser.put(Constants.VOICE_USER, vuser) wuser @@ -2218,20 +2214,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor { dispatcher.dispatch(json) } - private def handleUserRequestToEnter(msg: UserRequestToEnter) { - val payload = new java.util.HashMap[String, Any]() - payload.put(Constants.MEETING_ID, msg.meetingID) - payload.put(Constants.USER_ID, msg.userID) - - val header = new java.util.HashMap[String, Any]() - header.put(Constants.NAME, MessageNames.USER_REQUEST_TO_ENTER) - header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp) - header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime) - -// println("***** DISPATCHING USER REQUEST TO ENTER *****************") - dispatcher.dispatch(buildJson(header, payload)) - } - private def handleGetGuestPolicy(msg: GetGuestPolicy) { val payload = new java.util.HashMap[String, Any]() payload.put(Constants.MEETING_ID, msg.meetingID) @@ -2260,25 +2242,12 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor { dispatcher.dispatch(buildJson(header, payload)) } - private def handleGetGuestsWaiting(msg: GetGuestsWaiting) { - val payload = new java.util.HashMap[String, Any]() - payload.put(Constants.MEETING_ID, msg.meetingID) - payload.put(Constants.REQUESTER_ID, msg.requesterID) - - val header = new java.util.HashMap[String, Any]() - header.put(Constants.NAME, MessageNames.GET_GUESTS_WAITING) - header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp) - header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime) - -// println("***** DISPATCHING GET GUESTS WAITING *****************") - dispatcher.dispatch(buildJson(header, payload)) - } - private def handleRespondToGuest(msg: RespondToGuest) { val payload = new java.util.HashMap[String, Any]() payload.put(Constants.MEETING_ID, msg.meetingID) payload.put(Constants.USER_ID, msg.guestID) payload.put(Constants.RESPONSE, msg.response.toString()) + payload.put(Constants.REQUESTER_ID, msg.requesterID) val header = new java.util.HashMap[String, Any]() header.put(Constants.NAME, MessageNames.RESPOND_TO_GUEST) @@ -2289,35 +2258,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor { dispatcher.dispatch(buildJson(header, payload)) } - private def handleKickGuest(msg: KickGuest) { - val payload = new java.util.HashMap[String, Any]() - payload.put(Constants.MEETING_ID, msg.meetingID) - payload.put(Constants.USER_ID, msg.guestID) - - val header = new java.util.HashMap[String, Any]() - header.put(Constants.NAME, MessageNames.KICK_GUEST) - header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp) - header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime) - -// println("***** DISPATCHING KICK GUEST *****************") - dispatcher.dispatch(buildJson(header, payload)) - } - - private def handleGuestRequestedToEnter(msg: GuestRequestedToEnter) { - val payload = new java.util.HashMap[String, Any]() - payload.put(Constants.MEETING_ID, msg.meetingID) - payload.put(Constants.USER_ID, msg.userID) - payload.put(Constants.NAME, msg.name) - - val header = new java.util.HashMap[String, Any]() - header.put(Constants.NAME, MessageNames.GUEST_REQUESTED_TO_ENTER) - header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp) - header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime) - -// println("***** DISPATCHING GUEST REQUESTED TO ENTER *****************") - dispatcher.dispatch(buildJson(header, payload)) - } - private def handleGetGuestPolicyReply(msg: GetGuestPolicyReply) { val payload = new java.util.HashMap[String, Any]() payload.put(Constants.MEETING_ID, msg.meetingID) @@ -2347,21 +2287,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor { dispatcher.dispatch(buildJson(header, payload)) } - private def handleGetGuestsWaitingReply(msg: GetGuestsWaitingReply) { - val payload = new java.util.HashMap[String, Any]() - payload.put(Constants.MEETING_ID, msg.meetingID) - payload.put(Constants.REQUESTER_ID, msg.requesterID) - payload.put(Constants.GUESTS_WAITING, msg.guestsWaiting) - - val header = new java.util.HashMap[String, Any]() - header.put(Constants.NAME, MessageNames.GET_GUESTS_WAITING_REPLY) - header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp) - header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime) - -// println("***** DISPATCHING GET GUESTS WAITING REPLY *****************") - dispatcher.dispatch(buildJson(header, payload)) - } - private def handleResponseToGuest(msg: ResponseToGuest) { val payload = new java.util.HashMap[String, Any]() payload.put(Constants.MEETING_ID, msg.meetingID) @@ -2377,20 +2302,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor { dispatcher.dispatch(buildJson(header, payload)) } - private def handleGuestKicked(msg: GuestKicked) { - val payload = new java.util.HashMap[String, Any]() - payload.put(Constants.MEETING_ID, msg.meetingID) - payload.put(Constants.USER_ID, msg.guestID) - - val header = new java.util.HashMap[String, Any]() - header.put(Constants.NAME, MessageNames.GUEST_KICKED) - header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp) - header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime) - -// println("***** DISPATCHING GUEST KICKED *****************") - dispatcher.dispatch(buildJson(header, payload)) - } - private def handleGetAllMeetingsReply(msg: GetAllMeetingsReply) { val json = MeetingMessageToJsonConverter.getAllMeetingsReplyToJson(msg) println("***** DISPATCHING GET ALL MEETINGS REPLY OUTMSG *****************") diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala index 519fc6300a58..01a6441c2ed1 100755 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala @@ -30,7 +30,9 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee var recording = false; var muted = false; var meetingEnded = false + var guestPolicy = GuestPolicy.ASK_MODERATOR + var guestPolicySetBy:String = null def getDuration():Long = { duration @@ -132,13 +134,9 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee case msg: SetRecordingStatus => handleSetRecordingStatus(msg) case msg: GetRecordingStatus => handleGetRecordingStatus(msg) case msg: VoiceRecording => handleVoiceRecording(msg) - case msg: UserRequestToEnter => handleUserRequestToEnter(msg) case msg: GetGuestPolicy => handleGetGuestPolicy(msg) case msg: SetGuestPolicy => handleSetGuestPolicy(msg) - case msg: GetGuestsWaiting => handleGetGuestsWaiting(msg) case msg: RespondToGuest => handleRespondToGuest(msg) - case msg: RespondToAllGuests => handleRespondToAllGuests(msg) - case msg: KickGuest => handleKickGuest(msg) case msg: EndMeeting => handleEndMeeting(msg) case StopMeetingActor => exit @@ -257,6 +255,7 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee private def handleSetGuestPolicy(msg: SetGuestPolicy) { guestPolicy = msg.policy + guestPolicySetBy = msg.setBy outGW.send(new GuestPolicyChanged(msg.meetingID, recorded, guestPolicy.toString())) } @@ -272,4 +271,4 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee permissions == other } -} \ No newline at end of file +} diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/Constants.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/Constants.scala index 8e91dc047e06..daabe7b85024 100644 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/Constants.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/Constants.scala @@ -90,6 +90,7 @@ object Constants { val KEEP_ALIVE_ID = "keep_alive_id" val LISTEN_ONLY = "listen_only" val GUEST = "guest" + val WAITING_FOR_ACCEPTANCE = "waiting_for_acceptance" val GUEST_POLICY = "guest_policy" val GUESTS_WAITING = "guests_waiting" } diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala index 054ab3b3cca3..4856e7be54cb 100644 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/InMessages.scala @@ -191,11 +191,6 @@ case class UserDisconnectedFromGlobalAudio( ) extends InMessage // Guest support -case class UserRequestToEnter( - meetingID: String, - userID: String -) extends InMessage - case class GetGuestPolicy( meetingID: String, requesterID: String @@ -203,28 +198,15 @@ case class GetGuestPolicy( case class SetGuestPolicy( meetingID: String, - policy: GuestPolicy -) extends InMessage - -case class GetGuestsWaiting( - meetingID: String, - requesterID: String + policy: GuestPolicy, + setBy: String ) extends InMessage case class RespondToGuest( meetingID: String, guestID: String, - response: Boolean -) extends InMessage - -case class RespondToAllGuests( - meetingID: String, - response: Boolean -) extends InMessage - -case class KickGuest( - meetingID: String, - guestID: String + response: Boolean, + requesterID: String ) extends InMessage // Layout diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/MessageNames.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/MessageNames.scala index 1a39f644ea34..6269f4b566e5 100755 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/MessageNames.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/MessageNames.scala @@ -78,13 +78,9 @@ object MessageNames { val UNDO_WHITEBOARD = "undo_whiteboard_request" val ENABLE_WHITEBOARD = "enable_whiteboard_request" val IS_WHITEBOARD_ENABLED = "is_whiteboard_enabled_request" - val USER_REQUEST_TO_ENTER = "user_request_to_enter" var GET_GUEST_POLICY = "get_guest_policy" val SET_GUEST_POLICY = "set_guest_policy" - val GET_GUESTS_WAITING = "get_guests_waiting" val RESPOND_TO_GUEST = "respond_to_guest" - val RESPOND_TO_ALL_GUESTS = "respond_to_all_guests" - val KICK_GUEST = "kick_guest" val GET_ALL_MEETINGS_REQUEST = "get_all_meetings_request" // OUT MESSAGES @@ -166,11 +162,8 @@ object MessageNames { val MEETING_DESTROYED_EVENT = "meeting_destroyed_event" val KEEP_ALIVE_REPLY = "keep_alive_reply" val USER_LISTEN_ONLY = "user_listening_only" - val GUEST_REQUESTED_TO_ENTER = "guest_requested_to_enter" var GET_GUEST_POLICY_REPLY = "get_guest_policy_reply" val GUEST_POLICY_CHANGED = "guest_policy_changed" - val GET_GUESTS_WAITING_REPLY = "get_guests_waiting_reply" val RESPONSE_TO_GUEST = "response_to_guest" - val GUEST_KICKED = "guest_kicked" val GET_ALL_MEETINGS_REPLY = "get_all_meetings_reply" -} \ No newline at end of file +} diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/OutMessages.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/OutMessages.scala index 5ea138ebb7f9..7c40df2056f7 100644 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/OutMessages.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/OutMessages.scala @@ -207,13 +207,6 @@ case class UserJoined( version:String = Versions.V_0_0_1 ) extends IOutMessage -case class JoinMeetingReply( - meetingID: String, - recorded: Boolean, - user:UserVO, - version:String = Versions.V_0_0_1 -) extends IOutMessage - case class UserRaisedHand( meetingID: String, recorded: Boolean, @@ -655,13 +648,6 @@ case class IsWhiteboardEnabledReply( version:String = Versions.V_0_0_1 ) extends IOutMessage -case class GuestRequestedToEnter ( - meetingID: String, - recorded: Boolean, - userID: String, - name: String -) extends IOutMessage - case class GetGuestPolicyReply( meetingID: String, recorded: Boolean, @@ -675,13 +661,6 @@ case class GuestPolicyChanged( policy: String ) extends IOutMessage -case class GetGuestsWaitingReply( - meetingID: String, - recorded: Boolean, - requesterID: String, - guestsWaiting: String -) extends IOutMessage - case class ResponseToGuest( meetingID: String, recorded: Boolean, @@ -689,12 +668,6 @@ case class ResponseToGuest( response: Boolean ) extends IOutMessage -case class GuestKicked( - meetingID: String, - recorded: Boolean, - guestID: String -) extends IOutMessage - case class GetAllMeetingsReply( meetings: Array[MeetingInfo], version:String = Versions.V_0_0_1 @@ -705,5 +678,3 @@ case class MeetingVO( id: String, recorded: Boolean ) - - diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala index 2fc30c95b5e9..966662d7a950 100644 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/api/ValueObjects.scala @@ -72,6 +72,7 @@ case class UserVO( name: String, role: Role.Role, guest: Boolean, + waitingForAcceptance: Boolean, raiseHand: Boolean, presenter: Boolean, hasStream: Boolean, diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala index 8c96923c4bf5..10b1ca5b290c 100755 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala @@ -20,8 +20,6 @@ trait UsersApp { private var meetingMuted = false private var currentPresenter = new Presenter("system", "system", "system") - - private var guestsWaiting = new collection.immutable.ListSet[String] def hasUser(userID: String):Boolean = { users.hasUser(userID) @@ -271,9 +269,7 @@ trait UsersApp { } def handleGetUsers(msg: GetUsers):Unit = { - // Filter out guests waiting - val approvedUsers = users.getUsers.filter(x => !guestsWaiting.contains(x.userID)) - outGW.send(new GetUsersReply(msg.meetingID, msg.requesterID, approvedUsers)) + outGW.send(new GetUsersReply(msg.meetingID, msg.requesterID, users.getUsers)) } def handleUserJoin(msg: UserJoining):Unit = { @@ -281,37 +277,38 @@ trait UsersApp { regUser foreach { ru => val vu = new VoiceUser(msg.userID, msg.userID, ru.name, ru.name, false, false, false, false) + val waitingForAcceptance = ru.guest && guestPolicy == GuestPolicy.ASK_MODERATOR; val uvo = new UserVO(msg.userID, ru.externId, ru.name, - ru.role, ru.guest, raiseHand=false, presenter=false, + ru.role, ru.guest, waitingForAcceptance=waitingForAcceptance, raiseHand=false, presenter=false, hasStream=false, locked=false, webcamStream="", phoneUser=false, vu, listenOnly=false, permissions) users.addUser(uvo) - // Send UserJoined only if is not a guest or guest policy is always accept - // For guests this message will be sent when they are accepted - if(!ru.guest || guestPolicy == GuestPolicy.ALWAYS_ACCEPT) { - logger.info("User joined meeting: mid=[" + meetingID + "] uid=[" + uvo.userID + "]") + logger.info("User joined meeting: mid=[" + meetingID + "] uid=[" + uvo.userID + "]") + + if (uvo.guest && guestPolicy == GuestPolicy.ALWAYS_DENY) { + outGW.send(new ResponseToGuest(meetingID, recorded, uvo.userID, false)) + } else { outGW.send(new UserJoined(meetingID, recorded, uvo)) outGW.send(new MeetingState(meetingID, recorded, uvo.userID, permissions, meetingMuted)) - - // Become presenter if the only moderator - if (users.numModerators == 1) { - if (ru.role == Role.MODERATOR) { - assignNewPresenter(msg.userID, ru.name, msg.userID) + if (!waitingForAcceptance) { + // Become presenter if the only moderator + if (users.numModerators == 1) { + if (ru.role == Role.MODERATOR) { + assignNewPresenter(msg.userID, ru.name, msg.userID) + } } } + webUserJoined + startRecordingIfAutoStart() } - outGW.send(new JoinMeetingReply(meetingID, recorded, uvo)) - webUserJoined - startRecordingIfAutoStart() } } def handleUserLeft(msg: UserLeaving):Unit = { if (users.hasUser(msg.userID)) { - guestsWaiting = guestsWaiting - msg.userID val user = users.removeUser(msg.userID) user foreach { u => logger.info("User left meeting: mid=[" + meetingID + "] uid=[" + u.userID + "]") @@ -337,14 +334,13 @@ trait UsersApp { msg.voiceUser.callerName, msg.voiceUser.callerNum, true, false, false, false) val uvo = new UserVO(webUserId, webUserId, msg.voiceUser.callerName, - Role.VIEWER, guest=false, raiseHand=false, presenter=false, + Role.VIEWER, guest=false, waitingForAcceptance=false, raiseHand=false, presenter=false, hasStream=false, locked=false, webcamStream="", phoneUser=true, vu, listenOnly=false, permissions) users.addUser(uvo) logger.info("New user joined voice for user [" + uvo.name + "] userid=[" + msg.voiceUser.webUserId + "]") outGW.send(new UserJoined(meetingID, recorded, uvo)) - outGW.send(new JoinMeetingReply(meetingID, recorded, uvo)) outGW.send(new UserJoinedVoice(meetingID, recorded, voiceBridge, uvo)) if (meetingMuted) @@ -440,61 +436,31 @@ trait UsersApp { } } - def handleUserRequestToEnter(msg: UserRequestToEnter) { - users.getUser(msg.userID) match { - case Some(user) => { - guestsWaiting = guestsWaiting + msg.userID; - outGW.send(new GuestRequestedToEnter(meetingID, recorded, msg.userID, user.name)) - } - case None => { -// println("handleUserRequestToEnter user [" + msg.userId + "] not found.") - } - } - } - - def handleGetGuestsWaiting(msg: GetGuestsWaiting) { - if(users.hasUser(msg.requesterID)) { - var message = ""; - guestsWaiting foreach {guest => { - users.getUser(guest) match { - case Some(user) => message = message + user.userID + ":" + user.name + "," - case None => {} - } - }} - outGW.send(new GetGuestsWaitingReply(meetingID, recorded, msg.requesterID, message)) + private def isModerator(userId: String):Boolean = { + users.getUser(userId) match { + case Some(user) => return user.role == Role.MODERATOR && !user.waitingForAcceptance + case None => return false } } def handleRespondToGuest(msg: RespondToGuest) { - if(guestsWaiting.contains(msg.guestID)) { - guestsWaiting = guestsWaiting - msg.guestID - outGW.send(new ResponseToGuest(meetingID, recorded, msg.guestID, msg.response)) - if(msg.response == true) { - users.getUser(msg.guestID) foreach {user => - println("UsersApp - handleResponseToGuest sending userJoined["+user.userID+"]"); - outGW.send(new UserJoined(meetingID, recorded, user)) - outGW.send(new MeetingState(meetingID, recorded, user.userID, permissions, meetingMuted)) - } + if (isModerator(msg.requesterID)) { + var usersToAnswer:Array[UserVO] = null; + if (msg.guestID == null) { + usersToAnswer = users.getUsers.filter(u => u.waitingForAcceptance == true) + } else { + usersToAnswer = users.getUsers.filter(u => u.waitingForAcceptance == true && u.userID == msg.guestID) } - } - } - - def handleRespondToAllGuests(msg: RespondToAllGuests) { - guestsWaiting foreach {guest => - if(msg.response == true) { - users.getUser(guest) foreach {user => - println("UsersApp - handleResponseToGuest sending userJoined["+user.userID+"]"); - outGW.send(new UserJoined(meetingID, recorded, user)) - outGW.send(new MeetingState(meetingID, recorded, user.userID, permissions, meetingMuted)) + usersToAnswer foreach {user => + println("UsersApp - handleResponseToGuest for user [" + user.userID + "]"); + if (msg.response == true) { + val nu = user.copy(waitingForAcceptance=false) + users.addUser(nu) + outGW.send(new UserJoined(meetingID, recorded, nu)) + } else { + outGW.send(new ResponseToGuest(meetingID, recorded, user.userID, msg.response)) } } - outGW.send(new ResponseToGuest(meetingID, recorded, guest, msg.response)) } - guestsWaiting = new collection.immutable.ListSet[String] - } - - def handleKickGuest(msg: KickGuest) { - guestsWaiting = guestsWaiting - msg.guestID; - outGW.send(new GuestKicked(meetingID, recorded, msg.guestID)) } -} \ No newline at end of file +} diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/red5/UsersClientMessageSender.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/red5/UsersClientMessageSender.scala index 2271a0a89121..58e8fbc98213 100644 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/red5/UsersClientMessageSender.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/red5/UsersClientMessageSender.scala @@ -23,7 +23,6 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes case msg: DisconnectUser => handleDisconnectUser(msg) case msg: PresenterAssigned => handleAssignPresenter(msg) case msg: UserJoined => handleUserJoined(msg) - case msg: JoinMeetingReply => handleJoinMeetingReply(msg) case msg: UserLeft => handleUserLeft(msg) case msg: UserStatusChange => handleUserStatusChange(msg) case msg: UserRaisedHand => handleUserRaisedHand(msg) @@ -43,12 +42,9 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes case msg: NewPermissionsSetting => handleNewPermissionsSetting(msg) case msg: MeetingMuted => handleMeetingMuted(msg) case msg: MeetingState => handleMeetingState(msg) - case msg: GuestRequestedToEnter => handleGuestRequestedToEnter(msg) case msg: GetGuestPolicyReply => handleGetGuestPolicyReply(msg) case msg: GuestPolicyChanged => handleGuestPolicyChanged(msg) - case msg: GetGuestsWaitingReply => handleGetGuestsWaitingReply(msg) case msg: ResponseToGuest => handleResponseToGuest(msg) - case msg: GuestKicked => handleGuestKicked(msg) case _ => // println("Unhandled message in UsersClientMessageSender") } @@ -82,6 +78,7 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes wuser.put("name", user.name) wuser.put("role", user.role.toString()) wuser.put("guest", user.guest:java.lang.Boolean) + wuser.put("waitingForAcceptance", user.waitingForAcceptance:java.lang.Boolean) wuser.put("raiseHand", user.raiseHand:java.lang.Boolean) wuser.put("presenter", user.presenter:java.lang.Boolean) wuser.put("hasStream", user.hasStream:java.lang.Boolean) @@ -355,25 +352,17 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes val gson = new Gson(); message.put("msg", gson.toJson(args)) +// println("UsersClientMessageSender - joinMeetingReply \n" + message.get("msg") + "\n") + + var jmr = new DirectClientMessage(msg.meetingID, msg.user.userID, "joinMeetingReply", message); + service.sendMessage(jmr); + // println("UsersClientMessageSender - handleUserJoined \n" + message.get("msg") + "\n") var m = new BroadcastClientMessage(msg.meetingID, "participantJoined", message); service.sendMessage(m); } - private def handleJoinMeetingReply(msg: JoinMeetingReply):Unit = { - var args = new HashMap[String, Object](); - args.put("user", buildUserHashMap(msg.user)); - - val message = new java.util.HashMap[String, Object]() - val gson = new Gson(); - message.put("msg", gson.toJson(args)) - -// println("UsersClientMessageSender - joinMeetingReply \n" + message.get("msg") + "\n") - var jmr = new DirectClientMessage(msg.meetingID, msg.user.userID, "joinMeetingReply", message); - service.sendMessage(jmr); - } - private def handleUserLeft(msg: UserLeft):Unit = { var args = new HashMap[String, Object](); args.put("user", buildUserHashMap(msg.user)); @@ -477,21 +466,6 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes service.sendMessage(m); } - private def handleGuestRequestedToEnter(msg: GuestRequestedToEnter) { - var args = new HashMap[String, Object](); - args.put("userId", msg.userID); - args.put("name", msg.name); - - val message = new java.util.HashMap[String, Object]() - val gson = new Gson(); - message.put("msg", gson.toJson(args)) - -// println("UsersClientMessageSender - handleGuestRequestedToEnter \n" + message.get("msg") + "\n") - - var m = new BroadcastClientMessage(msg.meetingID, "user_requested_to_enter", message); - service.sendMessage(m); - } - private def handleGetGuestPolicyReply(msg: GetGuestPolicyReply) { var args = new HashMap[String, Object](); args.put("guestPolicy", msg.policy.toString()); @@ -520,20 +494,6 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes service.sendMessage(m); } - private def handleGetGuestsWaitingReply(msg: GetGuestsWaitingReply) { - var args = new HashMap[String, Object](); - args.put("guestsWaiting", msg.guestsWaiting); - - val message = new java.util.HashMap[String, Object]() - val gson = new Gson(); - message.put("msg", gson.toJson(args)) - -// println("UsersClientMessageSender - handleGetGuestsWaitingReply \n" + message.get("msg") + "\n") - - val m = new DirectClientMessage(msg.meetingID, msg.requesterID, "get_guests_waiting_reply", message); - service.sendMessage(m); - } - private def handleResponseToGuest(msg: ResponseToGuest) { var args = new HashMap[String, Object](); args.put("userId", msg.guestID); @@ -545,21 +505,7 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes // println("UsersClientMessageSender - handleResponseToGuest \n" + message.get("msg") + "\n") - val m = new BroadcastClientMessage(msg.meetingID, "response_to_guest", message); - service.sendMessage(m); - } - - private def handleGuestKicked(msg: GuestKicked) { - var args = new HashMap[String, Object](); - args.put("guestId", msg.guestID); - - val message = new java.util.HashMap[String, Object]() - val gson = new Gson(); - message.put("msg", gson.toJson(args)) - -// println("UsersClientMessageSender - handleGuestKicked \n" + message.get("msg") + "\n") - - val m = new BroadcastClientMessage(msg.meetingID, "guest_kicked", message); + val m = new DirectClientMessage(msg.meetingID, msg.guestID, "response_to_guest", message); service.sendMessage(m); } } diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/redis/UsersMessageToJsonConverter.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/redis/UsersMessageToJsonConverter.scala index 8b7138994eca..bc9a5078612b 100644 --- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/redis/UsersMessageToJsonConverter.scala +++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/redis/UsersMessageToJsonConverter.scala @@ -17,6 +17,7 @@ object UsersMessageToJsonConverter { wuser += "name" -> user.name wuser += "role" -> user.role.toString() wuser += "guest" -> user.guest + wuser += "waiting_for_acceptance" -> user.waitingForAcceptance wuser += "raise_hand" -> user.raiseHand wuser += "presenter" -> user.presenter wuser += "has_stream" -> user.hasStream @@ -386,4 +387,4 @@ object UsersMessageToJsonConverter { val header = Util.buildHeader(MessageNames.USER_LISTEN_ONLY, msg.version, None) Util.buildJson(header, payload) } -} \ No newline at end of file +} diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as index ea50c4cdad78..95ff1be74af1 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as @@ -177,17 +177,5 @@ package org.bigbluebutton.core } return null; } - - public static function amIGuest(): Boolean { - return UserManager.getInstance().getConference().amIGuest(); - } - - public static function amIWaitForModerator(): Boolean { - return UserManager.getInstance().getConference().amIWaitForModerator(); - } - - public static function setWaitForModerator(state: Boolean): void { - UserManager.getInstance().getConference().setWaitForModerator(state); - } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/BBBEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/BBBEvent.as index f15635cf35c1..31e18b762b4a 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/events/BBBEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/BBBEvent.as @@ -45,18 +45,12 @@ package org.bigbluebutton.main.events { public static const SETTINGS_CONFIRMED:String = "BBB_SETTINGS_CONFIRMED"; public static const SETTINGS_CANCELLED:String = "BBB_SETTINGS_CANCELLED"; + public static const ACCEPT_ALL_WAITING_GUESTS:String = "BBB_ACCEPT_ALL_WAITING_GUESTS"; public static const DENY_ALL_WAITING_GUESTS:String = "BBB_DENY_ALL_WAITING_GUESTS"; - - public static const DENY_GUEST:String = "BBB_DENY_GUEST"; - public static const ACCEPT_GUEST:String = "BBB_ACCEPT_GUEST"; - public static const ASK_TO_ACCEPT_GUEST:String = "BBB_ASK_TO_ACCEPT_GUEST"; - public static const BROADCAST_GUEST_POLICY:String = "BBB_BROADCAST_GUEST_POLICY"; public static const RETRIEVE_GUEST_POLICY:String = "BBB_RETRIEVE_GUEST_POLICY"; - public static const KICK_GUEST:String = "KICK_GUEST"; - public var message:String; public var payload:Object = new Object(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/LogoutEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/LogoutEvent.as index 1f904bf1bf40..533796de0025 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/events/LogoutEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/LogoutEvent.as @@ -25,7 +25,7 @@ package org.bigbluebutton.main.events public static const USER_LOGGED_OUT:String = "USER_LOGGED_OUT"; public static const DISCONNECT_TEST:String = "disconnect_test"; public static const USER_KICKED_OUT:String = "USER_KICKED_OUT"; - public static const GUEST_KICKED_OUT:String = "GUEST_KICKED_OUT"; + public static const MODERATOR_DENIED_ME:String = "MODERATOR_DENIED_ME"; public static const CONFIRM_LOGOUT:String = "CONFIRM_LOGOUT"; public static const REFOCUS_CONFIRM:String = "REFOCUS_CONFIRM"; @@ -36,4 +36,4 @@ package org.bigbluebutton.main.events super(type, true, false); } } -} \ No newline at end of file +} diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/WaitModeratorEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/WaitModeratorEvent.as index 9727d5a4f606..432cb0e9fc5c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/events/WaitModeratorEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/WaitModeratorEvent.as @@ -26,8 +26,6 @@ package org.bigbluebutton.main.events { public static const USER_LOGGED_IN:String = "UserLoggedIn"; - public var conferenceParameters:ConferenceParameters; - public function WaitModeratorEvent(type:String) { super(type, true, false); diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml index 5a459e832c52..0d8f6bea9855 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml @@ -69,7 +69,7 @@ with BigBlueButton; if not, see . - + diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as index b124333138e0..da3e84ef0c3f 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as @@ -52,9 +52,8 @@ package org.bigbluebutton.main.model.users [Bindable] public var disableMyPublicChat:Boolean = false; [Bindable] public var lockedLayout:Boolean = false; - [Bindable] public var waitingForMod:Boolean = false; - [Bindable] public var guest:Boolean; - [Bindable] public var acceptedJoin:Boolean = false; + [Bindable] public var guest:Boolean = false; + [Bindable] public var waitingForAcceptance:Boolean = false; private var _hasStream:Boolean = false; [Bindable] diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as index 2ba664d8cdba..c37d64d9f381 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as @@ -44,7 +44,7 @@ package org.bigbluebutton.main.model.users { private var _myCamSettings:CameraSettingsVO = new CameraSettingsVO(); [Bindable] private var me:BBBUser = null; - [Bindable] public var users:ArrayCollection = null; + [Bindable] public var users:ArrayCollection = null; private var sort:Sort; private var defaultLayout:String; @@ -113,15 +113,13 @@ package org.bigbluebutton.main.model.users { public function addUser(newuser:BBBUser):void { trace("Adding new user [" + newuser.userID + "]"); - if (! hasUser(newuser.userID)) { - trace("Am I this new user [" + newuser.userID + ", " + me.userID + "]"); - if (newuser.userID == me.userID) { - newuser.me = true; - } - - users.addItem(newuser); - users.refresh(); - } + removeUserHelper(newuser.userID); + if (newuser.userID == me.userID) { + newuser.me = true; + } + + users.addItem(newuser); + users.refresh(); } public function setCamPublishing(publishing:Boolean):void { @@ -144,14 +142,6 @@ package org.bigbluebutton.main.model.users { return defaultLayout; } - public function amIWaitForModerator():Boolean { - return me.waitingForMod; - } - - public function setWaitForModerator(state:Boolean):void { - me.waitingForMod = state; - } - public function hasUser(userID:String):Boolean { var p:Object = getUserIndex(userID); if (p != null) { @@ -230,15 +220,23 @@ package org.bigbluebutton.main.model.users { var a:BBBUser = user.participant as BBBUser; return a.presenter; } - - public function removeUser(userID:String):void { + + private function removeUserHelper(userID:String):BBBUser { var p:Object = getUserIndex(userID); if (p != null) { - trace("removing user[" + p.participant.name + "," + p.participant.userID + "]"); users.removeItemAt(p.index); - //sort(); + return p.participant as BBBUser; + } else { + return null; + } + } + + public function removeUser(userID:String):void { + var p:Object = removeUserHelper(userID); + if (p != null) { + trace("removing user[" + p.name + "," + p.userID + "]"); users.refresh(); - } + } } /** diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as index c4e3a181dbf5..94092321a1bc 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as @@ -361,7 +361,7 @@ package org.bigbluebutton.main.model.users } private function sendGuestUserKickedOutEvent():void { - var e:ConnectionFailedEvent = new ConnectionFailedEvent(ConnectionFailedEvent.GUEST_KICKED_OUT); + var e:ConnectionFailedEvent = new ConnectionFailedEvent(ConnectionFailedEvent.MODERATOR_DENIED_ME); dispatcher.dispatchEvent(e); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as index 9986ab9c5e0e..cff37f8b0fe8 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as @@ -72,6 +72,15 @@ package org.bigbluebutton.main.model.users public function UserService() { dispatcher = new Dispatcher(); + msgReceiver.onAllowedToJoin = function():void { + sender.queryForParticipants(); + sender.queryForRecordingStatus(); + sender.queryForGuestPolicy(); + + var loadCommand:SuccessfulLoginEvent = new SuccessfulLoginEvent(SuccessfulLoginEvent.USER_LOGGED_IN); + loadCommand.conferenceParameters = _conferenceParameters; + dispatcher.dispatchEvent(loadCommand); + } } public function startService(e:UserServicesEvent):void { @@ -191,46 +200,16 @@ package org.bigbluebutton.main.model.users trace(LOG + "userLoggedIn - Setting my userid to [" + e.userid + "]"); UserManager.getInstance().getConference().setMyUserid(e.userid); _conferenceParameters.userid = e.userid; - - sender.queryForParticipants(); - sender.queryForRecordingStatus(); - sender.queryForGuestPolicy(); - - if(UsersUtil.amIGuest() == false) { - var loadCommand:SuccessfulLoginEvent = new SuccessfulLoginEvent(SuccessfulLoginEvent.USER_LOGGED_IN); - loadCommand.conferenceParameters = _conferenceParameters; - dispatcher.dispatchEvent(loadCommand); - } } - public function askToAccept():void { - UserManager.getInstance().getConference().setWaitForModerator(true); - var guestCommand:WaitModeratorEvent = new WaitModeratorEvent(WaitModeratorEvent.USER_LOGGED_IN); - guestCommand.conferenceParameters = _conferenceParameters; - dispatcher.dispatchEvent(guestCommand); - - } - - public function acceptGuest():void { - var loadCommand:SuccessfulLoginEvent = new SuccessfulLoginEvent(SuccessfulLoginEvent.USER_LOGGED_IN); - loadCommand.conferenceParameters = _conferenceParameters; - dispatcher.dispatchEvent(loadCommand); - } - public function denyGuest():void { - dispatcher.dispatchEvent(new LogoutEvent(LogoutEvent.GUEST_KICKED_OUT)); + dispatcher.dispatchEvent(new LogoutEvent(LogoutEvent.MODERATOR_DENIED_ME)); } - public function newGuestPolicy(event:BBBEvent):void { + public function setGuestPolicy(event:BBBEvent):void { sender.setGuestPolicy(event.payload['guestPolicy']); } - public function getAllGuests(e:SuccessfulLoginEvent):void { - if(UserManager.getInstance().getConference().amIModerator()) { - sender.queryForGuestsWaiting(); - } - } - public function guestDisconnect():void { _connectionManager.guestDisconnect(); } @@ -255,22 +234,10 @@ package org.bigbluebutton.main.model.users sender.raiseHand(UserManager.getInstance().getConference().getMyUserId(), e.raised); } - public function askToEnter(e:WaitModeratorEvent):void { - sender.askToEnter(); - } - public function responseToGuest(e:ResponseModeratorEvent):void { sender.responseToGuest(e.userid, e.resp); } - public function responseToAllGuests(e:ResponseModeratorEvent):void { - sender.responseToAllGuests(e.resp); - } - - public function kickGuest(e:BBBEvent):void { - sender.kickGuest(e.payload.userId); - } - public function lowerHand(e:LowerHandEvent):void { if (this.isModerator()) sender.raiseHand(e.userid, false); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/events/ConnectionFailedEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/events/ConnectionFailedEvent.as index 6b9953bb86eb..ab18648179f0 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/events/ConnectionFailedEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/events/ConnectionFailedEvent.as @@ -30,7 +30,7 @@ package org.bigbluebutton.main.model.users.events public static const CONNECTION_REJECTED:String = "connectionRejected"; public static const ASYNC_ERROR:String = "asyncError"; public static const USER_LOGGED_OUT:String = "userHasLoggedOut"; - public static const GUEST_KICKED_OUT:String = "guestKickedOut"; + public static const MODERATOR_DENIED_ME:String = "moderatorDeniedMe"; public function ConnectionFailedEvent(type:String) { diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml index fb2697c79007..c0f3226b3c29 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml @@ -118,7 +118,7 @@ with BigBlueButton; if not, see . setCurrentState(DISPLAY_MESSAGE_ONLY_STATE); redirect(); // we know that the disconnect was requested so automatically redirect break; - case ConnectionFailedEvent.GUEST_KICKED_OUT: + case ConnectionFailedEvent.MODERATOR_DENIED_ME: message = ResourceUtil.getInstance().getString('bbb.logout.guestkickedout'); setCurrentState(DISPLAY_MESSAGE_ONLY_STATE); // setCurrentState(DISPLAY_RECONNECT_BUTTON_STATE); diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml index 0825e6ff32ff..b8cf7d235d04 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml @@ -59,7 +59,7 @@ with BigBlueButton; if not, see . - + @@ -94,6 +94,7 @@ with BigBlueButton; if not, see . import org.bigbluebutton.common.events.SettingsComponentEvent; import org.bigbluebutton.common.events.ToolbarButtonEvent; import org.bigbluebutton.core.BBB; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.events.LockControlEvent; import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.core.vo.LockSettingsVO; @@ -268,8 +269,11 @@ with BigBlueButton; if not, see . public function guestAllowed(evt:ModeratorRespEvent):void { progressBar.visible = true; - waitWindow.guestAllowed(); - } + if (waitWindow != null) { + PopUpManager.removePopUp(waitWindow); + waitWindow = null; + } + } private function fullScreenHandler(evt:FullScreenEvent):void { dispState = stage.displayState + " (fullScreen=" + evt.fullScreen.toString() + ")"; @@ -291,8 +295,15 @@ with BigBlueButton; if not, see . } private function refreshGuestView(evt:RefreshGuestEvent):void { - LogUtil.debug("REFRESH GUEST"); - if(guestWindow == null) { + // do not show the guest window if the user isn't moderator or if he's moderator but is still waiting for acceptance + if ( ! ( + UsersUtil.amIModerator() + && UserManager.getInstance().getConference().getMyUser() != null + && !UserManager.getInstance().getConference().getMyUser().waitingForAcceptance) ) { + return; + } + + if (guestWindow == null) { guestWindow = PopUpManager.createPopUp( mdiCanvas, GuestWindow, false) as GuestWindow; guestWindow.addEventListener(Event.CLOSE, closeGuestWindow); @@ -303,14 +314,14 @@ with BigBlueButton; if not, see . } public function removeGuestWindow(evt:RemoveGuestRequestEvent):void { - if(guestWindow != null) + if (guestWindow != null) { guestWindow.remove(evt.userid); + } } private function openWaitWindow(evt:WaitModeratorEvent):void { progressBar.visible = false; waitWindow = PopUpManager.createPopUp( mdiCanvas, WaitingWindow, false) as WaitingWindow; - waitWindow.conferenceParameters = evt.conferenceParameters; // Calculate position of TitleWindow in Application's coordinates. waitWindow.x = (systemManager.screen.width - waitWindow.width) / 2; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml index 6ae13779b98e..34b8e0cad1ad 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml @@ -37,17 +37,17 @@ with BigBlueButton; if not, see . - + - - + . [Bindable] private var showHelpBtn:Boolean = false; [Bindable] private var showToolbar:Boolean = false; - [Bindable] private var showConfigurationsButton:Boolean = false; + [Bindable] private var showGuestSettingsButton:Boolean = false; + [Bindable] private var showRecordButton:Boolean = false; [Bindable] public var toolbarOptions:LayoutOptions = new LayoutOptions(); [Bindable] private var baseIndex:int; [Bindable] private var numButtons:int; @@ -112,8 +113,7 @@ with BigBlueButton; if not, see . timer.addEventListener(TimerEvent.TIMER, checkAccessiblity); timer.start(); - - + BindingUtils.bindSetter(refreshModeratorButtonsVisibility, UserManager.getInstance().getConference(), "record"); } private function onCreationComplete():void { @@ -176,13 +176,14 @@ with BigBlueButton; if not, see . meetingNameLbl.text = meetingTitle; } } - // need to put it here because on init() the conference object - // still doesn't have the updated information - refreshSettingsBtn(null); } - private function refreshSettingsBtn(e:*):void { - showConfigurationsButton = UsersUtil.amIModerator() && !UsersUtil.amIWaitForModerator(); + private function refreshModeratorButtonsVisibility(e:*):void { + showGuestSettingsButton = UsersUtil.amIModerator() + && UserManager.getInstance().getConference().getMyUser() != null + && !UserManager.getInstance().getConference().getMyUser().waitingForAcceptance; + + showRecordButton = showGuestSettingsButton && UserManager.getInstance().getConference().record; } public function addButton(name:String):Button{ @@ -388,7 +389,7 @@ with BigBlueButton; if not, see . tabIndex="{baseIndex+4}" height="22" styleName="quickWindowLinkStyle" /> - + @@ -397,8 +398,8 @@ with BigBlueButton; if not, see . . : ResourceUtil.getInstance().getString('bbb.mainToolbar.recordBtn.toolTip.notRecording')}" enabled="false" creationComplete="onCreationComplete()" - visible="{UserManager.getInstance().getConference().record}" - includeInLayout="{UserManager.getInstance().getConference().record}" mouseOver="onRecordButtonMouseOver(event)" mouseOut="onRecordButtonMouseOut(event)" > diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/WaitingWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/WaitingWindow.mxml index 85b8a58fd1cd..660472502e1f 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/WaitingWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/WaitingWindow.mxml @@ -21,39 +21,18 @@ --> + title="{ResourceUtil.getInstance().getString('bbb.waitWindow.waitMessage.title')}" showCloseButton="false" + layout="vertical" width="350" horizontalAlign="center"> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/maps/UsersMainEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/maps/UsersMainEventMap.mxml index 4976d5046246..3043fd1cf059 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/maps/UsersMainEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/maps/UsersMainEventMap.mxml @@ -146,58 +146,30 @@ with BigBlueButton; if not, see . - - - - - - - - - - - + + - - + + + - - - - - + - - - - - - - - - - - - - + - - - - - + diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as index 8f60565d71b2..79974611f26c 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as @@ -42,6 +42,7 @@ package org.bigbluebutton.modules.users.services import org.bigbluebutton.main.events.SwitchedPresenterEvent; import org.bigbluebutton.main.events.UserJoinedEvent; import org.bigbluebutton.main.events.UserLeftEvent; + import org.bigbluebutton.main.events.WaitModeratorEvent; import org.bigbluebutton.main.model.users.BBBUser; import org.bigbluebutton.main.model.users.Conference; import org.bigbluebutton.main.model.users.IMessageListener; @@ -59,6 +60,7 @@ package org.bigbluebutton.modules.users.services private var dispatcher:Dispatcher; private var _conference:Conference; + public var onAllowedToJoin:Function = null; private static var globalDispatcher:Dispatcher = new Dispatcher(); public function MessageReceiver() { @@ -137,24 +139,15 @@ package org.bigbluebutton.modules.users.services case "permissionsSettingsChanged": handlePermissionsSettingsChanged(message); break; - case "user_requested_to_enter": - handleGuestRequestedToEnter(message); - break; case "get_guest_policy_reply": handleGetGuestPolicyReply(message); break; case "guest_policy_changed": handleGuestPolicyChanged(message); break; - case "get_guests_waiting_reply": - handleGetGuestsWaitingReply(message); - break; case "response_to_guest": handleResponseToGuest(message); break; - case "guest_kicked": - handleGuestKicked(message); - break; } } @@ -382,10 +375,10 @@ package org.bigbluebutton.modules.users.services UsersService.getInstance().userLeft(webUser); - if(webUser.guest) { - var e:RemoveGuestRequestEvent = new RemoveGuestRequestEvent(RemoveGuestRequestEvent.GUEST_EVENT); - e.userid = webUser.userId; - dispatcher.dispatchEvent(e); + if(webUser.waitingForAcceptance) { + var removeGuest:RemoveGuestRequestEvent = new RemoveGuestRequestEvent(RemoveGuestRequestEvent.GUEST_EVENT); + removeGuest.userid = webUser.userId; + dispatcher.dispatchEvent(removeGuest); } var user:BBBUser = UserManager.getInstance().getConference().getUser(webUserId); @@ -552,10 +545,11 @@ package org.bigbluebutton.modules.users.services user.name = joinedUser.name; user.role = joinedUser.role; user.guest = joinedUser.guest; - user.acceptedJoin = !user.guest; + user.waitingForAcceptance = joinedUser.waitingForAcceptance; user.externUserID = joinedUser.externUserID; user.isLeavingFlag = false; user.listenOnly = joinedUser.listenOnly; + user.me = (user.userID == UserManager.getInstance().getConference().getMyUserId()) trace(LOG + "User status: hasStream " + joinedUser.hasStream); @@ -574,7 +568,36 @@ package org.bigbluebutton.modules.users.services var joinEvent:UserJoinedEvent = new UserJoinedEvent(UserJoinedEvent.JOINED); joinEvent.userID = user.userID; dispatcher.dispatchEvent(joinEvent); - + + if (user.guest) { + if (user.waitingForAcceptance) { + if (user.me) { + var waitCommand:WaitModeratorEvent = new WaitModeratorEvent(WaitModeratorEvent.USER_LOGGED_IN); + dispatcher.dispatchEvent(waitCommand); + } else { + var e:AddGuestEvent = new AddGuestEvent(AddGuestEvent.ADD_GUEST); + e.userid = user.userID; + e.name = user.name; + dispatcher.dispatchEvent(e); + } + } else { + if (user.me) { + var allowedCommand:ModeratorRespEvent = new ModeratorRespEvent(ModeratorRespEvent.GUEST_ALLOWED); + dispatcher.dispatchEvent(allowedCommand); + } else { + var removeGuest:RemoveGuestRequestEvent = new RemoveGuestRequestEvent(RemoveGuestRequestEvent.GUEST_EVENT); + removeGuest.userid = user.userID; + dispatcher.dispatchEvent(removeGuest); + } + } + } + + if (user.me && (!user.guest || !user.waitingForAcceptance)) { + if (onAllowedToJoin != null) { + onAllowedToJoin(); + onAllowedToJoin = null; + } + } } /** @@ -595,18 +618,6 @@ package org.bigbluebutton.modules.users.services } } - public function handleGuestRequestedToEnter(msg:Object):void { - trace(LOG + "*** handleRequestedToEnter " + msg.msg + " **** \n"); - var map:Object = JSON.parse(msg.msg); - if(UsersUtil.amIModerator() && UsersUtil.amIWaitForModerator() == false) { - var e:AddGuestEvent = new AddGuestEvent(); - e.userid = map.userId; - e.name = map.name; - var dispatcher:Dispatcher = new Dispatcher(); - dispatcher.dispatchEvent(e); - } - } - public function handleGuestPolicyChanged(msg:Object):void { trace(LOG + "*** handleGuestPolicyChanged " + msg.msg + " **** \n"); var map:Object = JSON.parse(msg.msg); @@ -622,70 +633,38 @@ package org.bigbluebutton.modules.users.services var policy:BBBEvent = new BBBEvent(BBBEvent.RETRIEVE_GUEST_POLICY); policy.payload['guestPolicy'] = map.guestPolicy; - - if(UsersUtil.amIGuest()) { - if(map.guestPolicy == "ALWAYS_DENY") - dispatcher.dispatchEvent(new BBBEvent(BBBEvent.DENY_GUEST)); - else if(map.guestPolicy == "ALWAYS_ACCEPT") - dispatcher.dispatchEvent(new BBBEvent(BBBEvent.ACCEPT_GUEST)); - else - dispatcher.dispatchEvent(new BBBEvent(BBBEvent.ASK_TO_ACCEPT_GUEST)); - } dispatcher.dispatchEvent(policy); } public function handleResponseToGuest(msg:Object):void { - trace(LOG + "*** handleResponseToGuest " + msg.msg + " **** \n"); + trace(LOG + "*** handleResponseToGuest " + msg.msg + " ****"); var map:Object = JSON.parse(msg.msg); - var dispatcher:Dispatcher = new Dispatcher(); - - if(UsersUtil.getMyUserID() == map.userId && UsersUtil.amIWaitForModerator()) { - UsersUtil.setWaitForModerator(false); - if(map.response == false) { - var kickEvent:BBBEvent = new BBBEvent(BBBEvent.KICK_GUEST); - kickEvent.payload.userId = map.userId; - dispatcher.dispatchEvent(kickEvent); - } - else { - var allowCommand:ModeratorRespEvent = new ModeratorRespEvent(ModeratorRespEvent.GUEST_ALLOWED); - dispatcher.dispatchEvent(allowCommand); - } - } - - if(UsersUtil.amIModerator()) { - var e:RemoveGuestRequestEvent = new RemoveGuestRequestEvent(RemoveGuestRequestEvent.GUEST_EVENT); - e.userid = map.userId; - dispatcher.dispatchEvent(e); - } - } + + if (map.response == false && UsersUtil.getMyUserID() == map.userId) { + dispatcher.dispatchEvent(new LogoutEvent(LogoutEvent.MODERATOR_DENIED_ME)); + } else { + var user:BBBUser = UsersUtil.getUser(map.userId); + if (user == null) { + trace(LOG + "handleResponseToGuest: couldn't find the user " + map.userId + ", skipping it"); + } else { + user.waitingForAcceptance = !map.response; + if (user.me) { + var allowedCommand:ModeratorRespEvent = new ModeratorRespEvent(ModeratorRespEvent.GUEST_ALLOWED); + dispatcher.dispatchEvent(allowedCommand); + } - public function handleGetGuestsWaitingReply(msg:Object):void { - trace(LOG + "*** handleGetGuestsPolicyReply " + msg.msg + " **** \n"); - var map:Object = JSON.parse(msg.msg); + var removeGuest:RemoveGuestRequestEvent = new RemoveGuestRequestEvent(RemoveGuestRequestEvent.GUEST_EVENT); + removeGuest.userid = user.userID; + dispatcher.dispatchEvent(removeGuest); - if(UsersUtil.amIModerator()) { - var guests:Array = map.guestsWaiting.split(","); - for each(var guest:String in guests) { - if(guest != "") { - var pairSplited:Array = guest.split(":"); - var addGuestEvent:AddGuestEvent = new AddGuestEvent(AddGuestEvent.ADD_GUEST); - addGuestEvent.userid = pairSplited[0]; - addGuestEvent.name = pairSplited[1]; - var dispatcher:Dispatcher = new Dispatcher(); - dispatcher.dispatchEvent(addGuestEvent); + if (user.me && !user.waitingForAcceptance) { + if (onAllowedToJoin != null) { + onAllowedToJoin(); + onAllowedToJoin = null; + } } } } } - - public function handleGuestKicked(msg:Object):void { - trace(LOG + "*** handleGuestKicked " + msg.msg + " **** \n"); - var map:Object = JSON.parse(msg.msg); - - if (UsersUtil.getMyUserID() == map.guestId){ - var dispatcher:Dispatcher = new Dispatcher(); - dispatcher.dispatchEvent(new LogoutEvent(LogoutEvent.GUEST_KICKED_OUT)); - } - } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as index 3f73f8c19db5..439cdc598def 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as @@ -387,53 +387,6 @@ package org.bigbluebutton.modules.users.services ); } - public function queryForGuestsWaiting():void { - trace(LOG + "queryForGuestsWaiting"); - var _nc:ConnectionManager = BBB.initConnectionManager(); - _nc.sendMessage( - "participants.getGuestsWaiting", - function(result:String):void { // On successful result - LogUtil.debug(result); - }, - function(status:String):void { // status - On error occurred - LogUtil.error(status); - } - ); - } - - public function kickGuest(userId:String):void { - trace(LOG + "kickGuest userID:[" + userId + "]"); - var _nc:ConnectionManager = BBB.initConnectionManager(); - _nc.sendMessage( - "participants.kickGuest", - function(result:String):void { // On successful result - LogUtil.debug(result); - }, - function(status:String):void { // status - On error occurred - LogUtil.error(status); - }, - userId - ); - } - - public function guestDisconnect():void { - //TODO: Still need this? - } - - public function askToEnter():void { - trace(LOG + "askToEnter - userID:[" + UsersUtil.getMyUserID() + "]"); - var _nc:ConnectionManager = BBB.initConnectionManager(); - _nc.sendMessage( - "participants.askingToEnter", - function(result:String):void { // On successful result - LogUtil.debug(result); - }, - function(status:String):void { // status - On error occurred - LogUtil.error(status); - } - ); - } - public function responseToGuest(userId:String, response:Boolean):void { trace(LOG + "responseToGuest - guestID:[" + userId + "] response:[" + response + "]"); @@ -455,18 +408,7 @@ package org.bigbluebutton.modules.users.services } public function responseToAllGuests(response:Boolean):void { - trace(LOG + "responseToAllGuests - response:[" + response + "]"); - var _nc:ConnectionManager = BBB.initConnectionManager(); - _nc.sendMessage( - "participants.responseToAllGuests", - function(result:String):void { // On successful result - LogUtil.debug(result); - }, - function(status:String):void { // status - On error occurred - LogUtil.error(status); - }, - response - ); + responseToGuest(null, response); } } } diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy index ac231f55f55d..41ee64959f95 100644 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy @@ -1832,6 +1832,8 @@ class ApiController { userID("${att.externalUserId}") fullName("${att.fullname}") role("${att.role}") + guest("${att.guest}") + waitingForAcceptance("${att.waitingForAcceptance}") customdata(){ meeting.getUserCustomData(att.externalUserId).each{ k,v -> "$k"("$v") diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java index 1dc788035663..44ae818c1794 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java @@ -543,7 +543,7 @@ private void userJoined(UserJoined message) { log.debug("User joined in meeting[{}]", message.meetingId); Meeting m = getMeeting(message.meetingId); if (m != null) { - User user = new User(message.userId, message.externalUserId, message.name, message.role, message.guest); + User user = new User(message.userId, message.externalUserId, message.name, message.role, message.guest, message.waitingForAcceptance); m.userJoined(user); log.info("New user in meeting [" + message.meetingId + "] user [" + user.getFullname() + "]"); @@ -554,9 +554,11 @@ private void userJoined(UserJoined message) { logData.put("userId", message.userId); logData.put("externalUserId", user.getExternalUserId()); logData.put("username", user.getFullname()); - logData.put("role", user.getRole()); - logData.put("event", "user_joined_meeting"); - logData.put("description", "User had joined the meeting."); + logData.put("role", user.getRole()); + logData.put("guest", user.isGuest()); + logData.put("waitingForAcceptance", user.isWaitingForAcceptance()); + logData.put("event", MessagingConstants.USER_JOINED_EVENT); + logData.put("description", "User has joined the meeting."); Gson gson = new Gson(); String logStr = gson.toJson(logData); @@ -584,8 +586,10 @@ private void userLeft(UserLeft message) { logData.put("externalUserId", user.getExternalUserId()); logData.put("username", user.getFullname()); logData.put("role", user.getRole()); - logData.put("event", "user_joined_meeting"); - logData.put("description", "User had joined the meeting."); + logData.put("guest", user.isGuest()); + logData.put("waitingForAcceptance", user.isWaitingForAcceptance()); + logData.put("event", MessagingConstants.USER_LEFT_EVENT); + logData.put("description", "User left the meeting."); Gson gson = new Gson(); String logStr = gson.toJson(logData); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/User.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/User.java index ca98319208a9..3078e7bd7c08 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/User.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/User.java @@ -29,13 +29,15 @@ public class User { private String role; private Map status; private Boolean guest; + private Boolean waitingForAcceptance; - public User(String internalUserId, String externalUserId, String fullname, String role, Boolean guest) { + public User(String internalUserId, String externalUserId, String fullname, String role, Boolean guest, Boolean waitingForAcceptance) { this.internalUserId = internalUserId; this.externalUserId = externalUserId; this.fullname = fullname; this.role = role; this.guest = guest; + this.waitingForAcceptance = waitingForAcceptance; this.status = new ConcurrentHashMap(); } @@ -61,7 +63,15 @@ public void setGuest(Boolean guest) { public Boolean isGuest() { return this.guest; } - + + public void setWaitingForAcceptance(Boolean waitingForAcceptance) { + this.waitingForAcceptance = waitingForAcceptance; + } + + public Boolean isWaitingForAcceptance() { + return this.waitingForAcceptance; + } + public String getFullname() { return fullname; } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/Constants.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/Constants.java index aeee4cee64db..fbd594f86593 100644 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/Constants.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/Constants.java @@ -89,4 +89,5 @@ public class Constants { public static final String Y_PERCENT = "y_percent"; public static final String KEEP_ALIVE_ID = "keep_alive_id"; public static final String GUEST = "guest"; + public static final String WAITING_FOR_ACCEPTANCE = "waiting_for_acceptance"; } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MeetingMessageHandler.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MeetingMessageHandler.java index d06031d6572d..974d245dc2da 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MeetingMessageHandler.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/MeetingMessageHandler.java @@ -100,9 +100,10 @@ public void handleMessage(String pattern, String channel, String message) { String username = user.get("name").getAsString(); String role = user.get("role").getAsString(); Boolean guest = user.get("guest").getAsBoolean(); + Boolean waitingForAcceptance = user.get("waiting_for_acceptance").getAsBoolean(); for (MessageListener listener : listeners) { - listener.handle(new UserJoined(meetingId, userid, externuserid, username, role, guest)); + listener.handle(new UserJoined(meetingId, userid, externuserid, username, role, guest, waitingForAcceptance)); } } else if(MessagingConstants.USER_STATUS_CHANGE_EVENT.equalsIgnoreCase(messageName)) { System.out.println("Handling [" + messageName + "] message."); diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/UserJoined.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/UserJoined.java index 380207505e5c..0970fcea4876 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/UserJoined.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/messaging/messages/UserJoined.java @@ -7,13 +7,15 @@ public class UserJoined implements IMessage { public final String name; public final String role; public final Boolean guest; + public final Boolean waitingForAcceptance; - public UserJoined(String meetingId, String userId, String externalUserId, String name, String role, Boolean guest) { + public UserJoined(String meetingId, String userId, String externalUserId, String name, String role, Boolean guest, Boolean waitingForAcceptance) { this.meetingId = meetingId; this.userId = userId; this.externalUserId = externalUserId; this.name = name; this.role = role; this.guest = guest; + this.waitingForAcceptance = waitingForAcceptance; } }