Repository: openmeetings Updated Branches: refs/heads/master 417fdd64f -> 117e8d6bc
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java index 1527797..50afb36 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java @@ -26,8 +26,8 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.LEVEL_USER; import static org.apache.openmeetings.util.OpenmeetingsVariables.MENU_ROOMS_NAME; import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.apache.openmeetings.web.app.Application.addOnlineUser; -import static org.apache.openmeetings.web.app.Application.exit; 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.util.CallbackFunctionHelper.getNamedFunction; import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getParam; @@ -101,7 +101,7 @@ public class MainPanel extends Panel { private static final String DELIMITER = " "; private static final WebMarkupContainer EMPTY = new WebMarkupContainer(CHILD_ID); public static final String PARAM_USER_ID = "userId"; - private Client client = null; + private String uid = null; private final MenuPanel menu; private final WebMarkupContainer topControls = new WebMarkupContainer("topControls"); private final WebMarkupContainer topLinks = new WebMarkupContainer("topLinks"); @@ -116,7 +116,7 @@ public class MainPanel extends Panel { @Override protected void onTimer(AjaxRequestTarget target) { log.debug("Sending WebSocket PING"); - WebSocketHelper.sendClient(client, new byte[]{getUserId().byteValue()}); + WebSocketHelper.sendClient(getClient(), new byte[]{getUserId().byteValue()}); } }; @@ -150,7 +150,7 @@ public class MainPanel extends Panel { protected void onInitialize() { super.onInitialize(); add(topControls.setOutputMarkupPlaceholderTag(true).setMarkupId("topControls")); - add(contents.add(client == null ? EMPTY : panel).setOutputMarkupId(true).setMarkupId("contents")); + add(contents.add(getClient() == null ? EMPTY : panel).setOutputMarkupId(true).setMarkupId("contents")); topControls.add(menu.setVisible(false), topLinks.setVisible(false).setOutputMarkupPlaceholderTag(true).setMarkupId("topLinks")); topLinks.add(new AjaxLink<Void>("messages") { private static final long serialVersionUID = 1L; @@ -242,7 +242,8 @@ public class MainPanel extends Panel { protected void onConnect(ConnectedMessage msg) { super.onConnect(msg); ExtendedClientProperties cp = WebSession.get().getExtendedProperties(); - client = new Client(getSession().getId(), msg.getKey().hashCode(), getUserId(), getBean(UserDao.class)); + final Client client = new Client(getSession().getId(), msg.getKey().hashCode(), getUserId(), getBean(UserDao.class)); + uid = client.getUid(); addOnlineUser(cp.update(client)); log.debug("WebSocketBehavior::onConnect [uid: {}, session: {}, key: {}]", client.getUid(), msg.getSessionId(), msg.getKey()); } @@ -278,10 +279,10 @@ public class MainPanel extends Panel { private void closeHandler(AbstractClientMessage msg) { //no chance to stop pingTimer here :( - if (client != null) { - log.debug("WebSocketBehavior::closeHandler [uid: {}, session: {}, key: {}]", client.getUid(), msg.getSessionId(), msg.getKey()); - exit(client); - client = null; + if (uid != null) { + log.debug("WebSocketBehavior::closeHandler [uid: {}, session: {}, key: {}]", uid, msg.getSessionId(), msg.getKey()); + Application.get().exit(uid); + uid = null; } } }); @@ -343,7 +344,7 @@ public class MainPanel extends Panel { public void updateContents(OmUrlFragment f, IPartialPageRequestHandler handler, boolean updateFragment) { BasePanel panel = getPanel(f.getArea(), f.getType()); if (panel != null) { - if (client != null) { + if (getClient() != null) { updateContents(panel, handler); } else { this.panel = panel; @@ -383,6 +384,6 @@ public class MainPanel extends Panel { } public Client getClient() { - return client; + return getOnlineClient(uid); } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/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 d9e203e..c0af7b7 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 @@ -24,6 +24,7 @@ import static org.apache.openmeetings.web.app.Application.getBean; import org.apache.openmeetings.core.remote.ScopeApplicationAdapter; import org.apache.openmeetings.core.session.SessionManager; import org.apache.openmeetings.db.dto.server.ClientSessionInfo; +import org.apache.openmeetings.db.entity.basic.Client; import org.apache.openmeetings.db.entity.room.StreamClient; import org.apache.openmeetings.web.app.Application; import org.red5.logging.Red5LoggerFactory; @@ -33,7 +34,7 @@ public class RoomBroadcaster { private static final Logger log = Red5LoggerFactory.getLogger(RoomBroadcaster.class, webAppRootKey); public static StreamClient getClient(String publicSid) { - ClientSessionInfo csi = getBean(SessionManager.class).getClientByPublicSIDAnyServer(publicSid); + ClientSessionInfo csi = getBean(SessionManager.class).getClientByUidAnyServer(publicSid); return csi == null ? null : csi.getRcl(); } @@ -50,8 +51,9 @@ public class RoomBroadcaster { sa.sendToScope(roomId, method, obj); } - public static void sendUpdatedClient(org.apache.openmeetings.db.entity.basic.Client client) { - StreamClient rcl = Application.get().updateClient(getClient(client.getUid()), true); + public static void sendUpdatedClient(Client client) { + String uid = client.getUid(); + StreamClient rcl = Application.get().updateClient(getClient(uid), true); log.debug("----------- sendUpdatedClient "); if (rcl == null) { @@ -59,7 +61,7 @@ public class RoomBroadcaster { } // Put the mod-flag to true for this client - getBean(SessionManager.class).updateClientByStreamId(rcl.getStreamid(), rcl, false, null); + getBean(SessionManager.class).update(rcl); // Notify all clients of the same scope (room) broadcast(client.getRoomId(), "clientUpdated", rcl); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/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 8ee4ca9..4ff3dc6 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 @@ -22,10 +22,10 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.apache.openmeetings.web.app.Application.addUserToRoom; import static org.apache.openmeetings.web.app.Application.exitRoom; import static org.apache.openmeetings.web.app.Application.getBean; +import static org.apache.openmeetings.web.app.Application.getClientBySid; import static org.apache.openmeetings.web.app.Application.getOnlineClient; import static org.apache.openmeetings.web.app.Application.getRoomClients; import static org.apache.openmeetings.web.app.WebSession.getDateFormat; -import static org.apache.openmeetings.web.app.WebSession.getSid; import static org.apache.openmeetings.web.app.WebSession.getUserId; import java.util.Calendar; @@ -158,13 +158,10 @@ public class RoomPanel extends BasePanel { StringBuilder sb = new StringBuilder(); for (Client c: getRoomClients(getRoom().getId()) ) { boolean self = getClient().getUid().equals(c.getUid()); - if (c.hasAnyActivity(Client.Activity.broadcastA, Client.Activity.broadcastV)) { - sb.append(String.format("VideoManager.play(%s);" - , RoomHelper.videoJson(c, self, getSid(), getBean(ISessionManager.class), false))); - } - if (c.hasActivity(Client.Activity.share)) { - sb.append(String.format("VideoManager.play(%s);" - , RoomHelper.videoJson(c, self, getSid(), getBean(ISessionManager.class), true))); + for (Client.Stream s : c.getStreams()) { + JSONObject jo = RoomHelper.videoJson(c, self, c.getSid(), getBean(ISessionManager.class), s.getStreamClientId(), s.isSharing()) + .put("broadcastId", s.getBroadcastId()); + sb.append(String.format("VideoManager.play(%s);", jo)); } } if (!Strings.isEmpty(sb)) { @@ -338,7 +335,7 @@ public class RoomPanel extends BasePanel { case recordingStoped: { String uid = ((TextRoomMessage)m).getText(); - Client c = getOnlineClient(uid); + Client c = getClientBySid(uid); if (c == null) { log.error("Not existing/BAD user has stopped recording {} != {} !!!!", uid); return; @@ -351,7 +348,7 @@ public class RoomPanel extends BasePanel { case recordingStarted: { String uid = ((TextRoomMessage)m).getText(); - Client c = getOnlineClient(uid); + Client c = getClientBySid(uid); if (c == null) { log.error("Not existing user has started recording {} !!!!", uid); return; @@ -363,12 +360,13 @@ public class RoomPanel extends BasePanel { break; case sharingStoped: { - String uid = ((TextRoomMessage)m).getText(); - Client c = getOnlineClient(uid); + JSONObject obj = new JSONObject(((TextRoomMessage)m).getText()); + Client c = getClientBySid(obj.getString("ownerSid")); if (c == null) { - log.error("Not existing user has started sharing {} !!!!", uid); + log.error("Not existing user has started sharing {} !!!!", obj); return; } + handler.appendJavaScript(String.format("VideoManager.close('%s', true);", obj.getString("uid"))); sharingUser = null; c.remove(Client.Activity.share); menu.update(handler); @@ -389,9 +387,14 @@ public class RoomPanel extends BasePanel { break; case rightUpdated: { - Client c = getOnlineClient(((TextRoomMessage)m).getText()); + String uid = ((TextRoomMessage)m).getText(); + Client c = getOnlineClient(uid); + if (c == null) { + log.error("Not existing user in rightUpdated {} !!!!", uid); + return; + } handler.appendJavaScript(String.format("VideoManager.update(%s);" - , c.toJson(getClient().getUid().equals(c.getUid())).put("sid", getSid()))); + , c.toJson(getClient().getUid().equals(c.getUid())).put("sid", getClient().getSid()))); sidebar.update(handler); menu.update(handler); wb.update(handler); @@ -400,12 +403,26 @@ public class RoomPanel extends BasePanel { case newStream: { JSONObject obj = new JSONObject(((TextRoomMessage)m).getText()); - Client c = getOnlineClient(obj.getString("uid")); - c.setBroadcastId(obj.getString("stream")); + boolean share = obj.optBoolean("screenShare", false); + String uid = obj.getString("uid"); + Client c = getOnlineClient(uid); + if (c == null) { + // screen client, ext video stream ?? + c = getClientBySid(obj.getString("ownerSid")); + } + if (c == null) { + log.error("Not existing user in newStream {} !!!!", uid); + return; + } boolean self = getClient().getUid().equals(c.getUid()); + String broadcastId = obj.getString("stream"); + Long streamClientId = obj.getLong("streamClientId"); if (!self) { - handler.appendJavaScript(String.format("VideoManager.play(%s);" - , RoomHelper.videoJson(c, self, getSid(), getBean(ISessionManager.class), obj.optBoolean("screenShare", false)))); + JSONObject jo = RoomHelper.videoJson(c, uid, self, c.getSid(), getBean(ISessionManager.class), streamClientId, share) + .put("broadcastId", broadcastId); + handler.appendJavaScript(String.format("VideoManager.play(%s);", jo)); + } else { + c.addStream(streamClientId, broadcastId, share); } } break; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.java index 94abced..d7666c7 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.java @@ -29,9 +29,7 @@ import static org.apache.openmeetings.web.app.Application.getBean; import java.net.URL; -import org.apache.directory.api.util.Strings; import org.apache.openmeetings.core.remote.ScopeApplicationAdapter; -import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.util.ExtendedClientProperties; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; @@ -65,16 +63,13 @@ public class VideoSettings extends Panel { return String.format("%s://%s:%s/%s", protocol, host, port, app); } - public static JSONObject getInitJson(ExtendedClientProperties cp, String scope, String uid) { + public static JSONObject getInitJson(ExtendedClientProperties cp, String scope, String sid) { JSONObject gs = getBean(ScopeApplicationAdapter.class).getFlashSettings(); JSONObject s = new JSONObject() .put(FLASH_VIDEO_CODEC, gs.get(FLASH_VIDEO_CODEC)) .put(FLASH_FPS, gs.get(FLASH_FPS)) - .put("sid", WebSession.getSid()) + .put("sid", sid) .put("wmode", cp.isBrowserInternetExplorer() && cp.getBrowserVersionMajor() == 11 ? "opaque" : "direct"); - if (!Strings.isEmpty(uid)) { - s.put("uid", uid); - } try { URL url = new URL(cp.getCodebase()); String path = url.getPath(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/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 bdb1ea8..ff7891f 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 @@ -301,13 +301,13 @@ public class RoomMenuPanel extends Panel { StringBuilder roomTitle = new StringBuilder(); if (room.getRecordingUser() != null) { ISessionManager sessMngr = getBean(ISessionManager.class); - StreamClient recUser = sessMngr.getClientByPublicSID(room.getRecordingUser(), null); //TODO check server + StreamClient recUser = sessMngr.getClientByUid(room.getRecordingUser(), null); //TODO check server if (recUser != null) { roomTitle.append(String.format("%s %s %s %s %s", getString("419") , recUser.getUsername(), recUser.getFirstname(), recUser.getLastname(), df.format(recUser.getConnectedSince()))); roomClass.append(" screen"); } - StreamClient pubUser = sessMngr.getClientByPublicSID(room.getPublishingUser(), null); //TODO check server + StreamClient pubUser = sessMngr.getClientByUid(room.getPublishingUser(), null); //TODO check server if (pubUser != null) { if (recUser != null) { roomTitle.append('\n'); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/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 bc0744d..3f935a6 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 @@ -91,8 +91,8 @@ public class StartSharingButton extends OmButton { try (InputStream jnlp = getClass().getClassLoader().getResourceAsStream("APPLICATION.jnlp")) { ConfigurationDao cfgDao = getBean(ConfigurationDao.class); app = IOUtils.toString(jnlp, UTF_8); - String publicSid = c.getUid(); - JSONObject s = VideoSettings.getInitJson(WebSession.get().getExtendedProperties(), "" + c.getRoomId(), publicSid); + String sid = c.getSid(); + JSONObject s = VideoSettings.getInitJson(WebSession.get().getExtendedProperties(), "" + c.getRoomId(), sid); String _url = s.getString(VideoSettings.URL); long roomId = c.getRoomId(); Room room = getBean(RoomDao.class).get(roomId); @@ -102,7 +102,7 @@ public class StartSharingButton extends OmButton { .replace("$applicationName", cfgDao.getAppName()) .replace("$url", _url) .replace("$fallback", s.getString(VideoSettings.FALLBACK)) - .replace("$publicSid", publicSid) + .replace("$sid", sid) .replace("$labels", getLabels(730, 731, 732, 733, 734 , 735, 737, 738, 739, 740 , 741, 742, 844, 869, 870 http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/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 7db4666..c076069 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 @@ -16,6 +16,18 @@ * specific language governing permissions and limitations * under the License. */ +var VideoUtil = (function() { + var self = {}; + function _getVid(uid) { + return "video" + uid; + } + function _getShareVid(uid) { + return "video-share" + uid; + } + self.getVid = _getVid; + self.getShareVid = _getShareVid; + return self; +})(); var Video = (function() { var self = {}, c, box, v, vc, t, swf, size; @@ -35,7 +47,8 @@ var Video = (function() { c = _c; box = _box; size = {width: c.width, height: c.height}; - var _id = "video" + c.uid, name = _getName() + var _id = !!c.screenShare ? VideoUtil.getShareVid(c.uid) : VideoUtil.getVid(c.uid) + , name = _getName() , _w = c.self ? Math.max(300, c.width) : c.width , _h = c.self ? Math.max(200, c.height) : c.height; box.append($('#user-video').clone().attr('id', _id).attr('title', name).data(self)); @@ -106,6 +119,7 @@ var Video = (function() { o.width = c.width; o.height = c.height; o.sid = c.sid; + o.uid = c.uid; o.broadcastId = c.broadcastId; swf = initVideo(vc, _id + '-swf', o); swf.attr('width', _w).attr('height', _h); @@ -130,11 +144,8 @@ var VideoManager = (function() { box = $('.room.box'); share = box.find('.icon.shared.ui-button'); } - function _getVid(uid) { - return "video" + uid; - } function _update(c) { - var _id = _getVid(c.uid) + var _id = VideoUtil.getVid(c.uid) , video = c.activities.indexOf('broadcastV') > -1 , audio = c.activities.indexOf('broadcastA') > -1 , av = audio || video @@ -156,8 +167,8 @@ var VideoManager = (function() { function _play(c) { if (!!c.screenShare) { _highlight(share.attr('title', share.data('user') + ' ' + c.user.firstName + ' ' + c.user.lastName + ' ' + share.data('text')).show(), 10); - share.tooltip().click(function() { - var v = $('#' + _getVid(c.uid)) + share.tooltip().off('click').click(function() { + var v = $('#' + VideoUtil.getShareVid(c.uid)) if (v.length != 1) { Video().init(box, options.uid, c); } else { @@ -168,8 +179,9 @@ var VideoManager = (function() { Video().init(box, options.uid, c); } } - function _close(uid) { - var _id = _getVid(uid), v = $('#' + _id); + function _close(uid, screenShare) { + var _id = !!screenShare ? VideoUtil.getShareVid(uid) : VideoUtil.getVid(uid) + , v = $('#' + _id); if (v.length == 1) { if (v.data().client().screenShare) { share.off('click').hide(); @@ -193,7 +205,7 @@ var VideoManager = (function() { self.update = _update; self.play = _play; self.close = _close; - self.resetSize = function(uid) { $('#' + _getVid(uid)).data().resetSize(); }; + self.resetSize = function(uid) { $('#' + VideoUtil.getVid(uid)).data().resetSize(); }; return self; })(); function setRoomSizes() { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml index 99674d6..0a6729a 100644 --- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml +++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml @@ -75,7 +75,6 @@ <!-- Start of Services --> <bean id="xmlcrm.service" class="org.apache.openmeetings.core.remote.MainService" /> - <bean id="userservice.service" class="org.apache.openmeetings.core.remote.UserService" /> <bean id="fileservice.service" class="org.apache.openmeetings.core.remote.ConferenceLibrary" /> <bean id="openmeetings.FileProcessor" class="org.apache.openmeetings.core.data.file.FileProcessor" /> <bean id="openmeetings.FlvExplorerConverter" class="org.apache.openmeetings.core.converter.FlvExplorerConverter" /> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml index f173c2a..1009f39 100644 --- a/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml +++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml @@ -48,7 +48,7 @@ </appender> <appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> - <pattern>%5p %d{MM-dd HH:mm:ss.SSS } %F %r %L %c [%t] - %m%n</pattern> + <pattern>%5p %d{MM-dd HH:mm:ss.SSS } %r %L %c{15} [%t] - %m%n</pattern> </layout> </appender> <logger name="com.mchange.v2" level="ERROR" /> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java deleted file mode 100644 index c5e1b36..0000000 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.test.poll; - -import static org.junit.Assert.assertNotNull; - -import java.util.Random; - -import org.apache.openmeetings.db.dao.server.ISessionManager; -import org.apache.openmeetings.test.AbstractJUnitDefaults; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -public class TestClientListManager extends AbstractJUnitDefaults { - @Autowired - private ISessionManager sessionManager; - - @Test - public void addClientListItem() { - Random rnd = new Random(); - assertNotNull("RoomClientId created is null", - sessionManager.addClientListItem(rnd.nextLong() + "ABCDE" - + rnd.nextLong(), "scopeName", 66666, "remoteAddress", - "swfUrl", null)); - } - -} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java index 6963911..ccd01d5 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java @@ -18,6 +18,7 @@ */ package org.apache.openmeetings.test.session; +import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.junit.Assert.assertEquals; import java.util.List; @@ -27,7 +28,6 @@ import org.apache.openmeetings.db.dao.server.ServerDao; import org.apache.openmeetings.db.entity.room.StreamClient; import org.apache.openmeetings.db.entity.server.Server; import org.apache.openmeetings.test.AbstractJUnitDefaults; -import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import org.junit.Test; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; @@ -45,7 +45,7 @@ public class TestDbSession extends AbstractJUnitDefaults { @Test public void testDbSessionFunctions() { clientDao.cleanAllClients(); - + List<Server> serverList = serverDao.getActiveServers(); Server server = null; @@ -59,132 +59,93 @@ public class TestDbSession extends AbstractJUnitDefaults { } StreamClient cl1 = new StreamClient(); - cl1.setStreamid("1"); cl1.setServer(null); cl1.setUserId(1L); - cl1.setRoomId(1L); - cl1.setPublicSID("public1"); + cl1.setScope("1"); + cl1.setUid("public1"); clientDao.add(cl1); StreamClient cl2 = new StreamClient(); - cl2.setStreamid("2"); cl2.setServer(null); - cl2.setRoomId(1L); + cl2.setScope("1"); cl2.setUserId(2L); - cl2.setPublicSID("public2"); + cl2.setUid("public2"); clientDao.add(cl2); StreamClient cl3 = new StreamClient(); - cl3.setStreamid("3"); cl3.setServer(server); - cl3.setRoomId(3L); + cl3.setScope("3"); cl3.setUserId(3L); - cl3.setPublicSID("public3"); + cl3.setUid("public3"); clientDao.add(cl3); - - StreamClient clTest = clientDao.getClientByServerAndStreamId(null, "1"); - - log.debug("cl1 " + cl1); - log.debug("clTest " + clTest); - - assertEquals(clTest.getId(), cl1.getId()); - - StreamClient clTest3 = clientDao.getClientByServerAndStreamId(server, "3"); - - log.debug("cl3 " + cl3); - log.debug("clTest3 " + clTest3); - - assertEquals(clTest3.getId(), cl3.getId()); - StreamClient clTest_NOT_3 = clientDao.getClientByServerAndStreamId(null, "3"); - - log.debug("clTest_NOT_3 " + clTest_NOT_3); - assertEquals(null, clTest_NOT_3); - - long numberOfClients1 = clientDao.countClientsByServerAndStreamId(null, "1"); - assertEquals(1, numberOfClients1); - - long numberOfClients3 = clientDao.countClientsByServerAndStreamId(server, "3"); - assertEquals(1, numberOfClients3); - - long numberOfClients4 = clientDao.countClientsByServerAndStreamId(null, "3"); - assertEquals(0, numberOfClients4); - - List<StreamClient> clTest_Pub_1_list = clientDao.getClientsByPublicSIDAndServer(null, "public1"); + List<StreamClient> clTest_Pub_1_list = clientDao.getClientsByUidAndServer(null, "public1"); assertEquals(cl1.getId(), clTest_Pub_1_list.get(0).getId()); - - List<StreamClient> clTest_Pub_3_list = clientDao.getClientsByPublicSIDAndServer(server, "public3"); + + List<StreamClient> clTest_Pub_3_list = clientDao.getClientsByUidAndServer(server, "public3"); assertEquals(cl3.getId(), clTest_Pub_3_list.get(0).getId()); - - List<StreamClient> clTest_Fail_list = clientDao.getClientsByPublicSIDAndServer(null, "public3"); + + List<StreamClient> clTest_Fail_list = clientDao.getClientsByUidAndServer(null, "public3"); assertEquals(0, clTest_Fail_list.size()); - - List<StreamClient> clTest_PubAll_1_list = clientDao.getClientsByPublicSID("public1"); + + List<StreamClient> clTest_PubAll_1_list = clientDao.getClientsByUid("public1"); assertEquals(cl1.getId(), clTest_PubAll_1_list.get(0).getId()); - - List<StreamClient> clTest_PubAll_3_list = clientDao.getClientsByPublicSID("public3"); + + List<StreamClient> clTest_PubAll_3_list = clientDao.getClientsByUid("public3"); assertEquals(cl3.getId(), clTest_PubAll_3_list.get(0).getId()); - - List<StreamClient> clTest_FailAll_list = clientDao.getClientsByPublicSID("public4"); + + List<StreamClient> clTest_FailAll_list = clientDao.getClientsByUid("public4"); assertEquals(0, clTest_FailAll_list.size()); - + List<StreamClient> clientsByServerNull = clientDao.getClientsByServer(null); assertEquals(2, clientsByServerNull.size()); - + List<StreamClient> clientsByServer = clientDao.getClientsByServer(server); assertEquals(1, clientsByServer.size()); - + List<StreamClient> clientsAll = clientDao.getClients(); assertEquals(3, clientsAll.size()); - + //by userid List<StreamClient> clTest_User_1_list = clientDao.getClientsByUserId(null, 1L); assertEquals(cl1.getId(), clTest_User_1_list.get(0).getId()); - + List<StreamClient> clTest_User_3_list = clientDao.getClientsByUserId(server, 3L); assertEquals(cl3.getId(), clTest_User_3_list.get(0).getId()); - + List<StreamClient> clTest_UserFail_list = clientDao.getClientsByUserId(null, 3L); assertEquals(0, clTest_UserFail_list.size()); - + //by roomid List<StreamClient> clTest_Room_1_list = clientDao.getClientsByRoomId(1L); assertEquals(2, clTest_Room_1_list.size()); - + List<StreamClient> clTest_Room_3_list = clientDao.getClientsByRoomId(3L); assertEquals(cl3.getId(), clTest_Room_3_list.get(0).getId()); - + List<StreamClient> clTest_RoomFail_list = clientDao.getClientsByRoomId(2L); assertEquals(0, clTest_RoomFail_list.size()); - + //count all int countAll = clientDao.countClients(); assertEquals(3, countAll); - + //count by server int clTest_Count_1_list = clientDao.countClientsByServer(null); assertEquals(2, clTest_Count_1_list); - + int clTest_Count_3_list = clientDao.countClientsByServer(server); assertEquals(1, clTest_Count_3_list); - + //remove by id clientDao.delete(cl1); - + int clTest_Count_Delete_list = clientDao.countClientsByServer(null); assertEquals(1, clTest_Count_Delete_list); - - //remove by server and streamid - clientDao.removeClientByServerAndStreamId(null, "2"); - - clTest_Count_Delete_list = clientDao.countClientsByServer(null); - assertEquals(0, clTest_Count_Delete_list); - - clientDao.removeClientByServerAndStreamId(server, "3"); - + clTest_Count_Delete_list = clientDao.countClientsByServer(server); assertEquals(0, clTest_Count_Delete_list); - + //delete all clientDao.cleanAllClients(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java index 946e15c..3225508 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java @@ -18,6 +18,7 @@ */ package org.apache.openmeetings.test.session; +import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.junit.Assert.assertEquals; import java.util.List; @@ -27,7 +28,6 @@ import org.apache.openmeetings.db.dao.server.ServerDao; import org.apache.openmeetings.db.entity.room.StreamClient; import org.apache.openmeetings.db.entity.server.Server; import org.apache.openmeetings.test.AbstractJUnitDefaults; -import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import org.junit.Test; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; @@ -45,7 +45,7 @@ public class TestDbSessionGetRoomIds extends AbstractJUnitDefaults { @Test public void testDbSessionFunctions() { clientDao.cleanAllClients(); - + List<Server> serverList = serverDao.getActiveServers(); Server server = null; @@ -59,33 +59,30 @@ public class TestDbSessionGetRoomIds extends AbstractJUnitDefaults { } StreamClient cl1 = new StreamClient(); - cl1.setStreamid("1"); cl1.setServer(server); cl1.setUserId(1L); - cl1.setRoomId(1L); - cl1.setPublicSID("public1"); + cl1.setScope("1"); + cl1.setUid("public1"); clientDao.add(cl1); StreamClient cl2 = new StreamClient(); - cl2.setStreamid("2"); cl2.setServer(server); - cl2.setRoomId(1L); + cl2.setScope("1"); cl2.setUserId(2L); - cl2.setPublicSID("public2"); + cl2.setUid("public2"); clientDao.add(cl2); StreamClient cl3 = new StreamClient(); - cl3.setStreamid("3"); cl3.setServer(server); - cl3.setRoomId(3L); + cl3.setScope("3"); cl3.setUserId(3L); - cl3.setPublicSID("public3"); + cl3.setUid("public3"); clientDao.add(cl3); - + List<Long> roomids = clientDao.getRoomsIdsByServer(server); assertEquals(2, roomids.size()); - + //delete all clientDao.cleanAllClients(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java index 4a50e47..58024a3 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java @@ -18,74 +18,56 @@ */ package org.apache.openmeetings.test.session; +import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.junit.Assert.assertEquals; -import java.math.BigInteger; import java.util.Arrays; import java.util.Date; -import java.util.Random; +import java.util.UUID; import org.apache.openmeetings.core.session.store.HashMapStore; import org.apache.openmeetings.core.session.store.IClientPersistenceStore; import org.apache.openmeetings.db.entity.room.StreamClient; import org.apache.openmeetings.test.AbstractJUnitDefaults; -import org.apache.openmeetings.util.OpenmeetingsVariables; -import org.apache.openmeetings.util.crypt.CryptProvider; import org.junit.Test; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; public class TestHashMapSession extends AbstractJUnitDefaults { - - protected static final Logger log = Red5LoggerFactory.getLogger( - TestHashMapSession.class, OpenmeetingsVariables.webAppRootKey); - + protected static final Logger log = Red5LoggerFactory.getLogger(TestHashMapSession.class, webAppRootKey); + @Autowired private HashMapStore cache; - + @Test public void testHashMapSession() { - //make sure the cache is empty before starting the test cache.clear(); - - for (int i=0;i<20;i++) { - - String streamId = ""+i; - + + for (int i = 0; i < 20; i++) { + Long id = (long)i; + StreamClient rcm = new StreamClient(); + rcm.setId(id); rcm.setConnectedSince(new Date()); - rcm.setStreamid(streamId); rcm.setScope("scopeName"); - long random = System.currentTimeMillis() + new BigInteger(256, new Random()).longValue(); - - rcm.setPublicSID(CryptProvider.get().hash(String.valueOf(random).toString())); + + rcm.setUid(UUID.randomUUID().toString()); rcm.setUserport(0); rcm.setUserip("remoteAddress"); rcm.setSwfurl("swfUrl"); - rcm.setIsMod(false); - rcm.setCanDraw(false); + rcm.setMod(false); - if (cache.containsKey(null, streamId)) { - log.error("Tried to add an existing Client " + streamId); + if (cache.containsKey(id)) { + log.error("Tried to add an existing Client " + id); break; } - - cache.put(rcm.getStreamid(), rcm); - - cache.remove(null, streamId); - + cache.remove(id); } - String logString = cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE)); - - log.debug("######## \n\r "+ logString + " \n\r ########"); - assertEquals(0, cache.size()); - } - } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java index adcfce6..e9b707d 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java @@ -396,7 +396,7 @@ public class RoomWebService { try { Sessiondata sd = sessionDao.check(sid); if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(sd.getUserId()))) { - boolean result = userManager.kickUserByStreamId(sid, id); + boolean result = userManager.kickUsersByRoomId(id); return new ServiceResult(result ? 1L : 0L, "Kicked", Type.SUCCESS); } else { throw new ServiceException("Insufficient permissions"); //TODO code -26 http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java index 814f5d1..0979a11 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java @@ -26,8 +26,10 @@ import static org.apache.openmeetings.webservice.Constants.USER_SERVICE_NAME; import static org.apache.openmeetings.webservice.Constants.USER_SERVICE_PORT_NAME; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import javax.jws.WebMethod; import javax.jws.WebParam; @@ -44,8 +46,10 @@ import javax.ws.rs.core.MediaType; import org.apache.cxf.feature.Features; import org.apache.openmeetings.IApplication; +import org.apache.openmeetings.core.remote.ScopeApplicationAdapter; import org.apache.openmeetings.core.util.StrongPasswordValidator; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; +import org.apache.openmeetings.db.dao.server.ISessionManager; import org.apache.openmeetings.db.dao.server.SOAPLoginDao; import org.apache.openmeetings.db.dao.server.SessiondataDao; import org.apache.openmeetings.db.dao.user.IUserManager; @@ -55,6 +59,7 @@ import org.apache.openmeetings.db.dto.basic.ServiceResult.Type; import org.apache.openmeetings.db.dto.room.RoomOptionsDTO; import org.apache.openmeetings.db.dto.user.ExternalUserDTO; import org.apache.openmeetings.db.dto.user.UserDTO; +import org.apache.openmeetings.db.entity.room.StreamClient; import org.apache.openmeetings.db.entity.server.RemoteSessionObject; import org.apache.openmeetings.db.entity.server.Sessiondata; import org.apache.openmeetings.db.entity.user.Address; @@ -72,6 +77,7 @@ import org.apache.wicket.validation.IValidator; import org.apache.wicket.validation.Validatable; import org.apache.wicket.validation.ValidationError; import org.red5.logging.Red5LoggerFactory; +import org.red5.server.api.scope.IScope; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -92,13 +98,17 @@ public class UserWebService implements UserService { @Autowired private ConfigurationDao cfgDao; @Autowired - private IUserManager userManagement; + private IUserManager userManager; @Autowired private SOAPLoginDao soapLoginDao; @Autowired private UserDao userDao; @Autowired private SessiondataDao sessionDao; + @Autowired + private ISessionManager sessionManager; + @Autowired + private ScopeApplicationAdapter scopeApplicationAdapter; /* (non-Javadoc) * @see org.apache.openmeetings.webservice.cluster.UserService#login(java.lang.String, java.lang.String) @@ -187,7 +197,7 @@ public class UserWebService implements UserService { } throw new ServiceException(sb.toString()); } - Long userId = userManagement.registerUser(user.getLogin(), user.getPassword(), + Long userId = userManager.registerUser(user.getLogin(), user.getPassword(), user.getLastname(), user.getFirstname(), user.getAddress().getEmail(), new Date(), user.getAddress().getStreet(), user.getAddress().getAdditionalname(), user.getAddress().getFax(), user.getAddress().getZip(), user.getAddress().getCountry() , user.getAddress().getTown(), user.getLanguageId(), @@ -331,18 +341,51 @@ public class UserWebService implements UserService { return new ServiceResult(-1L, "Unknown error", Type.ERROR); } + /** + * Kick a user by its publicSID.<br/> + * <br/> + * <i>Note:</i> + * This method will not perform a call to the slave, cause this call can only be + * invoked from inside the conference room, that means all clients are on the + * same server, no matter if clustered or not. + * + * @param sid + * @param uid + * @return - true in case user have sufficient permissions, null otherwise + */ + private boolean kickUserByUid(String uid) { + StreamClient rcl = sessionManager.getClientByUid(uid, null); + + if (rcl == null) { + return true; + } + String scopeName = "hibernate"; + if (rcl.getRoomId() != null) { + scopeName = rcl.getRoomId().toString(); + } + IScope currentScope = scopeApplicationAdapter.getRoomScope(scopeName); + + Map<Integer, String> messageObj = new HashMap<>(); + messageObj.put(0, "kick"); + + scopeApplicationAdapter.sendMessageById(messageObj, rcl.getId(), currentScope); + scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope); + + return true; + } + /* (non-Javadoc) * @see org.apache.openmeetings.webservice.cluster.UserService#kick(java.lang.String, java.lang.String) */ @Override @WebMethod @POST - @Path("/kick/{publicsid}") - public ServiceResult kick(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="publicsid") @PathParam("publicsid") String publicSID) throws ServiceException { + @Path("/kick/{uid}") + public ServiceResult kick(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="uid") @PathParam("uid") String uid) throws ServiceException { try { Sessiondata sd = sessionDao.check(sid); if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(sd.getUserId()))) { - Boolean success = userManagement.kickUserByPublicSID(sid, publicSID); + boolean success = kickUserByUid(uid); return new ServiceResult(Boolean.TRUE.equals(success) ? 1L : 0L, Boolean.TRUE.equals(success) ? "deleted" : "not deleted", Type.SUCCESS); } else { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/117e8d6b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/UserService.java ---------------------------------------------------------------------- diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/UserService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/UserService.java index 6ccba83..ee26d20 100644 --- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/UserService.java +++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/UserService.java @@ -141,12 +141,10 @@ public interface UserService { * * @param sid * The SID from getSession - * @param publicSID - * the publicSID (you can get it from the call to get users in a - * room) + * @param uid the uid of the client * @return - <code>true</code> if user was kicked */ - ServiceResult kick(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="publicsid") @PathParam("publicsid") String publicSID) throws ServiceException; + ServiceResult kick(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="uid") @PathParam("uid") String uid) throws ServiceException; /** * Returns the count of users currently in the Room with given id
