You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/08/28 17:45:02 UTC

openmeetings git commit: [OPENMEETINGS-1644] check is added to client AV create/update

Repository: openmeetings
Updated Branches:
  refs/heads/master 86b3ccca8 -> b62b8abca


[OPENMEETINGS-1644] check is added to client AV create/update


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/b62b8abc
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/b62b8abc
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/b62b8abc

Branch: refs/heads/master
Commit: b62b8abcab5f6d5bf2b1327ffb80478a021b5ad0
Parents: 86b3ccc
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Tue Aug 29 00:44:51 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Tue Aug 29 00:44:51 2017 +0700

----------------------------------------------------------------------
 .../core/remote/ScopeApplicationAdapter.java    | 13 +++-
 .../openmeetings/db/dto/room/CheckDto.java      | 74 ++++++++++++++++++++
 .../openmeetings/db/entity/basic/Client.java    | 14 ++--
 openmeetings-flash/src/main/flex/main.mxml      | 49 ++++++++-----
 .../flex/org/apache/openmeetings/OmVideo.as     |  2 +-
 .../installation/ImportInitvalues.java          |  2 +-
 .../web/admin/connection/ConnectionsPanel.java  |  2 +-
 .../openmeetings/web/app/Application.java       | 43 ++++++------
 .../openmeetings/web/room/RoomBroadcaster.java  |  2 +-
 .../apache/openmeetings/web/room/RoomPanel.java |  4 +-
 .../web/room/RoomResourceReference.java         | 14 ++--
 .../web/room/activities/ActivitiesPanel.java    |  2 +-
 .../web/room/menu/RoomMenuPanel.java            |  2 +-
 .../web/room/menu/StartSharingButton.java       |  6 +-
 .../org/apache/openmeetings/web/room/room.js    |  2 +-
 .../user/record/RecordingResourceReference.java |  4 +-
 16 files changed, 168 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
