Skip to content

Commit

Permalink
reduced the number of messages exchanged between server and client re…
Browse files Browse the repository at this point in the history
…garding the guest access; fixed the problem of bbb-web answering the meeting is not running when there's a guest connected
  • Loading branch information
fcecagno committed Apr 21, 2015
1 parent 721663a commit 63e6da4
Show file tree
Hide file tree
Showing 38 changed files with 250 additions and 689 deletions.
Expand Up @@ -87,31 +87,15 @@ public void getRecordingStatus(String meetingId, String userId) {
bbbInGW.getRecordingStatus(meetingId, userId); bbbInGW.getRecordingStatus(meetingId, userId);
} }


public void askingToEnter(String meetingId, String userId) {
bbbInGW.userRequestToEnter(meetingId, userId);
}

public void getGuestPolicy(String meetingId, String requesterId) { public void getGuestPolicy(String meetingId, String requesterId) {
bbbInGW.getGuestPolicy(meetingId, requesterId); bbbInGW.getGuestPolicy(meetingId, requesterId);
} }


public void newGuestPolicy(String meetingId, String guestPolicy) { public void newGuestPolicy(String meetingId, String guestPolicy, String setBy) {
bbbInGW.setGuestPolicy(meetingId, guestPolicy); bbbInGW.setGuestPolicy(meetingId, guestPolicy, setBy);
}

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 kickGuest(String meetingId, String guestId) { public void responseToGuest(String meetingId, String userId, Boolean response, String requesterId) {
bbbInGW.kickGuest(meetingId, guestId); bbbInGW.responseToGuest(meetingId, userId, response, requesterId);
} }
} }
Expand Up @@ -104,41 +104,21 @@ private BigBlueButtonSession getBbbSession() {
return (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION); 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() { public void getGuestPolicy() {
String requesterId = getBbbSession().getInternalUserID(); String requesterId = getBbbSession().getInternalUserID();
String roomName = Red5.getConnectionLocal().getScope().getName(); String roomName = Red5.getConnectionLocal().getScope().getName();
application.getGuestPolicy(roomName, requesterId); application.getGuestPolicy(roomName, requesterId);
} }


public void setGuestPolicy(String guestPolicy) { public void setGuestPolicy(String guestPolicy) {
String requesterId = getBbbSession().getInternalUserID();
String roomName = Red5.getConnectionLocal().getScope().getName(); String roomName = Red5.getConnectionLocal().getScope().getName();
application.newGuestPolicy(roomName, guestPolicy); application.newGuestPolicy(roomName, guestPolicy, requesterId);
}

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);
} }


public void responseToGuest(Map<String, Object> msg) { public void responseToGuest(Map<String, Object> msg) {
String requesterId = getBbbSession().getInternalUserID();
String roomName = Red5.getConnectionLocal().getScope().getName(); String roomName = Red5.getConnectionLocal().getScope().getName();
application.responseToGuest(roomName, (String) msg.get("guestID"), (Boolean) msg.get("response")); application.responseToGuest(roomName, (String) msg.get("guestID"), (Boolean) msg.get("response"), requesterId);
}

public void kickGuest(String guestId) {
String roomName = Red5.getConnectionLocal().getScope().getName();
application.kickGuest(roomName, guestId);
} }
} }
Expand Up @@ -44,13 +44,9 @@ void createMeeting2(String meetingID, String externalMeetingID, String meetingNa
void getRecordingStatus(String meetingId, String userId); void getRecordingStatus(String meetingId, String userId);
void userConnectedToGlobalAudio(String voiceConf, String userid, String name); void userConnectedToGlobalAudio(String voiceConf, String userid, String name);
void userDisconnectedFromGlobalAudio(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 getGuestPolicy(String meetingID, String userID);
void setGuestPolicy(String meetingID, String guestPolicy); void setGuestPolicy(String meetingID, String guestPolicy, String setBy);
void getGuestsWaiting(String meetingID, String requesterID); void responseToGuest(String meetingID, String userID, Boolean response, String requesterID);
void responseToGuest(String meetingID, String userID, Boolean response);
void responseToAllGuests(String meetingID, Boolean response);
void kickGuest(String meetingID, String guestID);


// Voice // Voice
void muteAllExceptPresenter(String meetingID, String requesterID, Boolean mute); void muteAllExceptPresenter(String meetingID, String requesterID, Boolean mute);
Expand Down
Expand Up @@ -190,39 +190,23 @@ class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway, presUtil: PreuploadedPresen
} }


