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/02/16 04:15:28 UTC

svn commit: r1783168 [2/4] - in /openmeetings/application: branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ branches/3.2.x/openm...

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Thu Feb 16 04:15:27 2017
@@ -35,8 +35,9 @@ import java.util.UUID;
 import org.apache.directory.api.util.Strings;
 import org.apache.openmeetings.core.remote.ConferenceLibrary;
 import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.file.FileItem;
@@ -52,7 +53,6 @@ import org.apache.openmeetings.util.mess
 import org.apache.openmeetings.util.message.RoomMessage.Type;
 import org.apache.openmeetings.util.message.TextRoomMessage;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.openmeetings.web.room.activities.ActivitiesPanel;
@@ -70,12 +70,7 @@ import org.apache.wicket.markup.head.Jav
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.protocol.ws.WebSocketSettings;
-import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
 import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
-import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
-import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
-import org.apache.wicket.protocol.ws.concurrent.Executor;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -112,7 +107,7 @@ public class RoomPanel extends BasePanel
 		protected void respond(AjaxRequestTarget target) {
 			target.appendJavaScript("setRoomSizes();");
 			//TODO SID etc
-			broadcast(new RoomMessage(r.getId(), getUserId(), RoomMessage.Type.roomEnter));
+			WebSocketHelper.sendRoom(new RoomMessage(r.getId(), getUserId(), RoomMessage.Type.roomEnter));
 			getMainPanel().getChat().roomEnter(r, target);
 			if (r.isFilesOpened()) {
 				sidebar.setFilesActive(target);
@@ -223,7 +218,7 @@ public class RoomPanel extends BasePanel
 				allowed = r.getIspublic() || (r.getOwnerId() != null && r.getOwnerId().equals(getUserId()));
 				log.debug("public ? " + r.getIspublic() + ", ownedId ? " + r.getOwnerId() + " " + allowed);
 				if (!allowed) {
-					User u = getBean(UserDao.class).get(getUserId());
+					User u = getClient().getUser();
 					for (RoomGroup ro : r.getRoomGroups()) {
 						for (GroupUser ou : u.getGroupUsers()) {
 							if (ro.getGroup().getId().equals(ou.getGroup().getId())) {
@@ -274,7 +269,7 @@ public class RoomPanel extends BasePanel
 
 			@Override
 			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-				menu.exit(handler, true);
+				menu.exit(handler);
 			}
 		});
 	}
@@ -409,8 +404,8 @@ public class RoomPanel extends BasePanel
 			if (soap != null && soap.isModerator()) {
 				c.getRights().add(Right.superModerator);
 			} else {
-				User u = getBean(UserDao.class).get(getUserId());
-				Right rr = AuthLevelUtil.getRoomRight(u, r, r.isAppointment() ? getBean(AppointmentDao.class).getByRoom(r.getId()) : null, getRoomClients(r.getId()).size());
+				//FIXME TODO !!! c.getUser != getUserId
+				Right rr = AuthLevelUtil.getRoomRight(c.getUser(), r, r.isAppointment() ? getBean(AppointmentDao.class).getByRoom(r.getId()) : null, getRoomClients(r.getId()).size());
 				if (rr != null) {
 					c.getRights().add(rr);
 				}
@@ -418,27 +413,6 @@ public class RoomPanel extends BasePanel
 		}
 	}
 
-	public static void broadcast(final RoomMessage m) {
-		WebSocketSettings settings = WebSocketSettings.Holder.get(Application.get());
-		IWebSocketConnectionRegistry reg = settings.getConnectionRegistry();
-		Executor executor = settings.getWebSocketPushMessageExecutor();
-		for (Client c : getRoomClients(m.getRoomId())) {
-			try {
-				final IWebSocketConnection wsConnection = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
-				if (wsConnection != null) {
-					executor.run(new Runnable() {
-						@Override
-						public void run() {
-							wsConnection.sendMessage(m);
-						}
-					});
-				}
-			} catch (Exception e) {
-				log.error("Error while broadcasting message to room", e);
-			}
-		}
-	}
-
 	public static boolean isModerator(long userId, long roomId) {
 		return hasRight(userId, roomId, Right.moderator);
 	}
@@ -452,17 +426,6 @@ public class RoomPanel extends BasePanel
 		return false;
 	}
 
-	public static void sendRoom(long roomId, String msg) {
-		IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
-		for (Client c : getRoomClients(roomId)) {
-			try {
-				reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId())).sendMessage(msg);
-			} catch (Exception e) {
-				log.error("Error while sending message to room", e);
-			}
-		}
-	}
-
 	@Override
 	public BasePanel onMenuPanelLoad(IPartialPageRequestHandler handler) {
 		getBasePage().getHeader().setVisible(false);
@@ -494,7 +457,7 @@ public class RoomPanel extends BasePanel
 			getMainPanel().getChat().toggle(handler, true);
 		}
 		handler.appendJavaScript("if (typeof roomUnload == 'function') { roomUnload(); }");
-		RoomMenuPanel.roomExit(getClient());
+		Application.exitRoom(getClient());
 		getMainPanel().getChat().roomExit(r, handler);
 	}
 
@@ -549,7 +512,7 @@ public class RoomPanel extends BasePanel
 				break;
 		}
 		if (reqType != null) {
-			RoomPanel.broadcast(new TextRoomMessage(getRoom().getId(), getUserId(), reqType, getClient().getUid()));
+			WebSocketHelper.sendRoom(new TextRoomMessage(getRoom().getId(), getUserId(), reqType, getClient().getUid()));
 		}
 	}
 
