Skip to content

Commit

Permalink
lock settings to redis
Browse files Browse the repository at this point in the history
  • Loading branch information
antobinary committed May 22, 2015
1 parent 40a45bb commit a79c5f4
Show file tree
Hide file tree
Showing 15 changed files with 553 additions and 219 deletions.
@@ -0,0 +1,48 @@
package org.bigbluebutton.conference.service.lock;

import org.bigbluebutton.conference.service.messaging.MessagingConstants;
import org.bigbluebutton.conference.service.messaging.GetLockSettings;
import org.bigbluebutton.conference.service.messaging.LockUser;
import org.bigbluebutton.conference.service.messaging.SendLockSettings;
import org.bigbluebutton.conference.service.messaging.redis.MessageHandler;
import org.bigbluebutton.core.api.IBigBlueButtonInGW;

import com.google.gson.JsonParser;
import com.google.gson.JsonObject;


public class LockMessageListener implements MessageHandler{

private IBigBlueButtonInGW bbbGW;

public void setBigBlueButtonInGW(IBigBlueButtonInGW bbbGW) {
this.bbbGW = bbbGW;
}

@Override
public void handleMessage(String pattern, String channel, String message) {
if (channel.equalsIgnoreCase(MessagingConstants.TO_MEETING_CHANNEL)) {
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();
if (GetLockSettings.GET_LOCK_SETTINGS.equals(messageName)) {
GetLockSettings msg = GetLockSettings.fromJson(message);
bbbGW.getLockSettings(msg.meetingId, msg.userId);
} else if(LockUser.LOCK_USER.equals(messageName)) {
LockUser msg = LockUser.fromJson(message);
bbbGW.lockUser(msg.meetingId, msg.requesterId, msg.lock, msg.internalUserId);
} else if(SendLockSettings.SEND_LOCK_SETTINGS.equals(messageName)) {
SendLockSettings msg = SendLockSettings.fromJson(message);
System.out.println("\n\n(("+message);
bbbGW.sendLockSettings(msg.meetingId, msg.userId, msg.newSettings);
}
}
}
}
}
}
Expand Up @@ -23,36 +23,37 @@


import org.bigbluebutton.conference.BigBlueButtonSession; import org.bigbluebutton.conference.BigBlueButtonSession;
import org.bigbluebutton.conference.Constants; import org.bigbluebutton.conference.Constants;
import org.bigbluebutton.core.api.IBigBlueButtonInGW; import org.bigbluebutton.core.api.Red5BBBInGw;
import org.red5.logging.Red5LoggerFactory; import org.red5.logging.Red5LoggerFactory;
import org.red5.server.api.Red5; import org.red5.server.api.Red5;
import org.slf4j.Logger; import org.slf4j.Logger;