index 2e81761..5804cf9 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
@@ -57,6 +57,7 @@ import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.room.SipDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.CheckDto;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Room;
@@ -500,7 +501,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 			}
 			if (Client.Type.sip == c.getType()) {
 				IApplication iapp = (IApplication)Application.get(wicketApplicationName);
-				org.apache.openmeetings.db.entity.basic.Client cl = iapp.getOmOnlineClient(c.getUid());
+				Client cl = iapp.getOmClientBySid(c.getOwnerSid());
 				String newNumber = getSipTransportLastname(c.getRoomId());
 				cl.getUser().setLastname(newNumber);
 				c.setLastname(newNumber);
@@ -1149,7 +1150,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 		_log.debug("getSipConferenceMembersNumber: " + newNumber);
 		if (!newNumber.equals(client.getLastname())) {
 			IApplication iapp = (IApplication)Application.get(wicketApplicationName);
-			Client cl = iapp.getOmOnlineClient(client.getUid());
+			Client cl = iapp.getOmClientBySid(client.getOwnerSid());
 			cl.getUser().setLastname(newNumber);
 			client.setLastname(newNumber);
 			sessionManager.update(client);
@@ -1164,4 +1165,12 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 	public JSONObject getFlashSettings() {
 		return flashSettings;
 	}
+
+	public CheckDto check() {
+		IConnection current = Red5.getConnectionLocal();
+		StreamClient c = sessionManager.get(IClientUtil.getId(current.getClient()));
+		IApplication iapp = (IApplication)Application.get(wicketApplicationName);
+		Client cl = iapp.getOmClientBySid(c.getOwnerSid());
+		return new CheckDto(cl);
+	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/CheckDto.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/CheckDto.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/CheckDto.java
new file mode 100644
index 0000000..1ef1d2b
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/CheckDto.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.basic.Client.Activity;
+import org.apache.openmeetings.db.entity.basic.Client.Pod;
+import org.apache.openmeetings.db.entity.room.Room;
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class CheckDto {
+	private final long roomId;
+	private final Room.Type roomType;
+	private final boolean audioOnly;
+	private final Set<Activity> activities = new HashSet<>();
+	private final Pod pod;
+
+	public CheckDto(Client c) {
+		roomId = c.getRoom().getId();
+		roomType = c.getRoom().getType();
+		audioOnly = c.getRoom().isAudioOnly();
+		if (c.hasActivity(Activity.broadcastA)) {
+			activities.add(Activity.broadcastA);
+		}
+		if (c.hasActivity(Activity.broadcastV)) {
+			activities.add(Activity.broadcastV);
+		}
+		pod = c.getPod();
+	}
+
+	public long getRoomId() {
+		return roomId;
+	}
+
+	public Room.Type getRoomType() {
+		return roomType;
+	}
+
+	public boolean isAudioOnly() {
+		return audioOnly;
+	}
+
+	public Set<Activity> getActivities() {
+		return activities;
+	}
+
+	public Pod getPod() {
+		return pod;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
index 1be2209..b8856dc 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
@@ -29,6 +29,7 @@ import java.util.UUID;
 import java.util.stream.Collectors;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.user.User;
@@ -122,7 +123,7 @@ public class Client implements IClient {
 	private final String sessionId;
 	private int pageId;
 	private User user;
-	private Long roomId;
+	private Room room;
 	private final String uid;
 	private final String sid;
 	private String remoteAddress;
@@ -153,7 +154,6 @@ public class Client implements IClient {
 		this.connectedSince = new Date();
 		uid = rcl.getUid();
 		sid = rcl.getOwnerSid();
-		this.roomId = rcl.getRoomId();
 		this.remoteAddress = rcl.getUserip();
 	}
 
@@ -327,12 +327,12 @@ public class Client implements IClient {
 	public void setId(Long id) {
 	}
 
-	public Long getRoomId() {
-		return roomId;
+	public Room getRoom() {
+		return room;
 	}
 
-	public Client setRoomId(Long roomId) {
-		this.roomId = roomId;
+	public Client setRoom(Room room) {
+		this.room = room;
 		return this;
 	}
 
@@ -480,7 +480,7 @@ public class Client implements IClient {
 
 	@Override
 	public String toString() {
-		return "Client [uid=" + uid + ", sessionId=" + sessionId + ", pageId=" + pageId + ", userId=" + user.getId() + ", roomId=" + roomId
+		return "Client [uid=" + uid + ", sessionId=" + sessionId + ", pageId=" + pageId + ", userId=" + user.getId() + ", room=" + (room == null ? null : room.getId())
 				+ ", rights=" + rights + ", activities=" + activities + ", connectedSince=" + connectedSince + ", pod = " + pod + "]";
 	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-flash/src/main/flex/main.mxml
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/flex/main.mxml b/openmeetings-flash/src/main/flex/main.mxml
index c12080e..4cb13ea 100644
--- a/openmeetings-flash/src/main/flex/main.mxml
+++ b/openmeetings-flash/src/main/flex/main.mxml
@@ -139,30 +139,43 @@
 					selectedCam = params.cam;
 					selectedMic = params.mic;
 					video.resize(Math.max(300, params.width), Math.max(200, params.height));
-					ExternalInterface.addCallback("update", function (c:Object):void {
-						if (_hasVideo(c.activities) && hasVideo()) {
-							_hasAudio(c.activities) ? video.unmute() : video.mute();
-						}
-						if (mic != null) {
-							activityTimer.start();
-						} else {
-							activityTimer.stop();
-						}
-						activities = c.activities;
-						//debug("Client updated: ", c);
+					ExternalInterface.addCallback("update", function ():void {
+						video.getNc().call("check", new Responder(function (check:Object):void {
+							debug("check", check);
+							if (_hasVideo(check.activities) && hasVideo()) {
+								_hasAudio(check.activities) ? video.unmute() : video.mute();
+							}
+							if (mic != null) {
+								activityTimer.start();
+							} else {
+								activityTimer.stop();
+							}
+							activities = check.activities;
+							//debug("Client updated: ", c);
+						}));
 					});
 					ExternalInterface.addCallback("setVolume", function (vol:int):void {
 						if (hasAudio()) {
 							video.setVolume(vol);
 						}
 					});
-					attachCamera(function ():void {
-						addImage(params.width, params.height);
-						video.resize(params.width, params.height);
-						activityTimer.addEventListener(TimerEvent.TIMER, broadcastTimerListener);
-						refreshBroadcast();
-						ExternalInterface.call("VideoManager.securityMode", params.uid, false);
-						ExternalInterface.addCallback("refresh", refreshBroadcast);
+					video.connect(function ():void {
+						debug("Going to call :: check", video.getNc());
+						// trust no-one
+						video.getNc().call("check", new Responder(function (check:Object):void {
+							debug("check", check);
+							audioOnly = check.audioOnly;
+							activities = check.activities;
+							interview = 'interview' == check.roomType;
+							attachCamera(function ():void {
+								addImage(params.width, params.height);
+								video.resize(params.width, params.height);
+								activityTimer.addEventListener(TimerEvent.TIMER, broadcastTimerListener);
+								refreshBroadcast();
+								ExternalInterface.call("VideoManager.securityMode", params.uid, false);
+								ExternalInterface.addCallback("refresh", refreshBroadcast);
+							});
+						}))
 					});
 				}
 					break;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
index 659c7dc..fc85c58 100644
--- a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
+++ b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
@@ -225,7 +225,7 @@ public class OmVideo {
 		});
 	}
 
-	private function connect(callback:Function):void {
+	public function connect(callback:Function):void {
 		if (nc == null || !nc.connected) {
 			url = params.url;
 			debug("NetConnection is not connected", url);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 92b5859..2257df8 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -477,7 +477,7 @@ public class ImportInitvalues {
 
 	// ------------------------------------------------------------------------------
 
-	public void loadSystem(InstallationConfig cfg, boolean force) throws Exception {
+	public void loadSystem(InstallationConfig cfg, boolean force) {
 		// FIXME dummy check if installation was performed before
 		if (!force && userDao.count() > 0) {
 			log.debug("System contains users, no need to install data one more time.");

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
index 52213b3..5bbf401 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
@@ -113,7 +113,7 @@ public class ConnectionsPanel extends AdminPanel {
 					item.add(new Label("type", "html5"));
 					item.add(new Label("login", c.getUser().getLogin()));
 					item.add(new Label("since", c.getConnectedSince()));
-					item.add(new Label("scope", c.getRoomId() == null ? "html5" : "" + c.getRoomId()));
+					item.add(new Label("scope", c.getRoom() == null ? "html5" : "" + c.getRoom().getId()));
 				}
 				item.add(new Label("server", _c.getServerId()));
 				item.add(confirm);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index 9641bdc..445932a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -53,6 +53,7 @@ import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.room.Whiteboards;
@@ -372,22 +373,22 @@ public class Application extends AuthenticatedWebApplication implements IApplica
 	}
 
 	public static void addOnlineUser(Client c) {
-		log.debug("Adding online client: {}, room: {}", c.getUid(), c.getRoomId());
+		log.debug("Adding online client: {}, room: {}", c.getUid(), c.getRoom());
 		c.setServerId(get().getServerId());
 		get().getOnlineUsers().put(c.getUid(), c);
 		get().getUidBySid().put(c.getSid(), c.getUid());
 	}
 
 	public static void exitRoom(Client c) {
-		Long roomId = c.getRoomId();
+		Room room = c.getRoom();
 		removeUserFromRoom(c);
-		if (roomId != null) {
-			sendRoom(new RoomMessage(roomId, c.getUserId(), RoomMessage.Type.roomExit));
+		if (room != null) {
+			sendRoom(new RoomMessage(room.getId(), c.getUserId(), RoomMessage.Type.roomExit));
 			getBean(ConferenceLogDao.class).add(
 					ConferenceLog.Type.roomLeave
-					, c.getUserId(), "0", roomId
+					, c.getUserId(), "0", room.getId()
 					, c.getRemoteAddress()
-					, "" + roomId);
+					, "" + room);
 		}
 	}
 
@@ -400,10 +401,10 @@ public class Application extends AuthenticatedWebApplication implements IApplica
 
 	private static void exit(Client c) {
 		if (c != null) {
-			if (c.getRoomId() != null) {
+			if (c.getRoom() != null) {
 				exitRoom(c);
 			}
-			log.debug("Removing online client: {}, room: {}", c.getUid(), c.getRoomId());
+			log.debug("Removing online client: {}, room: {}", c.getUid(), c.getRoom());
 			get().getOnlineUsers().remove(c.getUid());
 			get().getUidBySid().remove(c.getSid());
 		}
@@ -435,9 +436,10 @@ public class Application extends AuthenticatedWebApplication implements IApplica
 				if (rcl.getRoomId() != null) {
 					client.setCam(0);
 					client.setMic(0);
+					client.setRoom(getBean(RoomDao.class).get(rcl.getRoomId()));
 					addUserToRoom(client);
 					//FIXME TODO unify this
-					WebSocketHelper.sendRoom(new RoomMessage(client.getRoomId(), client.getUserId(), RoomMessage.Type.roomEnter));
+					WebSocketHelper.sendRoom(new RoomMessage(client.getRoom().getId(), client.getUserId(), RoomMessage.Type.roomEnter));
 				}
 				//FIXME TODO rights
 			} else if (client == null && Client.Type.sip == rcl.getType()) {
@@ -456,12 +458,12 @@ public class Application extends AuthenticatedWebApplication implements IApplica
 				client.set(Activity.broadcastA);
 				addUserToRoom(client);
 				//FIXME TODO unify this
-				WebSocketHelper.sendRoom(new RoomMessage(client.getRoomId(), client.getUserId(), RoomMessage.Type.roomEnter));
+				WebSocketHelper.sendRoom(new RoomMessage(client.getRoom().getId(), client.getUserId(), RoomMessage.Type.roomEnter));
 			} else {
 				return null;
 			}
 		}
-		if (rcl.getRoomId() == null || !rcl.getRoomId().equals(client.getRoomId())) {
+		if (rcl.getRoomId() == null || !rcl.getRoomId().equals(client.getRoom().getId())) {
 			//TODO mobile
 			return null;
 		}
@@ -594,25 +596,26 @@ public class Application extends AuthenticatedWebApplication implements IApplica
 	}
 
 	public static Client addUserToRoom(Client c) {
-		log.debug("Adding online room client: {}, room: {}", c.getUid(), c.getRoomId());
+		Long roomId = c.getRoom().getId();
+		log.debug("Adding online room client: {}, room: {}", c.getUid(), roomId);
 		Map<Long, Set<String>> rooms = get().getRooms();
-		rooms.putIfAbsent(c.getRoomId(), new ConcurrentHashSet<String>());
-		Set<String> set = rooms.get(c.getRoomId());
+		rooms.putIfAbsent(roomId, new ConcurrentHashSet<String>());
+		Set<String> set = rooms.get(roomId);
 		set.add(c.getUid());
-		rooms.put(c.getRoomId(), set);
+		rooms.put(roomId, set);
 		update(c);
 		return c;
 	}
 
 	public static Client removeUserFromRoom(Client c) {
-		Long roomId = c.getRoomId();
-		log.debug("Removing online room client: {}, room: {}", c.getUid(), roomId);
-		if (roomId != null) {
-			Set<String> clients = get().getRooms().get(roomId);
+		Room room = c.getRoom();
+		log.debug("Removing online room client: {}, room: {}", c.getUid(), room);
+		if (room != null) {
+			Set<String> clients = get().getRooms().get(room.getId());
 			if (clients != null) {
 				clients.remove(c.getUid());
 			}
-			getBean(ScopeApplicationAdapter.class).roomLeaveByScope(c.getUid(), roomId);
+			getBean(ScopeApplicationAdapter.class).roomLeaveByScope(c.getUid(), room.getId());
 			c.clear();
 			update(c);
 		}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
index e24f26c..ad70601 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
@@ -56,7 +56,7 @@ public class RoomBroadcaster {
 		log.debug("-----------  sendUpdatedClient ");
 		// Notify all clients of the same scope (room)
 		update(client);
-		broadcast(client.getRoomId(), "clientUpdated", rcl);
+		broadcast(client.getRoom().getId(), "clientUpdated", rcl);
 
 		if (rcl == null) {
 			return;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index ed6f9bc..6c5b450 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -591,7 +591,7 @@ public class RoomPanel extends BasePanel {
 		if (room.isVisible()) {
 			//We are setting initial rights here
 			Client c = getClient();
-			addUserToRoom(c.setRoomId(getRoom().getId()));
+			addUserToRoom(c.setRoom(getRoom()));
 			SOAPLogin soap = WebSession.get().getSoapLogin();
 			if (soap != null && soap.isModerator()) {
 				c.allow(Right.superModerator);
@@ -747,7 +747,7 @@ public class RoomPanel extends BasePanel {
 	}
 
 	public void kickUser(Client client) {
-		WebSocketHelper.sendRoom(new TextRoomMessage(client.getRoomId(), client.getUserId(), Type.kick, client.getUid()));
+		WebSocketHelper.sendRoom(new TextRoomMessage(client.getRoom().getId(), client.getUserId(), Type.kick, client.getUid()));
 	}
 
 	public void broadcast(Client client) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
index aaf2acb..b549580 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
@@ -102,12 +102,14 @@ public class RoomResourceReference extends FileItemResourceReference<FileExplore
 		FileExplorerItem f = getBean(FileExplorerItemDao.class).get(id);
 		String ruid = params.get("ruid").toString();
 		String wuid = params.get("wuid").toString();
-		Whiteboards wbs = WhiteboardCache.get(c.getRoomId());
-		if (!Strings.isEmpty(wuid) && !Strings.isEmpty(ruid) && ruid.equals(wbs.getUid())) {
-			for (Entry<Long, Whiteboard> e : wbs.getWhiteboards().entrySet()) {
-				JSONObject file = e.getValue().get(wuid);
-				if (file != null && f.getId().equals(file.optLong("fileId"))) {
-					return f; // item IS on WB
+		if (c.getRoom() != null) {
+			Whiteboards wbs = WhiteboardCache.get(c.getRoom().getId());
+			if (!Strings.isEmpty(wuid) && !Strings.isEmpty(ruid) && ruid.equals(wbs.getUid())) {
+				for (Entry<Long, Whiteboard> e : wbs.getWhiteboards().entrySet()) {
+					JSONObject file = e.getValue().get(wuid);
+					if (file != null && f.getId().equals(file.optLong("fileId"))) {
+						return f; // item IS on WB
+					}
 				}
 			}
 		}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
index 5389047..ceff299 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
@@ -95,7 +95,7 @@ public class ActivitiesPanel extends BasePanel {
 							break;
 						case accept:
 							Client client = getOnlineClient(a.getUid());
-							if (room.getClient().hasRight(Right.moderator) && client != null && roomId == client.getRoomId()) {
+							if (room.getClient().hasRight(Right.moderator) && client != null && client.getRoom() != null && roomId == client.getRoom().getId()) {
 								switch (a.getType()) {
 									case reqRightModerator:
 										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
index 0b440c9..b0bf3b2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
@@ -89,7 +89,7 @@ public class RoomMenuPanel extends Panel {
 		@Override
 		public void onClick(AjaxRequestTarget target) {
 			Client c = room.getClient();
-			WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c.getUserId(), Type.haveQuestion, c.getUid()));
+			WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoom().getId(), c.getUserId(), Type.haveQuestion, c.getUid()));
 		}
 	};
 	private final RoomPanel room;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
index 2a2a15e..3efae15 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
@@ -78,7 +78,7 @@ public class StartSharingButton extends OmButton {
 
 			@Override
 			protected IResourceStream getResourceStream(Attributes attributes) {
-				setFileName(String.format("public_%s.jnlp", getOnlineClient(uid).getRoomId()));
+				setFileName(String.format("public_%s.jnlp", getOnlineClient(uid).getRoom().getId()));
 				StringResourceStream srs = new StringResourceStream(app, "application/x-java-jnlp-file");
 				srs.setCharset(UTF_8);
 				return srs;
@@ -94,9 +94,9 @@ public class StartSharingButton extends OmButton {
 			app = IOUtils.toString(jnlp, UTF_8);
 			Client c = getOnlineClient(uid);
 			String sid = c.getSid();
-			JSONObject s = VideoSettings.getInitJson(WebSession.get().getExtendedProperties(), "" + c.getRoomId(), sid);
+			long roomId = c.getRoom().getId();
+			JSONObject s = VideoSettings.getInitJson(WebSession.get().getExtendedProperties(), "" + roomId, sid);
 			String _url = s.getString(VideoSettings.URL);
-			long roomId = c.getRoomId();
 			Room room = getBean(RoomDao.class).get(roomId);
 			ISessionManager sessionManager = getBean(ISessionManager.class);
 			app = app.replace("$native", "" + s.getBoolean(FLASH_NATIVE_SSL))

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
index 280d817..37bfe91 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
@@ -311,7 +311,7 @@ var Video = (function() {
 			v.parent().find('.dropdown-menu.video.volume').hide();
 		}
 		if (c.self && swf[0].update !== undefined) {
-			swf[0].update(c);
+			swf[0].update();
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/b62b8abc/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
index 8a0e9a0..c68ee6d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingResourceReference.java
@@ -93,8 +93,8 @@ public abstract class RecordingResourceReference extends FileItemResourceReferen
 			return r;
 		}
 		Client c = getOnlineClient(uid);
-		if (c != null) {
-			Whiteboards wbs = WhiteboardCache.get(c.getRoomId());
+		if (c != null && c.getRoom() != null) {
+			Whiteboards wbs = WhiteboardCache.get(c.getRoom().getId());
 			if (wbs != null && !Strings.isEmpty(ruid) && ruid.equals(wbs.getUid())) {
 				for (Entry<Long, Whiteboard> e : wbs.getWhiteboards().entrySet()) {
 					if (e.getValue().contains(r.getHash())) {