@@ -574,11 +537,11 @@ public class RoomPanel extends BasePanel
 	}
 
 	public void kickUser(AjaxRequestTarget target, Client client) {
-		RoomPanel.broadcast(new TextRoomMessage(client.getRoomId(), client.getUserId(), Type.kick, client.getUid()));
+		WebSocketHelper.sendRoom(new TextRoomMessage(client.getRoomId(), client.getUserId(), Type.kick, client.getUid()));
 	}
 
 	public void broadcast(AjaxRequestTarget target, Client client) {
-		broadcast(new RoomMessage(getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
+		WebSocketHelper.sendRoom(new RoomMessage(getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
 		RoomBroadcaster.sendUpdatedClient(client);
 	}
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java Thu Feb 16 04:15:27 2017
@@ -18,11 +18,11 @@
  */
 package org.apache.openmeetings.web.room.activities;
 
+import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.Application.getOnlineClient;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.room.RoomPanel.broadcast;
 import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
 import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
 
@@ -33,12 +33,12 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.message.RoomMessage;
 import org.apache.openmeetings.util.message.TextRoomMessage;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.Component;
@@ -82,7 +82,7 @@ public class ActivitiesPanel extends Bas
 		@Override
 		protected void respond(AjaxRequestTarget target) {
 			try {
-				String id = getRequest().getRequestParameters().getParameterValue(PARAM_ID).toString(); 
+				String id = getRequest().getRequestParameters().getParameterValue(PARAM_ID).toString();
 				long roomId = getRequest().getRequestParameters().getParameterValue(PARAM_ROOM_ID).toLong();
 				assert(room.getRoom().getId().equals(roomId));
 				Action action = Action.valueOf(getRequest().getRequestParameters().getParameterValue(ACTION).toString());
@@ -94,7 +94,7 @@ public class ActivitiesPanel extends Bas
 							break;
 						case decline:
 							if (room.getClient().hasRight(Right.moderator)) {
-								broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+								sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 							}
 							break;
 						case accept:
@@ -102,35 +102,35 @@ public class ActivitiesPanel extends Bas
 							if (room.getClient().hasRight(Right.moderator) && client != null && roomId == client.getRoomId()) {
 								switch (a.getType()) {
 									case reqRightModerator:
-										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 										room.allowRight(target, client, Right.moderator);
 										break;
 									case reqRightAv:
-										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 										room.allowRight(target, client, Right.audio, Right.video);
 										break;
 									case reqRightWb:
-										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 										room.allowRight(target, client, Right.whiteBoard);
 										break;
 									case reqRightShare:
-										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 										room.allowRight(target, client, Right.share);
 										break;
 									case reqRightRemote:
-										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 										room.allowRight(target, client, Right.remoteControl);
 										break;
 									case reqRightA:
-										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 										room.allowRight(target, client, Right.audio);
 										break;
 									case reqRightMute:
-										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 										room.allowRight(target, client, Right.mute);
 										break;
 									case reqRightExclusive:
-										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
+										sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, id));
 										room.allowRight(target, client, Right.exclusive);
 										break;
 									default:
@@ -146,7 +146,7 @@ public class ActivitiesPanel extends Bas
 				log.error("Unexpected exception while processing activity action", e);
 			}
 		}
-		
+
 		@Override
 		public void renderHead(Component component, IHeaderResponse response) {
 			super.renderHead(component, response);
@@ -222,7 +222,7 @@ public class ActivitiesPanel extends Bas
 			item.add(accept, decline, new Label("text", text));
 			item.add(AttributeAppender.append("class", getClass(a)));
 		}
-		
+
 		private String getClass(Activity a) {
 			String cls = "ui-state-default";
 			switch (a.getType()) {
@@ -262,7 +262,7 @@ public class ActivitiesPanel extends Bas
 			handler.add(container);
 		}
 	}
-	
+
 	public ActivitiesPanel(String id, RoomPanel room) {
 		super(id);
 		this.room = room;
@@ -272,7 +272,7 @@ public class ActivitiesPanel extends Bas
 		add(container.add(lv).setOutputMarkupPlaceholderTag(true));
 		add(action);
 	}
-	
+
 	@Override
 	public void renderHead(IHeaderResponse response) {
 		super.renderHead(response);

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java Thu Feb 16 04:15:27 2017
@@ -18,10 +18,10 @@
  */
 package org.apache.openmeetings.web.room.menu;
 
+import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
 import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.Application.removeUserFromRoom;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.util.GroupLogoResourceReference.getUrl;
 import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_PUBLIC;
@@ -33,7 +33,6 @@ import org.apache.commons.lang3.time.Fas
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.room.PollDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
-import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.RoomPoll;
@@ -42,7 +41,6 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.util.message.RoomMessage;
 import org.apache.openmeetings.util.message.TextRoomMessage;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.ImagePanel;
 import org.apache.openmeetings.web.common.InvitationDialog;
@@ -128,7 +126,7 @@ public class RoomMenuPanel extends Panel
 
 		@Override
 		public void onClick(AjaxRequestTarget target) {
-			RoomPanel.broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.requestRightWb, room.getClient().getUid()));
+			sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.requestRightWb, room.getClient().getUid()));
 		}
 	};
 	private final RoomMenuItem applyAvMenuItem = new RoomMenuItem(Application.getString(786), Application.getString(1482), false) {
@@ -136,7 +134,7 @@ public class RoomMenuPanel extends Panel
 
 		@Override
 		public void onClick(AjaxRequestTarget target) {
-			RoomPanel.broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.requestRightAv, room.getClient().getUid()));
+			sendRoom(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.requestRightAv, room.getClient().getUid()));
 		}
 	};
 	private final RoomMenuItem pollCreateMenuItem = new RoomMenuItem(Application.getString(24), Application.getString(1483), false) {
@@ -276,7 +274,7 @@ public class RoomMenuPanel extends Panel
 		Room r = room.getRoom();
 		PollDao pollDao = getBean(PollDao.class);
 		boolean pollExists = pollDao.hasPoll(r.getId());
-		User u = getBean(UserDao.class).get(getUserId());
+		User u = room.getClient().getUser();
 		boolean notExternalUser = u.getType() != User.Type.external && u.getType() != User.Type.contact;
 		exitMenuItem.setEnabled(notExternalUser);//TODO check this
 		filesMenu.setEnabled(room.getSidebar().isShowFiles());
@@ -332,12 +330,8 @@ public class RoomMenuPanel extends Panel
 	}
 
 	public void exit(IPartialPageRequestHandler handler) {
-		exit(handler, true);
-	}
-
-	public void exit(IPartialPageRequestHandler handler, boolean broadcast) {
 		if (WebSession.getRights().contains(User.Right.Dashboard)) {
-			roomExit(room.getClient(), broadcast);
+			Application.exitRoom(room.getClient());
 			room.getMainPanel().updateContents(ROOMS_PUBLIC, handler);
 		} else {
 			String url = getBean(ConfigurationDao.class).getConfValue(CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY, String.class, "");
@@ -347,17 +341,5 @@ public class RoomMenuPanel extends Panel
 			throw new RedirectToUrlException(url);
 		}
 	}