public class LockService { public class LockService {
private static Logger log = Red5LoggerFactory.getLogger( LockService.class, "bigbluebutton" ); private static Logger log = Red5LoggerFactory.getLogger( LockService.class, "bigbluebutton" );

private IBigBlueButtonInGW bbbInGW; private Red5BBBInGw red5BBBInGW;


/** /**
* Internal function used to get the session * Internal function used to get the session
* */ * */
private BigBlueButtonSession getBbbSession() { private BigBlueButtonSession getBbbSession() {
return (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION); return (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION);
} }

public void setBigBlueButtonInGW(IBigBlueButtonInGW inGW) { public void setRed5BBBInGW(Red5BBBInGw inGW) {
bbbInGW = inGW; red5BBBInGW = inGW;
} }

/** /**
* Called from client to get lock settings for this room. * Called from client to get lock settings for this room.
* */ * */
public void getLockSettings(){ public void getLockSettings(){
String meetingId = getBbbSession().getRoom(); String meetingId = getBbbSession().getRoom();
String userId = getMyUserId(); String userId = getMyUserId();
bbbInGW.getLockSettings(meetingId, userId);
red5BBBInGW.getLockSettings(meetingId, userId);
} }

/** /**
* Called from client to get lock settings for this room. * Called from client to get lock settings for this room.
* *
Expand All @@ -64,9 +65,9 @@ public void getLockSettings(){
public void setLockSettings(Map<String, Boolean> newSettings){ public void setLockSettings(Map<String, Boolean> newSettings){
String meetingId = getBbbSession().getRoom(); String meetingId = getBbbSession().getRoom();
String userId = getMyUserId(); String userId = getMyUserId();
bbbInGW.sendLockSettings(meetingId, userId, newSettings); red5BBBInGW.sendLockSettings(meetingId, userId, newSettings);
} }

/** /**
* This method locks (or unlocks), based on lock parameter * This method locks (or unlocks), based on lock parameter
* all users but the users listed in array dontLockTheseUsers * all users but the users listed in array dontLockTheseUsers
Expand All @@ -75,7 +76,7 @@ public void setAllUsersLock(Boolean lock, ArrayList<String> dontLockTheseUsers){
log.debug("setAllUsersLock ({}, {})", new Object[] { lock, dontLockTheseUsers }); log.debug("setAllUsersLock ({}, {})", new Object[] { lock, dontLockTheseUsers });


} }

/** /**
* This method locks or unlocks a specific user * This method locks or unlocks a specific user
* */ * */
Expand All @@ -87,9 +88,9 @@ public void setUserLock(Map<String, Object> msg) {
String userId = (String) msg.get("userId"); String userId = (String) msg.get("userId");


log.info("setUserLock ({}, {})", new Object[] { lock, userId }); log.info("setUserLock ({}, {})", new Object[] { lock, userId });
bbbInGW.lockUser(meetingID, requesterID, lock, userId); red5BBBInGW.lockUser(meetingID, requesterID, lock, userId);
} }

public String getMyUserId() { public String getMyUserId() {
BigBlueButtonSession bbbSession = (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION); BigBlueButtonSession bbbSession = (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION);
assert bbbSession != null; assert bbbSession != null;
Expand Down
Expand Up @@ -94,4 +94,11 @@ public class Constants {
public static final String CREATE_TIME = "create_time"; public static final String CREATE_TIME = "create_time";
public static final String CREATE_DATE = "create_date"; public static final String CREATE_DATE = "create_date";
public static final String PRESENTATION_BASE_URL = "presentation_base_url"; public static final String PRESENTATION_BASE_URL = "presentation_base_url";
public static final String DISABLE_CAMERA = "disable_camera";
public static final String LOCK_ON_JOIN_CONFIGURABLE = "lock_on_join_configurable";
public static final String DISABLE_MICROPHONE = "disable_microphone";
public static final String DISABLE_PRIVATE_CHAT = "disable_private_chat";
public static final String DISABLE_PUBLIC_CHAT = "disable_public_chat";
public static final String LOCK_ON_JOIN = "lock_on_join";
public static final String LOCKED_LAYOUT = "locked_layout";
} }
@@ -0,0 +1,54 @@
package org.bigbluebutton.conference.service.messaging;

import java.util.HashMap;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class GetLockSettings implements IMessage {
public static final String GET_LOCK_SETTINGS = "get_lock_settings";
public static final String VERSION = "0.0.1";

public final String meetingId;
public final String userId;


public GetLockSettings(String meetingId, String userId) {
this.meetingId = meetingId;
this.userId = userId;
}

public String toJson() {
HashMap<String, Object> payload = new HashMap<String, Object>();
payload.put(Constants.MEETING_ID, meetingId);
payload.put(Constants.USER_ID, userId);

System.out.println("GetLockSettings toJson");
java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(GET_LOCK_SETTINGS, VERSION, null);
return MessageBuilder.buildJson(header, payload);
}

public static GetLockSettings fromJson(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();
if (GET_LOCK_SETTINGS.equals(messageName)) {
if (payload.has(Constants.MEETING_ID)
&& payload.has(Constants.USER_ID)) {
String meetingId = payload.get(Constants.MEETING_ID).getAsString();
String userId = payload.get(Constants.USER_ID).getAsString();
System.out.println("GetLockSettings fromJson");
return new GetLockSettings(meetingId, userId);
}
}
}
}
return null;
}
}
@@ -0,0 +1,65 @@
package org.bigbluebutton.conference.service.messaging;