// Guest support // Guest support
def userRequestToEnter(meetingID: String, userID: String) {
bbbGW.accept(new UserRequestToEnter(meetingID, userID))
}

def getGuestPolicy(meetingID: String, requesterID: String) { def getGuestPolicy(meetingID: String, requesterID: String) {
bbbGW.accept(new GetGuestPolicy(meetingID, requesterID)) 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 { val policy = guestPolicy.toUpperCase() match {
case "ALWAYS_ACCEPT" => GuestPolicy.ALWAYS_ACCEPT case "ALWAYS_ACCEPT" => GuestPolicy.ALWAYS_ACCEPT
case "ALWAYS_DENY" => GuestPolicy.ALWAYS_DENY case "ALWAYS_DENY" => GuestPolicy.ALWAYS_DENY
case "ASK_MODERATOR" => GuestPolicy.ASK_MODERATOR case "ASK_MODERATOR" => GuestPolicy.ASK_MODERATOR
//default //default
case undef => GuestPolicy.ASK_MODERATOR case undef => GuestPolicy.ASK_MODERATOR
} }
bbbGW.accept(new SetGuestPolicy(meetingID, policy)) bbbGW.accept(new SetGuestPolicy(meetingID, policy, setBy))
}

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))
} }


def kickGuest(meetingID: String, guestID: String) { def responseToGuest(meetingID: String, guestID: String, response: java.lang.Boolean, requesterID: String) {
bbbGW.accept(new KickGuest(meetingID, guestID)) bbbGW.accept(new RespondToGuest(meetingID, guestID, response, requesterID))
} }