-
-	public static void roomExit(Client c) {
-		roomExit(c, true);
-	}
-
-	public static void roomExit(Client c, boolean broadcast) {
-		Long roomId = c.getRoomId();
-		removeUserFromRoom(c);
-		if (broadcast && roomId != null) {
-			RoomPanel.broadcast(new RoomMessage(roomId, c.getUserId(), RoomMessage.Type.roomExit));
-		}
-	}
 }
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java Thu Feb 16 04:15:27 2017
@@ -60,7 +60,7 @@ public class StartSharingButton extends
 	private static final String CDATA_BEGIN = "<![CDATA[";
 	private static final String CDATA_END = "]]>";
 	private final AjaxDownload download;
-	private final org.apache.openmeetings.web.app.Client c;
+	private final org.apache.openmeetings.db.entity.basic.Client c;
 	private final ExtendedClientProperties extProps;
 	private enum Protocol {
 		rtmp
@@ -69,7 +69,7 @@ public class StartSharingButton extends
 		, rtmpt
 	}
 
-	public StartSharingButton(String id, org.apache.openmeetings.web.app.Client c, final ExtendedClientProperties extProps) {
+	public StartSharingButton(String id, org.apache.openmeetings.db.entity.basic.Client c, final ExtendedClientProperties extProps) {
 		super(id);
 		this.c = c;
 		this.extProps = extProps;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java Thu Feb 16 04:15:27 2017
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.web.room.poll;
 
+import static org.apache.openmeetings.core.util.WebSocketHelper.sendRoom;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
@@ -31,7 +32,6 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.message.RoomMessage;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
@@ -70,12 +70,12 @@ public class CreatePollDialog extends Ab
 		form.setModelObject(p);
 		target.add(form);
 	}
-	
+
 	@Override
 	protected List<DialogButton> getButtons() {
 		return Arrays.asList(create, cancel);
 	}
-	
+
 	@Override
 	public DialogButton getSubmitButton() {
 		return create;
@@ -96,12 +96,12 @@ public class CreatePollDialog extends Ab
 		PollDao dao = getBean(PollDao.class);
 		dao.close(roomId);
 		dao.update(form.getModelObject());
-		RoomPanel.broadcast(new RoomMessage(roomId, getUserId(), RoomMessage.Type.pollCreated));
+		sendRoom(new RoomMessage(roomId, getUserId(), RoomMessage.Type.pollCreated));
 	}
 
 	private class PollForm extends Form<RoomPoll> {
 		private static final long serialVersionUID = 1L;
-		
+
 		public PollForm(String id, IModel<RoomPoll> model) {
 			super(id, model);
 			add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1410))));

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/ClientIconsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/ClientIconsPanel.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/ClientIconsPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/ClientIconsPanel.java Thu Feb 16 04:15:27 2017
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
-import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.sidebar.icon.right.AudioRightIcon;
 import org.apache.openmeetings.web.room.sidebar.icon.right.ExclusiveRightIcon;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java Thu Feb 16 04:15:27 2017
@@ -20,10 +20,10 @@ package org.apache.openmeetings.web.room
 
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.sidebar.icon.KickIcon;
 import org.apache.openmeetings.web.room.sidebar.icon.RefreshIcon;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java Thu Feb 16 04:15:27 2017
@@ -27,13 +27,13 @@ import static org.apache.wicket.ajax.att
 import java.util.ArrayList;
 import java.util.List;
 