import java.util.HashMap;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class LockUser implements IMessage {
public static final String LOCK_USER = "lock_user";
public static final String VERSION = "0.0.1";

public final String meetingId;
public final String requesterId;
public final boolean lock;
public final String internalUserId;


public LockUser(String meetingId, String requesterId, boolean lock, String internalUserId) {
this.meetingId = meetingId;
this.requesterId = requesterId;
this.lock = lock;
this.internalUserId = internalUserId;
}

public String toJson() {
HashMap<String, Object> payload = new HashMap<String, Object>();
payload.put(Constants.MEETING_ID, meetingId);
payload.put(Constants.REQUESTER_ID, requesterId);
payload.put(Constants.LOCK, lock);
payload.put(Constants.INTERNAL_USER_ID, internalUserId);

System.out.println("LockUser toJson");
java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(LOCK_USER, VERSION, null);
return MessageBuilder.buildJson(header, payload);
}

public static LockUser fromJson(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();
if (LOCK_USER.equals(messageName)) {
if (payload.has(Constants.MEETING_ID)
&& payload.has(Constants.REQUESTER_ID)
&& payload.has(Constants.LOCK)
&& payload.has(Constants.INTERNAL_USER_ID)) {
String meetingId = payload.get(Constants.MEETING_ID).getAsString();
String requesterId = payload.get(Constants.REQUESTER_ID).getAsString();
boolean lock = payload.get(Constants.LOCK).getAsBoolean();
String internalUserId = payload.get(Constants.INTERNAL_USER_ID).getAsString();

System.out.println("LockUser fromJson");
return new LockUser(meetingId, requesterId, lock, internalUserId);
}
}
}
}
return null;
}
}
Expand Up @@ -26,7 +26,7 @@ public String toJson() {
payload.put(Constants.Y_PERCENT, yPercent); payload.put(Constants.Y_PERCENT, yPercent);


java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(SEND_CURSOR_UPDATE, VERSION, null); java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(SEND_CURSOR_UPDATE, VERSION, null);
System.out.println("SendCursorUpdate toJson");
return MessageBuilder.buildJson(header, payload); return MessageBuilder.buildJson(header, payload);
} }


Expand All @@ -48,7 +48,6 @@ public static SendCursorUpdate fromJson(String message) {
double xPercent = payload.get(Constants.X_PERCENT).getAsDouble(); double xPercent = payload.get(Constants.X_PERCENT).getAsDouble();
double yPercent = payload.get(Constants.Y_PERCENT).getAsDouble(); double yPercent = payload.get(Constants.Y_PERCENT).getAsDouble();


System.out.println("SendCursorUpdate fromJson");
return new SendCursorUpdate(meetingId, xPercent, yPercent); return new SendCursorUpdate(meetingId, xPercent, yPercent);
} }
} }
Expand Down
@@ -0,0 +1,120 @@
package org.bigbluebutton.conference.service.messaging;

