package org.bigbluebutton.freeswitch.pubsub.receivers;
import org.bigbluebutton.common.messages.EjectAllUsersFromVoiceConfRequestMessage;
import org.bigbluebutton.common.messages.EjectUserFromVoiceConfRequestMessage;
import org.bigbluebutton.common.messages.GetUsersFromVoiceConfRequestMessage;
import org.bigbluebutton.common.messages.MuteUserInVoiceConfRequestMessage;
import org.bigbluebutton.common.messages.StartRecordingVoiceConfRequestMessage;
import org.bigbluebutton.common.messages.StopRecordingVoiceConfRequestMessage;
import org.bigbluebutton.common.messages.TransferUserToVoiceConfRequestMessage;
import org.bigbluebutton.common.messages.DeskShareStartRTMPBroadcastEventMessage;
import org.bigbluebutton.common.messages.DeskShareStopRTMPBroadcastEventMessage;
import org.bigbluebutton.common.messages.DeskShareHangUpEventMessage;
import org.bigbluebutton.freeswitch.voice.freeswitch.FreeswitchApplication;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class RedisMessageReceiver {
public static final String TO_VOICE_CONF_CHANNEL = "bigbluebutton:to-voice-conf";
public static final String TO_VOICE_CONF_PATTERN = TO_VOICE_CONF_CHANNEL
+ ":*";
public static final String TO_VOICE_CONF_SYSTEM_CHAN = TO_VOICE_CONF_CHANNEL
+ ":system";
private final FreeswitchApplication fsApp;
public RedisMessageReceiver(FreeswitchApplication fsApp) {
this.fsApp = fsApp;
}
public void handleMessage(String pattern, String channel, String message) {
if (channel.equalsIgnoreCase(TO_VOICE_CONF_SYSTEM_CHAN)) {
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 EjectAllUsersFromVoiceConfRequestMessage.EJECT_ALL_VOICE_USERS_REQUEST:
processEjectAllVoiceUsersRequestMessage(message);
break;
case EjectUserFromVoiceConfRequestMessage.EJECT_VOICE_USER_REQUEST:
processEjectVoiceUserRequestMessage(message);
break;
case GetUsersFromVoiceConfRequestMessage.GET_VOICE_USERS_REQUEST:
processGetVoiceUsersRequestMessage(message);
break;
case MuteUserInVoiceConfRequestMessage.MUTE_VOICE_USER_REQUEST:
processMuteVoiceUserRequestMessage(message);
break;
case TransferUserToVoiceConfRequestMessage.TRANSFER_USER_TO_VOICE_CONF_REQUEST:
processTransferUserToVoiceConfRequestMessage(message);
break;
case StartRecordingVoiceConfRequestMessage.START_RECORD_VOICE_CONF_REQUEST:
processStartRecordingVoiceConfRequestMessage(message);
break;
case StopRecordingVoiceConfRequestMessage.STOP_RECORD_VOICE_CONF_REQUEST:
processStopRecordingVoiceConfRequestMessage(message);
break;
case DeskShareStartRTMPBroadcastEventMessage.DESKSHARE_START_RTMP_BROADCAST_MESSAGE:
System.out.println("RedisMessageReceiver got DESKSHARE_START_RTMP_BROADCAST_MESSAGE");
processDeskShareStartRTMPBroadcastEventMessage(message);
break;
case DeskShareStopRTMPBroadcastEventMessage.DESKSHARE_STOP_RTMP_BROADCAST_MESSAGE:
System.out.println("RedisMessageReceiver got DESKSHARE_STOP_RTMP_BROADCAST_MESSAGE");
processDeskShareStopRTMPBroadcastEventMessage(message);
break;
case DeskShareHangUpEventMessage.DESKSHARE_HANG_UP_MESSAGE:
System.out.println("RedisMessageReceiver got DESKSHARE_HANG_UP_MESSAGE");
processDeskShareHangUpEventMessage(message);
break;
}
}
}
}
}
private void processDeskShareStartRTMPBroadcastEventMessage(String json) {
DeskShareStartRTMPBroadcastEventMessage msg = DeskShareStartRTMPBroadcastEventMessage.fromJson(json);
fsApp.deskShareBroadcastRTMP(msg.conferenceName, msg.streamUrl, msg.timestamp, true);
}
private void processDeskShareStopRTMPBroadcastEventMessage(String json) {
DeskShareStopRTMPBroadcastEventMessage msg = DeskShareStopRTMPBroadcastEventMessage.fromJson(json);
fsApp.deskShareBroadcastRTMP(msg.conferenceName, msg.streamUrl, msg.timestamp, false);
}
private void processDeskShareHangUpEventMessage(String json) {
DeskShareHangUpEventMessage msg = DeskShareHangUpEventMessage.fromJson(json);
fsApp.deskShareHangUp(msg.conferenceName, msg.fsConferenceName, msg.timestamp);
}
private void processEjectAllVoiceUsersRequestMessage(String json) {
EjectAllUsersFromVoiceConfRequestMessage msg = EjectAllUsersFromVoiceConfRequestMessage
.fromJson(json);
fsApp.ejectAll(msg.voiceConfId);
}
private void processEjectVoiceUserRequestMessage(String json) {
EjectUserFromVoiceConfRequestMessage msg = EjectUserFromVoiceConfRequestMessage
.fromJson(json);
fsApp.eject(msg.voiceConfId, msg.voiceUserId);
}
private void processGetVoiceUsersRequestMessage(String json) {
GetUsersFromVoiceConfRequestMessage msg = GetUsersFromVoiceConfRequestMessage
.fromJson(json);
fsApp.getAllUsers(msg.voiceConfId);
}
private void processMuteVoiceUserRequestMessage(String json) {
MuteUserInVoiceConfRequestMessage msg = MuteUserInVoiceConfRequestMessage
.fromJson(json);
fsApp.muteUser(msg.voiceConfId, msg.voiceUserId, msg.mute);
}
private void processTransferUserToVoiceConfRequestMessage(String json) {
TransferUserToVoiceConfRequestMessage msg = TransferUserToVoiceConfRequestMessage
.fromJson(json);
fsApp.transferUserToMeeting(msg.voiceConfId, msg.targetVoiceConfId,
msg.voiceUserId);
}
private void processStartRecordingVoiceConfRequestMessage(String json) {
StartRecordingVoiceConfRequestMessage msg = StartRecordingVoiceConfRequestMessage
.fromJson(json);
fsApp.startRecording(msg.voiceConfId, msg.meetingId);
}
private void processStopRecordingVoiceConfRequestMessage(String json) {
StopRecordingVoiceConfRequestMessage msg = StopRecordingVoiceConfRequestMessage
.fromJson(json);
fsApp.stopRecording(msg.voiceConfId, msg.meetingId, msg.recordStream);
}
}