+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;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Activity;
-import org.apache.openmeetings.web.app.Client.Pod;
 import org.apache.openmeetings.web.common.AddFolderDialog;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder.ConfirmableBorderDialog;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/SelfIconsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/SelfIconsPanel.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/SelfIconsPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/SelfIconsPanel.java Thu Feb 16 04:15:27 2017
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
-import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.sidebar.icon.SettingsIcon;
 import org.apache.openmeetings.web.room.sidebar.icon.activity.CamActivityIcon;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ClientIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ClientIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ClientIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ClientIcon.java Thu Feb 16 04:15:27 2017
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
-import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickIcon.java Thu Feb 16 04:15:27 2017
@@ -20,8 +20,8 @@ package org.apache.openmeetings.web.room
 
 import static org.apache.openmeetings.web.room.sidebar.RoomSidebar.FUNC_ACTION;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.RoomPanel.Action;
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java Thu Feb 16 04:15:27 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
-import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Activity;
+import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.basic.Client.Activity;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class RefreshIcon extends ClientIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java Thu Feb 16 04:15:27 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class SettingsIcon extends ClientIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/CamActivityIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/CamActivityIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/CamActivityIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/CamActivityIcon.java Thu Feb 16 04:15:27 2017
@@ -18,9 +18,9 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.activity;
 
+import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.basic.Client.Activity;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Activity;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class CamActivityIcon extends RoomActivityIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/MicActivityIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/MicActivityIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/MicActivityIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/MicActivityIcon.java Thu Feb 16 04:15:27 2017
@@ -18,9 +18,9 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.activity;
 
+import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.basic.Client.Activity;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Activity;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class MicActivityIcon extends RoomActivityIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/RoomActivityIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/RoomActivityIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/RoomActivityIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/activity/RoomActivityIcon.java Thu Feb 16 04:15:27 2017
@@ -21,10 +21,10 @@ package org.apache.openmeetings.web.room
 import static org.apache.openmeetings.web.room.sidebar.RoomSidebar.activityAllowed;
 import static org.apache.openmeetings.web.room.sidebar.RoomSidebar.FUNC_TOGGLE_ACTIVITY;
 
+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;
-import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Activity;
-import org.apache.openmeetings.web.app.Client.Pod;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.sidebar.icon.ClientIcon;
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/AudioRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/AudioRightIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/AudioRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/AudioRightIcon.java Thu Feb 16 04:15:27 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.right;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class AudioRightIcon extends RoomRightIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ExclusiveRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ExclusiveRightIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ExclusiveRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ExclusiveRightIcon.java Thu Feb 16 04:15:27 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.right;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class ExclusiveRightIcon extends RoomRightIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ModeratorRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ModeratorRightIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ModeratorRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ModeratorRightIcon.java Thu Feb 16 04:15:27 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.right;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class ModeratorRightIcon extends RoomRightIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RemoteControlRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RemoteControlRightIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RemoteControlRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RemoteControlRightIcon.java Thu Feb 16 04:15:27 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.right;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class RemoteControlRightIcon extends RoomRightIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RoomRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RoomRightIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RoomRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/RoomRightIcon.java Thu Feb 16 04:15:27 2017
@@ -20,8 +20,8 @@ package org.apache.openmeetings.web.room
 
 import static org.apache.openmeetings.web.room.sidebar.RoomSidebar.FUNC_TOGGLE_RIGHT;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.sidebar.icon.ClientIcon;
 

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ScreenShareRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ScreenShareRightIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ScreenShareRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/ScreenShareRightIcon.java Thu Feb 16 04:15:27 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.right;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class ScreenShareRightIcon extends RoomRightIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/VideoRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/VideoRightIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/VideoRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/VideoRightIcon.java Thu Feb 16 04:15:27 2017
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.right;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room.Right;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class VideoRightIcon extends RoomRightIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/WhiteboardRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/WhiteboardRightIcon.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/WhiteboardRightIcon.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/right/WhiteboardRightIcon.java Thu Feb 16 04:15:27 2017
@@ -18,10 +18,10 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon.right;
 
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class WhiteboardRightIcon extends RoomRightIcon {

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java Thu Feb 16 04:15:27 2017
@@ -21,7 +21,6 @@ package org.apache.openmeetings.web.user
 import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.Application.getRoomClients;
 import static org.apache.openmeetings.web.app.Application.getUserRooms;
 import static org.apache.openmeetings.web.app.Application.isUserInRoom;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
@@ -41,6 +40,7 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
+import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.ChatDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -49,7 +49,6 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
@@ -64,10 +63,6 @@ import org.apache.wicket.markup.html.for
 import org.apache.wicket.markup.html.form.HiddenField;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.protocol.ws.WebSocketSettings;
-import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
-import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
-import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -202,19 +197,8 @@ public class Chat extends Panel {
 	}
 
 	private static void sendRoom(ChatMessage m, String msg) {
-		IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
-		for (Client c : getRoomClients(m.getToRoom().getId())) {
-			try {
-				if (!m.isNeedModeration() || (m.isNeedModeration() && c.hasRight(Right.moderator))) {
-					IWebSocketConnection con = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
-					if (con != null) {
-						con.sendMessage(msg);
-					}
-				}
-			} catch (Exception e) {
-				log.error("Error while sending message to room", e);
-			}
-		}
+		WebSocketHelper.sendRoom(m.getToRoom().getId(), msg
+				, c -> !m.isNeedModeration() || (m.isNeedModeration() && c.hasRight(Right.moderator)));
 	}
 
 	private class ChatForm extends Form<Void> {
@@ -265,37 +249,11 @@ public class Chat extends Panel {
 						if (m.getToRoom() != null) {
 							sendRoom(m, msg);
 						} else if (m.getToUser() != null) {
-							IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
-							for (Client c : Application.getClients(getUserId())) {
-								try {
-									IWebSocketConnection con = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
-									if (con != null) {
-										con.sendMessage(msg);
-									}
-								} catch (Exception e) {
-									log.error("Error while sending message to room", e);
-								}
-							}
+							WebSocketHelper.sendUser(getUserId(), msg);
 							msg = getMessage(m.getToUser().getId(), Arrays.asList(m)).toString();
-							for (Client c : Application.getClients(m.getToUser().getId())) {
-								try {
-									IWebSocketConnection con = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
-									if (con != null) {
-										con.sendMessage(msg);
-									}
-								} catch (Exception e) {
-									log.error("Error while sending message to room", e);
-								}
-							}
+							WebSocketHelper.sendUser(m.getToUser().getId(), msg);
 						} else {
-							IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(getApplication()).getConnectionRegistry();
-							for (IWebSocketConnection c : reg.getConnections(getApplication())) {
-								try {
-									c.sendMessage(msg);
-								} catch(Exception e) {
-									log.error("Error while sending message", e);
-								}
-							}
+							WebSocketHelper.sendAll(msg);
 						}
 						chatMessage.setDefaultModelObject("");
 						target.add(chatMessage);

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java Thu Feb 16 04:15:27 2017
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.web.user.rooms;
 
+import static org.apache.openmeetings.web.app.Application.getBean;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
@@ -25,10 +27,10 @@ import java.util.List;
 
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.common.UserPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -62,7 +64,7 @@ public class RoomsPanel extends UserPane
 				roomId = r.getId();
 				updateRoomDetails(target);
 			}
-			
+
 			@Override
 			public void onRefreshClick(AjaxRequestTarget target, Room r) {
 				super.onRefreshClick(target, r);
@@ -70,7 +72,7 @@ public class RoomsPanel extends UserPane
 				updateRoomDetails(target);
 			}
 		});