import java.util.HashMap;
import java.util.Map;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class SendLockSettings implements IMessage {
public static final String SEND_LOCK_SETTINGS = "send_lock_settings";
public static final String VERSION = "0.0.1";

public final String meetingId;
public final String userId;
public final Map<String, Boolean> newSettings;


public SendLockSettings(String meetingId, String userId, Map<String, Boolean> newSettings) {
this.meetingId = meetingId;
this.userId = userId;
this.newSettings = newSettings;
}

public String toJson() {
HashMap<String, Object> payload = new HashMap<String, Object>();

Map<String, Boolean> settingsMap = new HashMap<String, Boolean>();

settingsMap.put(Constants.DISABLE_CAMERA, newSettings.get("disableCam"));
settingsMap.put(Constants.DISABLE_MICROPHONE, newSettings.get("disableMic"));
settingsMap.put(Constants.DISABLE_PRIVATE_CHAT, newSettings.get("disablePrivateChat"));
settingsMap.put(Constants.DISABLE_PUBLIC_CHAT, newSettings.get("disablePublicChat"));
settingsMap.put(Constants.LOCKED_LAYOUT, newSettings.get("lockedLayout"));
settingsMap.put(Constants.LOCK_ON_JOIN, newSettings.get("lockOnJoin"));
settingsMap.put(Constants.LOCK_ON_JOIN_CONFIGURABLE, newSettings.get("lockOnJoinConfigurable"));


// System.out.println("\n\n" + newSettings.toString() + "\n\n");
// settingsMap.put(Constants.DISABLE_CAMERA, newSettings.get(Constants.DISABLE_CAMERA));
// settingsMap.put(Constants.DISABLE_MICROPHONE, newSettings.get(Constants.DISABLE_MICROPHONE));
// settingsMap.put(Constants.DISABLE_PRIVATE_CHAT, newSettings.get(Constants.DISABLE_PRIVATE_CHAT));
// settingsMap.put(Constants.DISABLE_PUBLIC_CHAT, newSettings.get(Constants.DISABLE_PUBLIC_CHAT));
// settingsMap.put(Constants.LOCKED_LAYOUT, newSettings.get(Constants.LOCKED_LAYOUT));
// settingsMap.put(Constants.LOCK_ON_JOIN, newSettings.get(Constants.LOCK_ON_JOIN));
// settingsMap.put(Constants.LOCK_ON_JOIN_CONFIGURABLE, newSettings.get(Constants.LOCK_ON_JOIN_CONFIGURABLE));

payload.put(Constants.MEETING_ID, meetingId);
payload.put(Constants.USER_ID, userId);
payload.put(Constants.SETTINGS, settingsMap);

System.out.println("SendLockSettings toJson");
java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(SEND_LOCK_SETTINGS, VERSION, null);
return MessageBuilder.buildJson(header, payload);
}

public static SendLockSettings fromJson(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();
if (SEND_LOCK_SETTINGS.equals(messageName)) {
if (payload.has(Constants.MEETING_ID)
&& payload.has(Constants.USER_ID)
&& payload.has(Constants.SETTINGS)) {

JsonObject settingsObj = (JsonObject) payload.get(Constants.SETTINGS).getAsJsonObject();
if (settingsObj.has(Constants.DISABLE_CAMERA)
&& settingsObj.has(Constants.DISABLE_CAMERA)
&& settingsObj.has(Constants.DISABLE_MICROPHONE)
&& settingsObj.has(Constants.DISABLE_PRIVATE_CHAT)
&& settingsObj.has(Constants.DISABLE_PUBLIC_CHAT)
&& settingsObj.has(Constants.LOCKED_LAYOUT)
&& settingsObj.has(Constants.LOCK_ON_JOIN)
&& settingsObj.has(Constants.LOCK_ON_JOIN_CONFIGURABLE)) {

Map<String, Boolean> settingsMap = new HashMap<String, Boolean>();

// settingsMap.put(Constants.DISABLE_CAMERA, settingsObj.get(Constants.DISABLE_CAMERA).getAsBoolean());
// settingsMap.put(Constants.DISABLE_MICROPHONE, settingsObj.get(Constants.DISABLE_MICROPHONE).getAsBoolean());
// settingsMap.put(Constants.DISABLE_PRIVATE_CHAT, settingsObj.get(Constants.DISABLE_PRIVATE_CHAT).getAsBoolean());
// settingsMap.put(Constants.DISABLE_PUBLIC_CHAT, settingsObj.get(Constants.DISABLE_PUBLIC_CHAT).getAsBoolean());
// settingsMap.put(Constants.LOCKED_LAYOUT, settingsObj.get(Constants.LOCKED_LAYOUT).getAsBoolean());
// settingsMap.put(Constants.LOCK_ON_JOIN, settingsObj.get(Constants.LOCK_ON_JOIN).getAsBoolean());
// settingsMap.put(Constants.LOCK_ON_JOIN_CONFIGURABLE, settingsObj.get(Constants.LOCK_ON_JOIN_CONFIGURABLE).getAsBoolean());

// settingsMap.put("disableCam", settingsObj.get(Constants.DISABLE_CAMERA).getAsBoolean());
// settingsMap.put("disableMic", settingsObj.get(Constants.DISABLE_MICROPHONE).getAsBoolean());
// settingsMap.put("disablePrivateChat", settingsObj.get(Constants.DISABLE_PRIVATE_CHAT).getAsBoolean());
// settingsMap.put("disablePublicChat", settingsObj.get(Constants.DISABLE_PUBLIC_CHAT).getAsBoolean());
// settingsMap.put("lockedLayout", settingsObj.get(Constants.LOCKED_LAYOUT).getAsBoolean());
// settingsMap.put("lockOnJoin", settingsObj.get(Constants.LOCK_ON_JOIN).getAsBoolean());
// settingsMap.put("lockOnJoinConfigurable", settingsObj.get(Constants.LOCK_ON_JOIN_CONFIGURABLE).getAsBoolean());

System.out.println("AAAAAAAAAAAA:"+settingsObj.toString());
settingsMap.put("disableCam", settingsObj.get(Constants.DISABLE_CAMERA).getAsBoolean());
settingsMap.put("disableMic", settingsObj.get(Constants.DISABLE_MICROPHONE).getAsBoolean());
settingsMap.put("disablePrivateChat", settingsObj.get(Constants.DISABLE_PRIVATE_CHAT).getAsBoolean());
settingsMap.put("disablePublicChat", settingsObj.get(Constants.DISABLE_PUBLIC_CHAT).getAsBoolean());
settingsMap.put("lockedLayout", settingsObj.get(Constants.LOCKED_LAYOUT).getAsBoolean());
settingsMap.put("lockOnJoin", settingsObj.get(Constants.LOCK_ON_JOIN).getAsBoolean());
settingsMap.put("lockOnJoinConfigurable", settingsObj.get(Constants.LOCK_ON_JOIN_CONFIGURABLE).getAsBoolean());

String meetingId = payload.get(Constants.MEETING_ID).getAsString();
String userId = payload.get(Constants.USER_ID).getAsString();

System.out.println("SendLockSettings fromJson");
return new SendLockSettings(meetingId, userId, settingsMap);
}
}
}
}
}
return null;
}
}

0 comments on commit a79c5f4

Please sign in to comment.