package org.bigbluebutton.common.messages;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class MessageFromJsonConverter {
public static IBigBlueButtonMessage convert(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");
JsonObject payload = (JsonObject) obj.get("payload");
if (header.has("name")) {
String messageName = header.get("name").getAsString();
switch (messageName) {
case CreateMeetingMessage.CREATE_MEETING_REQUEST_EVENT:
return processCreateMeeting(payload);
case DestroyMeetingMessage.DESTROY_MEETING_REQUEST_EVENT:
return processDestroyMeeting(payload);
case EndMeetingMessage.END_MEETING_REQUEST_EVENT:
return processEndMeetingMessage(payload);
case KeepAliveMessage.KEEP_ALIVE_REQUEST:
return processKeepAlive(payload);
case RegisterUserMessage.REGISTER_USER:
return RegisterUserMessage.fromJson(message);
case ValidateAuthTokenMessage.VALIDATE_AUTH_TOKEN:
return processValidateAuthTokenMessage(header, payload);
// return ValidateAuthTokenMessage.fromJson(message);
case UserConnectedToGlobalAudio.USER_CONNECTED_TO_GLOBAL_AUDIO:
return UserConnectedToGlobalAudio.fromJson(message);
case UserDisconnectedFromGlobalAudio.USER_DISCONNECTED_FROM_GLOBAL_AUDIO:
return UserDisconnectedFromGlobalAudio.fromJson(message);
case GetAllMeetingsRequest.GET_ALL_MEETINGS_REQUEST_EVENT:
return new GetAllMeetingsRequest("the_string_is_not_used_anywhere");
}
}
}
return null;
}
private static IBigBlueButtonMessage processValidateAuthTokenMessage(JsonObject header, JsonObject payload) {
String id = payload.get(Constants.MEETING_ID).getAsString();
String userid = payload.get(Constants.USER_ID).getAsString();
String authToken = payload.get(Constants.AUTH_TOKEN).getAsString();
String replyTo = header.get(Constants.REPLY_TO).getAsString();
String sessionId = "tobeimplemented";
return new ValidateAuthTokenMessage(id, userid, authToken, replyTo,
sessionId);
}
private static IBigBlueButtonMessage processCreateMeeting(JsonObject payload) {
String id = payload.get(Constants.MEETING_ID).getAsString();
String externalId = payload.get(Constants.EXTERNAL_MEETING_ID).getAsString();
String name = payload.get(Constants.NAME).getAsString();
Boolean record = payload.get(Constants.RECORDED).getAsBoolean();
String voiceBridge = payload.get(Constants.VOICE_CONF).getAsString();
Long duration = payload.get(Constants.DURATION).getAsLong();
Boolean autoStartRecording = payload.get(Constants.AUTO_START_RECORDING).getAsBoolean();
Boolean allowStartStopRecording = payload.get(Constants.ALLOW_START_STOP_RECORDING).getAsBoolean();
Boolean webcamsOnlyForModerator = payload.get(Constants.WEBCAMS_ONLY_FOR_MODERATOR).getAsBoolean();
String moderatorPassword = payload.get(Constants.MODERATOR_PASS).getAsString();
String viewerPassword = payload.get(Constants.VIEWER_PASS).getAsString();
Long createTime = payload.get(Constants.CREATE_TIME).getAsLong();
String createDate = payload.get(Constants.CREATE_DATE).getAsString();
return new CreateMeetingMessage(id, externalId, name, record, voiceBridge,
duration, autoStartRecording, allowStartStopRecording,
webcamsOnlyForModerator, moderatorPassword, viewerPassword,
createTime, createDate);
}
private static IBigBlueButtonMessage processDestroyMeeting(JsonObject payload) {
String id = payload.get(Constants.MEETING_ID).getAsString();
return new DestroyMeetingMessage(id);
}
private static IBigBlueButtonMessage processEndMeetingMessage(JsonObject payload) {
String id = payload.get(Constants.MEETING_ID).getAsString();
return new EndMeetingMessage(id);
}
private static IBigBlueButtonMessage processKeepAlive(JsonObject payload) {
String id = payload.get(Constants.KEEP_ALIVE_ID).getAsString();
return new KeepAliveMessage(id);
}
}