-		
+
 		// Users in this Room
 		add(details.setOutputMarkupId(true).setVisible(rooms.size() > 0));
 		details.add(new Label("roomId", roomID));
@@ -92,12 +94,12 @@ public class RoomsPanel extends UserPane
 						rr.disableCaching();
 						return rr;
 					}
-					
+
 					@Override
 					protected byte[] getData(Attributes attributes) {
 						String uri = null;
 						if (userId != null) {
-							uri = Application.getBean(UserDao.class).get(userId > 0 ? userId : -userId).getPictureuri();
+							uri = getBean(UserDao.class).get(userId > 0 ? userId : -userId).getPictureuri();
 						}
 						File img = OmFileHelper.getUserProfilePicture(userId, uri);
 						try (InputStream is = new FileInputStream(img)) {
@@ -118,13 +120,13 @@ public class RoomsPanel extends UserPane
 	void updateRoomDetails(AjaxRequestTarget target) {
 		final List<Client> clientsInRoom = Application.getRoomClients(roomId);
 		clients.setDefaultModelObject(clientsInRoom);
-		Room room = Application.getBean(RoomDao.class).get(roomId);
+		Room room = getBean(RoomDao.class).get(roomId);
 		roomID.setObject(room.getId());
 		roomName.setObject(room.getName());
 		roomComment.setObject(room.getComment());
 		target.add(clientsContainer, details);
 	}
-	
+
 	@Override
 	protected void onDetach() {
 		roomID.detach();

Modified: openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java Thu Feb 16 04:15:27 2017
@@ -39,7 +39,7 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.cxf.feature.Features;
-import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.room.IInvitationManager;
 import org.apache.openmeetings.db.dao.room.InvitationDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -54,8 +54,8 @@ import org.apache.openmeetings.db.dto.ro
 import org.apache.openmeetings.db.dto.room.RoomDTO;
 import org.apache.openmeetings.db.entity.room.Invitation;
 import org.apache.openmeetings.db.entity.room.Invitation.MessageType;
-import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.util.message.RoomMessage;
@@ -66,9 +66,9 @@ import org.springframework.beans.factory
 
 /**
  * RoomService contains methods to manipulate rooms and create invitation hash
- * 
+ *
  * @author sebawagner
- * 
+ *
  */
 @WebService(serviceName="org.apache.openmeetings.webservice.RoomWebService", targetNamespace = TNS)
 @Features(features = "org.apache.cxf.feature.LoggingFeature")
@@ -91,8 +91,6 @@ public class RoomWebService {
 	private ISessionManager sessionManager;
 	@Autowired
 	private RoomDao roomDao;
-	@Autowired
-	private ScopeApplicationAdapter appAdapter;
 
 	/**
 	 * Returns an Object of Type RoomsList which contains a list of
@@ -100,7 +98,7 @@ public class RoomWebService {
 	 * about that Room. The List of current-users in the room is Null if you get
 	 * them via SOAP. The Roomtype can be 1 for conference rooms or 2 for
 	 * audience rooms.
-	 * 
+	 *
 	 * @param sid
 	 *            The SID of the User. This SID must be marked as Loggedin
 	 * @param type
@@ -128,7 +126,7 @@ public class RoomWebService {
 
 	/**
 	 * returns a conference room object
-	 * 
+	 *
 	 * @param sid - The SID of the User. This SID must be marked as Loggedin
 	 * @param id - the room id
 	 * @return - room with the id given
@@ -150,7 +148,7 @@ public class RoomWebService {
 	 * Checks if a room with this exteralRoomId + externalRoomType does exist,
 	 * if yes it returns the room id if not, it will create the room and then
 	 * return the room id of the newly created room
-	 * 
+	 *
 	 * @param sid
 	 *            The SID of the User. This SID must be marked as Loggedin
 	 * @param type
@@ -162,7 +160,7 @@ public class RoomWebService {
 	 *            your external room id may set here
 	 * @param room
 	 *            details of the room to be created if not found
-	 *            
+	 *
 	 * @return - id of the room or error code
 	 * @throws ServiceException
 	 */
@@ -196,15 +194,15 @@ public class RoomWebService {
 			throw new ServiceException(err.getMessage());
 		}
 	}
-	
+
 	/**
 	 * Adds a new Room like through the Frontend
-	 * 
+	 *
 	 * @param sid
 	 *            The SID from getSession
 	 * @param room
 	 *            room object
-	 *            
+	 *
 	 * @return - id of the user added or error code
 	 * @throws ServiceException
 	 */
@@ -229,15 +227,15 @@ public class RoomWebService {
 			throw new ServiceException(e.getMessage());
 		}
 	}
-	
+
 	/**//*
 	 * Adds a new Room like through the Frontend
-	 * 
+	 *
 	 * @param sid
 	 *            The SID from getSession
 	 * @param room
 	 *            room object
-	 *            
+	 *
 	 * @return - id of the user added or error code
 	 * @throws ServiceException
 	 *//*
@@ -265,13 +263,13 @@ public class RoomWebService {
 			throw new ServiceException(err.getMessage());
 		}
 	}*/
-	
+
 	/**
 	 * Delete a room by its room id
-	 * 
+	 *
 	 * @param sid - The SID of the User. This SID must be marked as Loggedin
 	 * @param id - The id of the room
-	 * 
+	 *
 	 * @return - id of the room deleted
 	 */
 	@WebMethod
@@ -297,14 +295,14 @@ public class RoomWebService {
 	 * Method to remotely close rooms. If a room is closed all users
 	 * inside the room and all users that try to enter it will be redirected to
 	 * the redirectURL that is defined in the Room-Object.
-	 * 
+	 *
 	 * Returns positive value if authentication was successful.
-	 * 
+	 *
 	 * @param sid
 	 *            The SID of the User. This SID must be marked as Loggedin
 	 * @param id
 	 *            the room id
-	 *            
+	 *
 	 * @return - 1 in case of success, -2 otherwise
 	 * @throws ServiceException
 	 */
@@ -323,7 +321,7 @@ public class RoomWebService {
 
 				roomDao.update(room, userId);
 
-				appAdapter.broadcastRoom(new RoomMessage(room.getId(),  userId,  RoomMessage.Type.roomClosed));
+				WebSocketHelper.sendRoom(new RoomMessage(room.getId(),  userId,  RoomMessage.Type.roomClosed));
 
 				return new ServiceResult(1L, "Closed", Type.SUCCESS);
 			} else {
@@ -342,14 +340,14 @@ public class RoomWebService {
 	 * Method to remotely open rooms. If a room is closed all users
 	 * inside the room and all users that try to enter it will be redirected to
 	 * the redirectURL that is defined in the Room-Object.
-	 * 
+	 *
 	 * Returns positive value if authentication was successful.
-	 * 
+	 *
 	 * @param sid
 	 *            The SID of the User. This SID must be marked as Loggedin
 	 * @param id
 	 *            the room id
-	 *            
+	 *
 	 * @return - 1 in case of success, -2 otherwise
 	 * @throws ServiceException
 	 */
@@ -366,7 +364,7 @@ public class RoomWebService {
 				Room room = roomDao.get(id);
 				room.setClosed(false);
 				roomDao.update(room, userId);
-				
+
 				return new ServiceResult(1L, "Opened", Type.SUCCESS);
 			} else {
 				throw new ServiceException("Insufficient permissions"); //TODO code -26
@@ -382,13 +380,13 @@ public class RoomWebService {
 
 	/**
 	 * kick all uses of a certain room
-	 * 
+	 *
 	 * @param sid
 	 *            The SID of the User. This SID must be marked as Loggedin
 	 *            _Admin
 	 * @param id
 	 *            the room id
-	 *            
+	 *
 	 * @return - true if user was kicked, false otherwise
 	 */
 	@WebMethod
@@ -410,10 +408,10 @@ public class RoomWebService {
 			throw new ServiceException(err.getMessage());
 		}
 	}
-	
+
 	/**
 	 * Returns current users for rooms ids
-	 * 
+	 *
 	 * @param sid - The SID of the User. This SID must be marked as Loggedin
 	 * @param ids - id of the room you need counters for
 	 * @return - current users for rooms ids
@@ -452,7 +450,7 @@ public class RoomWebService {
 
 	/**
 	 * Method to get invitation hash with given parameters
-	 * 
+	 *
 	 * @param sid - The SID of the User. This SID must be marked as Loggedin
 	 * @param invite - parameters of the invitation
 	 * @param sendmail - flag to determine if email should be sent or not
@@ -473,7 +471,7 @@ public class RoomWebService {
 			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
 				Invitation i = invite.get(userId, userDao, roomDao);
 				i = invitationDao.update(i);
-				
+
 				if (i != null) {
 					if (sendmail) {
 						invitationManager.sendInvitationLink(i, MessageType.Create, invite.getSubject(), invite.getMessage(), false);

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java Thu Feb 16 04:15:27 2017
@@ -18,17 +18,17 @@
  */
 package org.apache.openmeetings.core.remote;
 
+import static org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter.nextBroadCastId;
+import static org.apache.openmeetings.util.LocaleHelper.getCountryName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter.nextBroadCastId;
-import static org.apache.openmeetings.util.LocaleHelper.getCountryName;
+import static org.apache.openmeetings.util.Version.getVersion;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.List;
@@ -83,7 +83,12 @@ public class MobileService {
 	private static void add(Map<String, Object> m, String key, Object v) {
 		m.put(key, v == null ? "" : v);
 	}
-	
+
+	public String refreshSession(String sid) {
+		sessionDao.check(sid);
+		return "ok";
+	}
+
 	public Map<String, Object> checkServer() {
 		Map<String, Object> result = new Hashtable<>();
 		result.put("allowSelfRegister",  "1".equals(cfgDao.getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0")));
@@ -91,7 +96,7 @@ public class MobileService {
 		result.put("allowOauthRegister",  "1".equals(cfgDao.getConfValue(CONFIG_OAUTH_REGISTER_KEY, String.class, "0")));
 		return result;
 	}
-	
+
 	public Map<String, String> getStates() {
 		Map<String, String> result = new Hashtable<>();
 		for (String code : Locale.getISOCountries()) {
@@ -99,11 +104,11 @@ public class MobileService {
 		}
 		return result;
 	}
-	
+
 	public String[] getTimezones() {
 		return TimeZone.getAvailableIDs();
 	}
-	
+
 	public Map<String, Object> loginGoogle(Map<String, String> umap) {
 		Map<String, Object> result = getResult();
 		try {
@@ -116,7 +121,7 @@ public class MobileService {
 		}
 		return result;
 	}
-	
+
 	public Map<String, Object> registerUser(Map<String, String> umap) {
 		Map<String, Object> result = getResult();
 		try {
@@ -135,7 +140,7 @@ public class MobileService {
 				String tzId = umap.get("tzId");
 				String country = umap.get("stateId");
 				Long langId = Long.valueOf(umap.get("langId"));
-				
+
 				//FIXME TODO unify with Register dialog
 				String hash = UUID.randomUUID().toString();
 
@@ -168,7 +173,7 @@ public class MobileService {
 		}
 		return result;
 	}
-	
+
 	public Map<String, Object> loginUser(String login, String password) {
 		Map<String, Object> result = getResult();
 		try {
@@ -181,32 +186,30 @@ public class MobileService {
 		}
 		return result;
 	}
-	
+
 	private static Map<String, Object> getResult() {
 		Map<String, Object> result = new Hashtable<>();
 		result.put("status", -1);
 		return result;
 	}
-	
+
 	private Map<String, Object> login(User u, Map<String, Object> result) {
 		if (u != null) {
-			Sessiondata sd = sessionDao.create(u.getId(), u.getLanguageId());
 			IConnection conn = Red5.getConnectionLocal();
 			String streamId = conn.getClient().getId();
 			Client c = sessionManager.getClientByStreamId(streamId, null);
 			if (c == null) {
-				c = sessionManager.addClientListItem(streamId, conn.getScope().getName(), conn.getRemotePort(),
-					conn.getRemoteAddress(), "", null);
-			}
-			if (c == null) {
 				// Failed to create client
 				result.put("status", -1);
 			} else {
+				Sessiondata sd = sessionDao.check(c.getSecurityCode());
+				sd.setUserId(u.getId());
+				sd.setLanguageId(u.getLanguageId());
+				sessionDao.update(sd);
 				SessionVariablesUtil.initClient(conn.getClient(), c.getPublicSID());
 				c.setUserId(u.getId());
 				c.setFirstname(u.getFirstname());
 				c.setLastname(u.getLastname());
-				c.setMobile(true);
 				sessionManager.updateClientByStreamId(streamId, c, false, null);
 
 				add(result, "sid", sd.getSessionId());
@@ -218,11 +221,12 @@ public class MobileService {
 				add(result, "login", u.getLogin());
 				add(result, "email", u.getAddress() == null ? "" : u.getAddress().getEmail());
 				add(result, "language", u.getLanguageId()); //TODO rights
+				add(result, "version", getVersion());
 			}
 		}
 		return result;
 	}
-	
+
 	public List<Map<String, Object>> getVideoStreams() {
 		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
 		// Notify all clients of the same scope (room)
@@ -252,7 +256,7 @@ public class MobileService {
 	}
 
 	private void addRoom(String type, String org, boolean first, List<Map<String, Object>> result, Room r) {
-		Map<String, Object> room = new Hashtable<String, Object>();
+		Map<String, Object> room = new Hashtable<>();
 		room.put("id", r.getId());
 		room.put("name", r.getName());
 		room.put("type", type);
@@ -266,22 +270,22 @@ public class MobileService {
 		room.put("audioOnly", r.isAudioOnly());
 		result.add(room);
 	}
-	
+
 	public List<Map<String, Object>> getRooms() {
-		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
+		List<Map<String, Object>> result = new ArrayList<>();
 		// FIXME duplicated code
 		IConnection current = Red5.getConnectionLocal();
 		Client c = sessionManager.getClientByStreamId(current.getClient().getId(), null);
 		User u = userDao.get(c.getUserId());
 		//my rooms
-		List<Room> myl = new ArrayList<Room>();
+		List<Room> myl = new ArrayList<>();
 		myl.add(roomDao.getUserRoom(u.getId(), Room.Type.conference, labelDao.getString(1306L, u.getLanguageId())));
 		myl.add(roomDao.getUserRoom(u.getId(), Room.Type.restricted, labelDao.getString(1307L, u.getLanguageId())));
 		myl.addAll(roomDao.getAppointedRoomsByUser(u.getId()));
 		for (Room r : myl) {
 			addRoom("my", null, false, result, r);
 		}
-		
+
 		//private rooms
 		for (GroupUser ou : u.getGroupUsers()) {
 			Group org = ou.getGroup();
@@ -291,16 +295,17 @@ public class MobileService {
 				first = false;
 			}
 		}
-		
+
 		//public rooms
 		for (Room r : roomDao.getPublicRooms()) {
 			addRoom("public", null, false, result, r);
 		}
 		return result;
 	}
-	
+
 	public Map<String, Object> roomConnect(String SID, Long userId) {
-		Map<String, Object> result = new Hashtable<String, Object>();
+		Map<String, Object> result = new Hashtable<>();
+		/** FIXME TODO
 		User u = userDao.get(userId);
 		Client c = scopeAdapter.setUsernameReconnect(SID, userId, u.getLogin(), u.getFirstname(), u.getLastname(), u.getPictureuri());
 		 //TODO check if we need anything here
@@ -316,6 +321,7 @@ public class MobileService {
 		result.put("publicSid", c.getPublicSID());
 
 		scopeAdapter.sendMessageToCurrentScope("addNewUser", c, false, false);
+		*/
 		return result;
 	}
 
@@ -323,16 +329,16 @@ public class MobileService {
 		IConnection current = Red5.getConnectionLocal();
 		Client c = sessionManager.getClientByStreamId(current.getClient().getId(), null);
 		c.setAvsettings(avMode);
-		c.setVWidth(Integer.parseInt(width));
-		c.setVHeight(Integer.parseInt(height));
+		c.setVWidth(Double.valueOf(width).intValue());
+		c.setVHeight(Double.valueOf(height).intValue());
 		if (interviewPodId > 0) {
 			c.setInterviewPodId(interviewPodId);
 		}
 		sessionManager.updateClientByStreamId(c.getStreamid(), c, false, null);
-		HashMap<String, Object> hsm = new HashMap<String, Object>();
+		Map<String, Object> hsm = new HashMap<>();
 		hsm.put("client", c);
 		hsm.put("message", new String[]{"avsettings", "0", avMode});
-		Map<String, Object> result = new Hashtable<String, Object>();
+		Map<String, Object> result = new Hashtable<>();
 		if (!"n".equals(avMode)) {
 			result.put("broadcastId", nextBroadCastId());
 		}
@@ -340,4 +346,56 @@ public class MobileService {
 		scopeAdapter.sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, true, false);
 		return result;
 	}
+/*
+	public void sendChatMessage(String message) {
+		IConnection current = Red5.getConnectionLocal();
+		Client client = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		List<String> msg = new ArrayList<String>();
+		msg.add("chat"); //'privatechat'
+		msg.add(""); //date-time
+		msg.add("newtextmessage");
+		msg.add(client.getUsername());
+		msg.add(message);
+		msg.add(client.getUsercolor());
+		msg.add(client.getPublicSID()); //om[6] = parent.parent.isPrivate ? parent.parent.parent.refObj.publicSID : canvas.publicSID;
+		msg.add("false");// canvas.isrtl;
+		msg.add("" + client.getUserId());
+		Room room = roomDao.get(client.getRoomId());
+		msg.add("" + (room.isChatModerated() && !(client.getIsMod() || client.getIsSuperModerator())));
+		sendMessageWithClient(msg);
+
+		"sendVarsToMessageWithClient"
+	}
+
+	public List<Map<String, Object>> getRoomChatHistory() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long roomId = currentClient.getRoomId();
+
+			log.debug("GET CHATROOM: " + roomId);
+
+			List<Map<String,Object>> myChatList = myChats.get(roomId);
+			if (myChatList==null) myChatList = new ArrayList<Map<String,Object>>();
+
+			if (!currentClient.getIsMod() && !currentClient.getIsSuperModerator()) {
+				//current user is not moderator, chat history need to be filtered
+				List<Map<String,Object>> tmpChatList = new LinkedList<Map<String,Object>>(myChatList);
+				for (int i = tmpChatList.size() - 1; i > -1; --i) {
+					@SuppressWarnings("rawtypes")
+					List msgList = (List)tmpChatList.get(i).get("message");
+					if (Boolean.valueOf("" + msgList.get(9))) { //needModeration
+						tmpChatList.remove(i);
+					}
+				}
+				myChatList = tmpChatList;
+			}
+
+			return myChatList;
+		} catch (Exception err) {
+			log.error("[getRoomChatHistory] ",err);
+			return null;
+		}
+	}
+*/
 }

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java?rev=1783168&r1=1783167&r2=1783168&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java Thu Feb 16 04:15:27 2017
@@ -30,6 +30,7 @@ import org.apache.openmeetings.core.data
 import org.apache.openmeetings.core.data.record.converter.RecordingConverterTask;
 import org.apache.openmeetings.core.data.record.listener.StreamListener;
 import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
 import org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao;
@@ -142,7 +143,7 @@ public class RecordingService implements
 						Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
 
 						// Send every user a notification that the recording did start
-						scopeApplicationAdapter.broadcastRoom(new TextRoomMessage(roomId, ownerId, RoomMessage.Type.recordingStarted, client.getPublicSID()));
+						WebSocketHelper.sendRoom(new TextRoomMessage(roomId, ownerId, RoomMessage.Type.recordingStarted, client.getPublicSID()));
 
 						// If its the recording client we need another type of Meta Data
 						if (rcl.isScreenClient()) {
@@ -310,7 +311,7 @@ public class RecordingService implements
 	public Long stopRecordAndSave(IScope scope, Client client, Long storedRecordingId) {
 		try {
 			log.debug("stopRecordAndSave " + client.getUsername() + "," + client.getUserip());
-			scopeApplicationAdapter.broadcastRoom(new TextRoomMessage(client.getRoomId(), client.getUserId(), RoomMessage.Type.recordingStoped, client.getPublicSID()));
+			WebSocketHelper.sendRoom(new TextRoomMessage(client.getRoomId(), client.getUserId(), RoomMessage.Type.recordingStoped, client.getPublicSID()));
 
 			// get all stream and stop recording them
 			for (IConnection conn : scope.getClientConnections()) {