package org.bigbluebutton.red5.client; import java.util.HashMap; import java.util.Map; import org.bigbluebutton.common.messages.Constants; import org.bigbluebutton.common.messages.DisconnectAllUsersMessage; import org.bigbluebutton.common.messages.DisconnectUserMessage; import org.bigbluebutton.common.messages.MeetingEndedMessage; import org.bigbluebutton.common.messages.MeetingEndingMessage; import org.bigbluebutton.common.messages.MeetingHasEndedMessage; import org.bigbluebutton.common.messages.MeetingMutedMessage; import org.bigbluebutton.common.messages.MeetingStateMessage; import org.bigbluebutton.common.messages.NewPermissionsSettingMessage; import org.bigbluebutton.common.messages.UserLockedMessage; import org.bigbluebutton.red5.client.messaging.BroadcastClientMessage; import org.bigbluebutton.red5.client.messaging.ConnectionInvokerService; import org.bigbluebutton.red5.client.messaging.DirectClientMessage; import org.bigbluebutton.red5.client.messaging.DisconnectAllClientsMessage; import org.bigbluebutton.red5.client.messaging.DisconnectClientMessage; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class MeetingClientMessageSender { private ConnectionInvokerService service; public MeetingClientMessageSender(ConnectionInvokerService service) { this.service = service; } public void handleMeetingMessage(String message) { JsonParser parser = new JsonParser(); JsonObject obj = (JsonObject) parser.parse(message); if (obj.has("header") && obj.has("payload")) { JsonObject header = (JsonObject) obj.get("header"); if (header.has("name")) { String messageName = header.get("name").getAsString(); switch (messageName) { case DisconnectUserMessage.DISCONNECT_USER: DisconnectUserMessage m = DisconnectUserMessage.fromJson(message); if (m != null) { processDisconnectUserMessage(m); } break; case DisconnectAllUsersMessage.DISCONNECT_All_USERS: DisconnectAllUsersMessage daum = DisconnectAllUsersMessage.fromJson(message); if (daum != null) { processDisconnectAllUsersMessage(daum); } break; case MeetingEndedMessage.MEETING_ENDED: MeetingEndedMessage mem = MeetingEndedMessage.fromJson(message); if (mem != null) { processMeetingEndedMessage(mem); } break; case MeetingEndingMessage.MEETING_ENDING: MeetingEndingMessage me = MeetingEndingMessage.fromJson(message); if (me != null) { processMeetingEndingMessage(me); } break; case MeetingHasEndedMessage.MEETING_HAS_ENDED: MeetingHasEndedMessage mhem = MeetingHasEndedMessage.fromJson(message); if (mhem != null) { processMeetingHasEndedMessage(mhem); } break; case MeetingStateMessage.MEETING_STATE: MeetingStateMessage msm = MeetingStateMessage.fromJson(message); if (msm != null) { processMeetingStateMessage(msm); } break; case NewPermissionsSettingMessage.NEW_PERMISSIONS_SETTING: NewPermissionsSettingMessage npsm = NewPermissionsSettingMessage.fromJson(message); if (npsm != null) { processNewPermissionsSettingMessage(npsm); } break; case MeetingMutedMessage.MEETING_MUTED: MeetingMutedMessage mmm = MeetingMutedMessage.fromJson(message); if (mmm != null) { processMeetingMutedMessage(mmm); } break; case UserLockedMessage.USER_LOCKED: UserLockedMessage ulm = UserLockedMessage.fromJson(message); if (ulm != null) { processUserLockedMessage(ulm); } break; } } } } private void processMeetingHasEndedMessage(MeetingHasEndedMessage msg) { Map<String, Object> args = new HashMap<String, Object>(); args.put("status", "Meeting has already ended."); Map<String, Object> message = new HashMap<String, Object>(); Gson gson = new Gson(); message.put("msg", gson.toJson(args)); BroadcastClientMessage m = new BroadcastClientMessage(msg.meetingId, "meetingHasEnded", message); service.sendMessage(m); } private void processMeetingStateMessage(MeetingStateMessage msg) { Map<String, Object> args = new HashMap<String, Object>(); args.put("permissions", msg.permissions); args.put("meetingMuted", msg.muted); Map<String, Object> message = new HashMap<String, Object>(); Gson gson = new Gson(); message.put("msg", gson.toJson(args)); DirectClientMessage m = new DirectClientMessage(msg.meetingId, msg.userId, "meetingState", message); service.sendMessage(m); } private void processNewPermissionsSettingMessage(NewPermissionsSettingMessage msg) { Map<String, Object> args = new HashMap<String, Object>(); args.put("disableCam", msg.permissions.get(Constants.PERM_DISABLE_CAM)); args.put("disableMic", msg.permissions.get(Constants.PERM_DISABLE_MIC)); args.put("disablePrivateChat", msg.permissions.get(Constants.PERM_DISABLE_PRIVCHAT)); args.put("disablePublicChat", msg.permissions.get(Constants.PERM_DISABLE_PUBCHAT)); args.put("lockedLayout", msg.permissions.get(Constants.PERM_LOCKED_LAYOUT)); args.put("lockOnJoin", msg.permissions.get(Constants.PERM_LOCK_ON_JOIN)); args.put("lockOnJoinConfigurable", msg.permissions.get(Constants.PERM_LOCK_ON_JOIN_CONFIG)); args.put("users", msg.users); Map<String, Object> message = new HashMap<String, Object>(); Gson gson = new Gson(); message.put("msg", gson.toJson(args)); BroadcastClientMessage m = new BroadcastClientMessage(msg.meetingId, "permissionsSettingsChanged", message); service.sendMessage(m); } private void processMeetingMutedMessage(MeetingMutedMessage msg) { Map<String, Object> args = new HashMap<String, Object>(); args.put("meetingMuted", msg.muted); Map<String, Object> message = new HashMap<String, Object>(); Gson gson = new Gson(); message.put("msg", gson.toJson(args)); BroadcastClientMessage m = new BroadcastClientMessage(msg.meetingId, "meetingMuted", message); service.sendMessage(m); } private void processMeetingEndedMessage(MeetingEndedMessage msg) { Map<String, Object> args = new HashMap<String, Object>(); args.put("status", "Meeting has been ended."); Map<String, Object> message = new HashMap<String, Object>(); Gson gson = new Gson(); message.put("msg", gson.toJson(args)); BroadcastClientMessage m = new BroadcastClientMessage(msg.meetingId, "meetingEnded", message); service.sendMessage(m); } private void processMeetingEndingMessage(MeetingEndingMessage msg) { Map<String, Object> args = new HashMap<String, Object>(); args.put("status", "Meeting is ending."); Map<String, Object> message = new HashMap<String, Object>(); Gson gson = new Gson(); message.put("msg", gson.toJson(args)); BroadcastClientMessage m = new BroadcastClientMessage(msg.meetingId, "meetingEnding", message); service.sendMessage(m); } private void processDisconnectAllUsersMessage(DisconnectAllUsersMessage msg) { DisconnectAllClientsMessage dm = new DisconnectAllClientsMessage(msg.meetingId); service.sendMessage(dm); } private void processDisconnectUserMessage(DisconnectUserMessage msg) { DisconnectClientMessage m = new DisconnectClientMessage(msg.meetingId, msg.userId); service.sendMessage(m); } private void processUserLockedMessage(UserLockedMessage msg) { Map<String, Object> args = new HashMap<String, Object>(); args.put("meetingID", msg.meetingId); args.put("user", msg.userId); args.put("lock", msg.locked); Map<String, Object> message = new HashMap<String, Object>(); Gson gson = new Gson(); message.put("msg", gson.toJson(args)); BroadcastClientMessage m = new BroadcastClientMessage(msg.meetingId, "userLocked", message); service.sendMessage(m); } }