/************************************************************************************** /**************************************************************************************
Expand Down
Expand Up @@ -98,12 +98,9 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
case msg: UndoWhiteboardRequest => handleUndoWhiteboardRequest(msg) case msg: UndoWhiteboardRequest => handleUndoWhiteboardRequest(msg)
case msg: EnableWhiteboardRequest => handleEnableWhiteboardRequest(msg) case msg: EnableWhiteboardRequest => handleEnableWhiteboardRequest(msg)
case msg: IsWhiteboardEnabledRequest => handleIsWhiteboardEnabledRequest(msg) case msg: IsWhiteboardEnabledRequest => handleIsWhiteboardEnabledRequest(msg)
case msg: UserRequestToEnter => handleUserRequestToEnter(msg)
case msg: GetGuestPolicy => handleGetGuestPolicy(msg) case msg: GetGuestPolicy => handleGetGuestPolicy(msg)
case msg: SetGuestPolicy => handleSetGuestPolicy(msg) case msg: SetGuestPolicy => handleSetGuestPolicy(msg)
case msg: GetGuestsWaiting => handleGetGuestsWaiting(msg)
case msg: RespondToGuest => handleRespondToGuest(msg) case msg: RespondToGuest => handleRespondToGuest(msg)
case msg: KickGuest => handleKickGuest(msg)
case msg: GetAllMeetingsRequest => handleGetAllMeetingsRequest(msg) case msg: GetAllMeetingsRequest => handleGetAllMeetingsRequest(msg)


//OUT MESSAGES //OUT MESSAGES
Expand Down Expand Up @@ -184,12 +181,9 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
case msg: UndoWhiteboardEvent => handleUndoWhiteboardEvent(msg) case msg: UndoWhiteboardEvent => handleUndoWhiteboardEvent(msg)
case msg: WhiteboardEnabledEvent => handleWhiteboardEnabledEvent(msg) case msg: WhiteboardEnabledEvent => handleWhiteboardEnabledEvent(msg)
case msg: IsWhiteboardEnabledReply => handleIsWhiteboardEnabledReply(msg) case msg: IsWhiteboardEnabledReply => handleIsWhiteboardEnabledReply(msg)
case msg: GuestRequestedToEnter => handleGuestRequestedToEnter(msg)
case msg: GetGuestPolicyReply => handleGetGuestPolicyReply(msg) case msg: GetGuestPolicyReply => handleGetGuestPolicyReply(msg)
case msg: GuestPolicyChanged => handleGuestPolicyChanged(msg) case msg: GuestPolicyChanged => handleGuestPolicyChanged(msg)
case msg: GetGuestsWaitingReply => handleGetGuestsWaitingReply(msg)
case msg: ResponseToGuest => handleResponseToGuest(msg) case msg: ResponseToGuest => handleResponseToGuest(msg)
case msg: GuestKicked => handleGuestKicked(msg)
case msg: GetAllMeetingsReply => handleGetAllMeetingsReply(msg) case msg: GetAllMeetingsReply => handleGetAllMeetingsReply(msg)


case _ => // do nothing case _ => // do nothing
Expand Down Expand Up @@ -220,6 +214,8 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
wuser.put(Constants.LOCKED, user.locked:java.lang.Boolean) wuser.put(Constants.LOCKED, user.locked:java.lang.Boolean)
wuser.put(Constants.WEBCAM_STREAM, user.webcamStream) wuser.put(Constants.WEBCAM_STREAM, user.webcamStream)
wuser.put(Constants.PHONE_USER, user.phoneUser:java.lang.Boolean) 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.put(Constants.VOICE_USER, vuser)


wuser wuser
Expand Down Expand Up @@ -2218,20 +2214,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
dispatcher.dispatch(json) 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) { private def handleGetGuestPolicy(msg: GetGuestPolicy) {
val payload = new java.util.HashMap[String, Any]() val payload = new java.util.HashMap[String, Any]()
payload.put(Constants.MEETING_ID, msg.meetingID) payload.put(Constants.MEETING_ID, msg.meetingID)
Expand Down Expand Up @@ -2260,25 +2242,12 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
dispatcher.dispatch(buildJson(header, payload)) 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) { private def handleRespondToGuest(msg: RespondToGuest) {
val payload = new java.util.HashMap[String, Any]() val payload = new java.util.HashMap[String, Any]()
payload.put(Constants.MEETING_ID, msg.meetingID) payload.put(Constants.MEETING_ID, msg.meetingID)
payload.put(Constants.USER_ID, msg.guestID) payload.put(Constants.USER_ID, msg.guestID)
payload.put(Constants.RESPONSE, msg.response.toString()) payload.put(Constants.RESPONSE, msg.response.toString())
payload.put(Constants.REQUESTER_ID, msg.requesterID)


val header = new java.util.HashMap[String, Any]() val header = new java.util.HashMap[String, Any]()
header.put(Constants.NAME, MessageNames.RESPOND_TO_GUEST) header.put(Constants.NAME, MessageNames.RESPOND_TO_GUEST)
Expand All @@ -2289,35 +2258,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
dispatcher.dispatch(buildJson(header, payload)) 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) { private def handleGetGuestPolicyReply(msg: GetGuestPolicyReply) {
val payload = new java.util.HashMap[String, Any]() val payload = new java.util.HashMap[String, Any]()
payload.put(Constants.MEETING_ID, msg.meetingID) payload.put(Constants.MEETING_ID, msg.meetingID)
Expand Down Expand Up @@ -2347,21 +2287,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
dispatcher.dispatch(buildJson(header, payload)) 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) { private def handleResponseToGuest(msg: ResponseToGuest) {
val payload = new java.util.HashMap[String, Any]() val payload = new java.util.HashMap[String, Any]()
payload.put(Constants.MEETING_ID, msg.meetingID) payload.put(Constants.MEETING_ID, msg.meetingID)
Expand All @@ -2377,20 +2302,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
dispatcher.dispatch(buildJson(header, payload)) 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) { private def handleGetAllMeetingsReply(msg: GetAllMeetingsReply) {
val json = MeetingMessageToJsonConverter.getAllMeetingsReplyToJson(msg) val json = MeetingMessageToJsonConverter.getAllMeetingsReplyToJson(msg)
println("***** DISPATCHING GET ALL MEETINGS REPLY OUTMSG *****************") println("***** DISPATCHING GET ALL MEETINGS REPLY OUTMSG *****************")
Expand Down
Expand Up @@ -30,7 +30,9 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee
var recording = false; var recording = false;
var muted = false; var muted = false;
var meetingEnded = false var meetingEnded = false

var guestPolicy = GuestPolicy.ASK_MODERATOR var guestPolicy = GuestPolicy.ASK_MODERATOR
var guestPolicySetBy:String = null


def getDuration():Long = { def getDuration():Long = {
duration duration
Expand Down Expand Up @@ -132,13 +134,9 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee
case msg: SetRecordingStatus => handleSetRecordingStatus(msg) case msg: SetRecordingStatus => handleSetRecordingStatus(msg)
case msg: GetRecordingStatus => handleGetRecordingStatus(msg) case msg: GetRecordingStatus => handleGetRecordingStatus(msg)
case msg: VoiceRecording => handleVoiceRecording(msg) case msg: VoiceRecording => handleVoiceRecording(msg)
case msg: UserRequestToEnter => handleUserRequestToEnter(msg)
case msg: GetGuestPolicy => handleGetGuestPolicy(msg) case msg: GetGuestPolicy => handleGetGuestPolicy(msg)
case msg: SetGuestPolicy => handleSetGuestPolicy(msg) case msg: SetGuestPolicy => handleSetGuestPolicy(msg)
case msg: GetGuestsWaiting => handleGetGuestsWaiting(msg)
case msg: RespondToGuest => handleRespondToGuest(msg) case msg: RespondToGuest => handleRespondToGuest(msg)
case msg: RespondToAllGuests => handleRespondToAllGuests(msg)
case msg: KickGuest => handleKickGuest(msg)


case msg: EndMeeting => handleEndMeeting(msg) case msg: EndMeeting => handleEndMeeting(msg)
case StopMeetingActor => exit case StopMeetingActor => exit
Expand Down Expand Up @@ -257,6 +255,7 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee


private def handleSetGuestPolicy(msg: SetGuestPolicy) { private def handleSetGuestPolicy(msg: SetGuestPolicy) {
guestPolicy = msg.policy guestPolicy = msg.policy
guestPolicySetBy = msg.setBy
outGW.send(new GuestPolicyChanged(msg.meetingID, recorded, guestPolicy.toString())) outGW.send(new GuestPolicyChanged(msg.meetingID, recorded, guestPolicy.toString()))
} }


Expand All @@ -272,4 +271,4 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee
permissions == other permissions == other
} }


} }
Expand Up @@ -90,6 +90,7 @@ object Constants {
val KEEP_ALIVE_ID = "keep_alive_id" val KEEP_ALIVE_ID = "keep_alive_id"
val LISTEN_ONLY = "listen_only" val LISTEN_ONLY = "listen_only"
val GUEST = "guest" val GUEST = "guest"
val WAITING_FOR_ACCEPTANCE = "waiting_for_acceptance"
val GUEST_POLICY = "guest_policy" val GUEST_POLICY = "guest_policy"
val GUESTS_WAITING = "guests_waiting" val GUESTS_WAITING = "guests_waiting"
} }
Expand Up @@ -191,40 +191,22 @@ case class UserDisconnectedFromGlobalAudio(
) extends InMessage ) extends InMessage


// Guest support // Guest support
case class UserRequestToEnter(
meetingID: String,
userID: String
) extends InMessage

case class GetGuestPolicy( case class GetGuestPolicy(
meetingID: String, meetingID: String,
requesterID: String requesterID: String
) extends InMessage ) extends InMessage


case class SetGuestPolicy( case class SetGuestPolicy(
meetingID: String, meetingID: String,
policy: GuestPolicy policy: GuestPolicy,
) extends InMessage setBy: String

case class GetGuestsWaiting(
meetingID: String,
requesterID: String
) extends InMessage ) extends InMessage


case class RespondToGuest( case class RespondToGuest(
meetingID: String, meetingID: String,
guestID: String, guestID: String,
response: Boolean response: Boolean,
) extends InMessage requesterID: String

case class RespondToAllGuests(
meetingID: String,
response: Boolean
) extends InMessage

case class KickGuest(
meetingID: String,
guestID: String
) extends InMessage ) extends InMessage


// Layout // Layout
Expand Down

0 comments on commit 63e6da4

Please sign in to comment.