Author: sebawagner Date: Fri Jan 18 05:02:33 2013 New Revision: 1435029 URL: http://svn.apache.org/viewvc?rev=1435029&view=rev Log: OPENMEETINGS-460 Move Session variables needed during sync process into IClient
Added: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/util/ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/util/SessionVariablesUtil.java Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/UserWebService.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/ldap/LdapLoginManagement.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ChatService.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/MainService.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/userdata/TestLogin.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/UserWebService.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/UserWebService.java?rev=1435029&r1=1435028&r2=1435029&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/UserWebService.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/UserWebService.java Fri Jan 18 05:02:33 2013 @@ -110,7 +110,7 @@ public class UserWebService { throws AxisFault { try { Object obj = userManagement.loginUser(SID, username, userpass, - null, false); + null, null, false); if (obj == null) { return new Long(-1); } Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java?rev=1435029&r1=1435028&r2=1435029&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java Fri Jan 18 05:02:33 2013 @@ -57,6 +57,7 @@ import org.apache.openmeetings.persisten import org.apache.openmeetings.persistence.beans.user.Userlevel; import org.apache.openmeetings.persistence.beans.user.Users; import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter; +import org.apache.openmeetings.remote.util.SessionVariablesUtil; import org.apache.openmeetings.templates.ResetPasswordTemplate; import org.apache.openmeetings.utils.DaoHelper; import org.apache.openmeetings.utils.crypt.ManageCryptStyle; @@ -64,6 +65,7 @@ import org.apache.openmeetings.utils.mai import org.apache.openmeetings.utils.math.CalendarPatterns; import org.red5.io.utils.ObjectMap; import org.red5.logging.Red5LoggerFactory; +import org.red5.server.api.IClient; import org.red5.server.api.scope.IScope; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -226,7 +228,7 @@ public class Usermanagement { * @return */ public Object loginUser(String SID, String userOrEmail, String userpass, - RoomClient currentClient, Boolean storePermanent) { + RoomClient currentClient, IClient client, Boolean storePermanent) { try { log.debug("Login user SID : " + SID + " Stored Permanent :" + storePermanent); @@ -275,6 +277,7 @@ public class Usermanagement { // If invoked via SOAP this is NULL if (currentClient != null) { currentClient.setUser_id(users.getUser_id()); + SessionVariablesUtil.setUserId(client, users.getUser_id()); } log.debug("loginUser " + users.getOrganisation_users()); Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/ldap/LdapLoginManagement.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/ldap/LdapLoginManagement.java?rev=1435029&r1=1435028&r2=1435029&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/ldap/LdapLoginManagement.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/ldap/LdapLoginManagement.java Fri Jan 18 05:02:33 2013 @@ -39,9 +39,11 @@ import org.apache.openmeetings.ldap.conf import org.apache.openmeetings.persistence.beans.adresses.States; import org.apache.openmeetings.persistence.beans.basic.LdapConfig; import org.apache.openmeetings.persistence.beans.user.Users; +import org.apache.openmeetings.remote.util.SessionVariablesUtil; import org.apache.openmeetings.utils.OmFileHelper; import org.apache.openmeetings.utils.crypt.ManageCryptStyle; import org.red5.logging.Red5LoggerFactory; +import org.red5.server.api.IClient; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -234,7 +236,7 @@ public class LdapLoginManagement { */ // ---------------------------------------------------------------------------------------- public Object doLdapLogin(String user, String passwd, - RoomClient currentClient, String SID, String domain) { + RoomClient currentClient, IClient client, String SID, String domain) { log.debug("LdapLoginmanagement.doLdapLogin"); // Retrieve Configuration Data @@ -500,6 +502,7 @@ public class LdapLoginManagement { // If invoked via SOAP this is NULL if (currentClient != null) { currentClient.setUser_id(userid); + SessionVariablesUtil.setUserId(client, userid); } // Update Session Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ChatService.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ChatService.java?rev=1435029&r1=1435028&r2=1435029&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ChatService.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ChatService.java Fri Jan 18 05:02:33 2013 @@ -37,8 +37,10 @@ import org.apache.openmeetings.data.user import org.apache.openmeetings.persistence.beans.rooms.Rooms; import org.apache.openmeetings.remote.red5.EmoticonsManager; import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter; +import org.apache.openmeetings.remote.util.SessionVariablesUtil; import org.apache.openmeetings.utils.stringhandlers.ChatString; import org.red5.logging.Red5LoggerFactory; +import org.red5.server.api.IClient; import org.red5.server.api.IConnection; import org.red5.server.api.Red5; import org.red5.server.api.service.IPendingServiceCall; @@ -181,12 +183,7 @@ public class ChatService implements IPen if (needModeration && Boolean.TRUE != rcl.getIsMod() && Boolean.TRUE != rcl.getIsSuperModerator()) { continue; } - log.debug("*..*idremote room_id: " + room_id); - log.debug("*..*my idstreamid room_id: " + rcl.getRoom_id()); - if (room_id.equals(rcl.getRoom_id())) { - ((IServiceCapableConnection) conn).invoke("sendVarsToMessageWithClient",new Object[] { hsm }, this); - log.debug("sending sendVarsToMessageWithClient to " + conn); - } + ((IServiceCapableConnection) conn).invoke("sendVarsToMessageWithClient",new Object[] { hsm }, this); } } } @@ -232,27 +229,22 @@ public class ChatService implements IPen for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } - RoomClient rcl = this.clientListManager.getClientByStreamId(conn.getClient().getId(), null); - - if (rcl == null) { - continue; - } - if (rcl.getIsAVClient()) { - continue; - } - if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) { - continue; - } - - if (rcl.getPublicSID().equals(publicSID) - || rcl.getPublicSID().equals( + if (SessionVariablesUtil.getPublicSID(client).equals(publicSID) + || SessionVariablesUtil.getPublicSID(client).equals( currentClient.getPublicSID())) { ((IServiceCapableConnection) conn).invoke( - "sendVarsToMessageWithClient", + "sendVarsToMessageWithClient", new Object[] { hsm }, this); } - } } } Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/MainService.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/MainService.java?rev=1435029&r1=1435028&r2=1435029&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/MainService.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/MainService.java Fri Jan 18 05:02:33 2013 @@ -56,6 +56,7 @@ import org.apache.openmeetings.persisten import org.apache.openmeetings.persistence.beans.user.Userdata; import org.apache.openmeetings.persistence.beans.user.Users; import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter; +import org.apache.openmeetings.remote.util.SessionVariablesUtil; import org.apache.openmeetings.rss.LoadAtomRssFeed; import org.red5.logging.Red5LoggerFactory; import org.red5.server.api.IConnection; @@ -237,6 +238,7 @@ public class MainService implements IPen o.setSessionData(sessionManagement.getSessionByHash(remoteHashId)); currentClient.setUser_id(o.getUser_id()); + SessionVariablesUtil.setUserId(current.getClient(), o.getUser_id()); if (currentClient.getUser_id() != null && currentClient.getUser_id() > 0) { @@ -329,14 +331,14 @@ public class MainService implements IPen } o = ldapLoginManagement.doLdapLogin(ldapLogin, - Userpass, currentClient, SID, + Userpass, currentClient, current.getClient(), SID, ldapConfig.getConfigFileName()); } else { currentClient = clientListManager.getClientByStreamId(current.getClient().getId(), null); o = userManagement.loginUser(SID, usernameOrEmail, Userpass, - currentClient, storePermanent); + currentClient, current.getClient(), storePermanent); } if (o == null) @@ -624,6 +626,7 @@ public class MainService implements IPen userObject.getPictureUrl()); currentClient.setUser_id(userId); + SessionVariablesUtil.setUserId(current.getClient(), userId); } else { user.setPictureuri(userObject.getPictureUrl()); @@ -631,6 +634,7 @@ public class MainService implements IPen userManagement.updateUser(user); currentClient.setUser_id(user.getUser_id()); + SessionVariablesUtil.setUserId(current.getClient(), user.getUser_id()); } } Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java?rev=1435029&r1=1435028&r2=1435029&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java Fri Jan 18 05:02:33 2013 @@ -53,6 +53,7 @@ import org.apache.openmeetings.persisten import org.apache.openmeetings.persistence.beans.user.Users; import org.apache.openmeetings.remote.FLVRecorderService; import org.apache.openmeetings.remote.WhiteBoardService; +import org.apache.openmeetings.remote.util.SessionVariablesUtil; import org.apache.openmeetings.utils.OmFileHelper; import org.apache.openmeetings.utils.math.CalendarPatterns; import org.red5.logging.Red5LoggerFactory; @@ -186,6 +187,8 @@ public class ScopeApplicationAdapter ext RoomClient rcm = this.clientListManager.addClientListItem(streamId, conn.getScope().getName(), conn.getRemotePort(), conn.getRemoteAddress(), swfURL, isAVClient); + + SessionVariablesUtil.initClient(conn.getClient(), isAVClient, rcm.getPublicSID()); // Log the User conferenceLogDao.addConferenceLog("ClientConnect", @@ -306,8 +309,13 @@ public class ScopeApplicationAdapter ext // Set this connection to be a RTMP-Java Client currentClient.setIsScreenClient(true); + + SessionVariablesUtil.setIsScreenClient(current.getClient()); + currentClient.setUser_id(Long.parseLong(map.get("user_id") .toString())); + SessionVariablesUtil.setUserId(current.getClient(), Long.parseLong(map.get("user_id") + .toString())); if (startStreaming) { currentClient.setStartStreaming(true); @@ -442,7 +450,6 @@ public class ScopeApplicationAdapter ext IConnection current = Red5.getConnectionLocal(); RoomClient currentClient = this.clientListManager .getClientByStreamId(current.getClient().getId(), null); - currentClient.setIsAVClient(false); clientListManager.updateClientByStreamId(current.getClient().getId(), currentClient, false); return currentClient.getPublicSID(); @@ -870,10 +877,7 @@ public class ScopeApplicationAdapter ext } else { log.debug("is this users still alive? :" + rcl); - // conn.ping(); IServiceCapableConnection iStream = (IServiceCapableConnection) conn; - // log.info("IServiceCapableConnection ID " - // + iStream.getClient().getId()); iStream.invoke(clientFunction, new Object[] { rc }, this); } @@ -886,9 +890,6 @@ public class ScopeApplicationAdapter ext if (clientFunction.equals("closeStream") && rcl.getIsRecording()) { log.debug("*** +++++++ ######## sendClientBroadcastNotifications Any Client is Recording - stop that"); - // StreamService.stopRecordingShowForClient(conn, - // currentClient, - // rcl.getRoomRecordingName(), false); this.flvRecorderService .stopRecordingShowForClient( conn, currentClient); @@ -951,17 +952,11 @@ public class ScopeApplicationAdapter ext RoomClient currentClient = this.clientListManager .getClientByStreamId(streamid, null); - // log.debug("[setNewCursorPosition]"+item); - @SuppressWarnings("rawtypes") Map cursor = (Map) item; cursor.put("streamPublishName", currentClient.getStreamPublishName()); - // log.debug("[setNewCursorPosition x]"+cursor.get("cursor_x")); - // log.debug("[setNewCursorPosition y]"+cursor.get("cursor_y")); - // log.debug("[setNewCursorPosition publicSID]"+cursor.get("publicSID")); - // Notify all users of the same Scope Collection<Set<IConnection>> conCollection = current.getScope() .getConnections(); @@ -969,29 +964,21 @@ public class ScopeApplicationAdapter ext for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { - if (conn.equals(current)) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } if (client.getId().equals( + current.getClient().getId())) { + // don't send back to same user continue; - } else { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient() - .getId(), null); - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - // log.debug("is this users still alive? :"+rcl); - // Check if the Client is in the same room - // and same domain - IServiceCapableConnection iStream = (IServiceCapableConnection) conn; - // log.info("IServiceCapableConnection ID " - // + iStream.getClient().getId()); - iStream.invoke("newRed5ScreenCursor", - new Object[] { cursor }, this); - // log.debug("send Notification to"); - } } + IServiceCapableConnection iStream = (IServiceCapableConnection) conn; + iStream.invoke("newRed5ScreenCursor", + new Object[] { cursor }, this); } } } @@ -1032,23 +1019,18 @@ public class ScopeApplicationAdapter ext for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { if (conn != null) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient().getId(), null); - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - log.debug("Send Flag to Client: " - + rcl.getUsername()); - if (conn instanceof IServiceCapableConnection) { - ((IServiceCapableConnection) conn).invoke( - "setNewModeratorByList", - new Object[] { currentMods }, this); - log.debug("sending setNewModeratorByList to " - + conn); + if (conn instanceof IServiceCapableConnection) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; } + ((IServiceCapableConnection) conn).invoke( + "setNewModeratorByList", + new Object[] { currentMods }, this); } } } @@ -1089,25 +1071,19 @@ public class ScopeApplicationAdapter ext for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { if (conn != null) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient().getId(), null); - if (rcl == null) { - continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - continue; - } else if (rcl.getIsAVClient()) { - continue; - } - - log.debug("Send Flag to Client: " - + rcl.getUsername()); if (conn instanceof IServiceCapableConnection) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } + ((IServiceCapableConnection) conn).invoke( - "setNewBroadCastingFlag", + "setNewBroadCastingFlag", new Object[] { currentClient }, this); - log.debug("sending setNewBroadCastingFlag to " - + conn); } } } @@ -1310,7 +1286,6 @@ public class ScopeApplicationAdapter ext currentClient.setAvsettings(avsettings); currentClient.setRoom_id(room_id); currentClient.setPublicSID(publicSID); - currentClient.setIsAVClient(true); currentClient.setVWidth(vWidth); currentClient.setVHeight(vHeight); currentClient.setInterviewPodId(interviewPodId); @@ -1328,19 +1303,17 @@ public class ScopeApplicationAdapter ext for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient() - .getId(), null); - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - ((IServiceCapableConnection) conn).invoke( - "sendVarsToMessageWithClient", - new Object[] { hsm }, this); + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; } + ((IServiceCapableConnection) conn).invoke( + "sendVarsToMessageWithClient", + new Object[] { hsm }, this); } } } @@ -1446,7 +1419,6 @@ public class ScopeApplicationAdapter ext RoomClient currentClient = this.clientListManager .getClientByStreamId(streamid, null); currentClient.setRoom_id(room_id); - currentClient.setIsAVClient(false); currentClient.setRoomEnter(new Date()); currentClient.setOrganization_id(organization_id); @@ -1690,7 +1662,6 @@ public class ScopeApplicationAdapter ext } - //Sync message to everybody syncMessageToCurrentScope("addNewUser", currentClient, false); @@ -1738,6 +1709,7 @@ public class ScopeApplicationAdapter ext currentClient.setUsername(username); currentClient.setUser_id(userId); + SessionVariablesUtil.setUserId(current.getClient(), userId); currentClient.setPicture_uri(picture_uri); currentClient.setUserObject(userId, username, firstname, lastname); @@ -1788,6 +1760,7 @@ public class ScopeApplicationAdapter ext currentClient.setUsername(username); currentClient.setUser_id(userId); + SessionVariablesUtil.setUserId(current.getClient(), userId); currentClient.setUserObject(userId, username, firstname, lastname); // Update Session Data @@ -1833,14 +1806,12 @@ public class ScopeApplicationAdapter ext log.debug("sendMessageByRoomAndDomain " + room_id); IScope globalScope = getContext().getGlobalScope(); - IScope webAppKeyScope = globalScope .getScope(OpenmeetingsVariables.webAppRootKey); log.debug("webAppKeyScope " + webAppKeyScope); IScope scopeHibernate = webAppKeyScope.getScope(room_id.toString()); - // IScope scopeHibernate = webAppKeyScope.getScope("hibernate"); if (scopeHibernate != null) { @@ -1849,25 +1820,18 @@ public class ScopeApplicationAdapter ext for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { if (conn != null) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient() - .getId(), null); - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - if (conn instanceof IServiceCapableConnection) { - // RoomClient rcl = - // this.clientListManager.getClientByStreamId(conn.getClient().getId()); - ((IServiceCapableConnection) conn).invoke( - "newMessageByRoomAndDomain", - new Object[] { message }, this); - - // log.debug("sending newMessageByRoomAndDomain to " - // + conn); + if (conn instanceof IServiceCapableConnection) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; } + ((IServiceCapableConnection) conn).invoke( + "newMessageByRoomAndDomain", + new Object[] { message }, this); } } } @@ -1886,15 +1850,10 @@ public class ScopeApplicationAdapter ext public synchronized List<RoomClient> getCurrentModeratorList() { try { - log.debug("*..*getCurrentModerator id: "); - IConnection current = Red5.getConnectionLocal(); RoomClient currentClient = this.clientListManager .getClientByStreamId(current.getClient().getId(), null); Long room_id = currentClient.getRoom_id(); - - // log.debug("Who is this moderator? "+currentMod); - return this.clientListManager.getCurrentModeratorByRoom(room_id); } catch (Exception err) { log.error("[getCurrentModerator]", err); @@ -1911,26 +1870,14 @@ public class ScopeApplicationAdapter ext public synchronized void sendVars(ArrayList whiteboardObjParam) { // try { - - // In previous version this has been always a Map, now its a List - // so I re-wrapp that class to be a Map again. - // swagner 13.02.2009 - // log.debug("*..*sendVars1: " + whiteboardObjParam); - // log.debug("*..*sendVars2: " + whiteboardObjParam.getClass()); - // log.debug("*..*sendVars3: " + - // whiteboardObjParam.getClass().getName()); - Map whiteboardObj = new HashMap(); int i = 0; for (Iterator iter = whiteboardObjParam.iterator(); iter.hasNext();) { Object obj = iter.next(); - // log.debug("obj"+obj); whiteboardObj.put(i, obj); i++; } - // Map whiteboardObj = (Map) whiteboardObjParam; - // Check if this User is the Mod: IConnection current = Red5.getConnectionLocal(); RoomClient currentClient = this.clientListManager @@ -1939,13 +1886,9 @@ public class ScopeApplicationAdapter ext if (currentClient == null) { return; } - Long room_id = currentClient.getRoom_id(); - String action = whiteboardObj.get(2).toString(); - // log.debug("***** sendVars: " + actionObject.get(0)); - if (action != null && action.equals("whiteboardObj")) { // Update Whiteboard Object List actionObject = (List) whiteboardObj.get(3); @@ -1971,29 +1914,22 @@ public class ScopeApplicationAdapter ext for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { - - if (conn.getClient().getId() - .equals(current.getClient().getId())) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events continue; - } - - RoomClient rcl = this.clientListManager - .getSyncClientByStreamId(conn.getClient() - .getId()); - - if (rcl == null) { + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } if (client.getId().equals( + current.getClient().getId())) { + // don't send back to same user continue; } - - if (!currentClient.getStreamid().equals( - rcl.getStreamid())) { - ((IServiceCapableConnection) conn) - .invoke("sendVarsToWhiteboard", - new Object[] { - (showDrawStatus ? currentClient - : null), - whiteboardObj }, this); - } + ((IServiceCapableConnection) conn) + .invoke("sendVarsToWhiteboard", + new Object[] { (showDrawStatus ? currentClient : null), whiteboardObj }, + this); } } } @@ -2078,13 +2014,6 @@ public class ScopeApplicationAdapter ext } - // This is no longer necessary - // boolean ismod = currentClient.getIsMod(); - - // log.debug("*..*ismod: " + ismod); - - // if (ismod) { - Map<String, Object> sendObject = new HashMap<String, Object>(); sendObject.put("id", whiteboardId); sendObject.put("param", whiteboardObjParam); @@ -2098,38 +2027,27 @@ public class ScopeApplicationAdapter ext for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { - if (conn.getClient().getId() - .equals(current.getClient().getId())) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events continue; - } - - RoomClient rcl = this.clientListManager - .getSyncClientByStreamId(conn.getClient() - .getId()); - - if (rcl == null) { + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } if (client.getId().equals( + current.getClient().getId())) { + // don't send back to same user continue; } - - if (!currentClient.getStreamid().equals( - rcl.getStreamid())) { - ((IServiceCapableConnection) conn).invoke( - "sendVarsToWhiteboardById", - new Object[] { - showDrawStatus ? currentClient - : null, sendObject }, + ((IServiceCapableConnection) conn).invoke( + "sendVarsToWhiteboardById", + new Object[] { showDrawStatus ? currentClient : null, sendObject }, this); - } } } } } - // return numberOfUsers; - // } else { - // // log.debug("*..*you are not allowed to send: "+ismod); - // return -1; - // } } catch (Exception err) { log.error("[sendVarsByWhiteboardId]", err); } @@ -2156,29 +2074,21 @@ public class ScopeApplicationAdapter ext for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient() - .getId(), null); - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - // log.debug("*..*idremote: " + - // rcl.getStreamid()); - // log.debug("*..*my idstreamid: " + - // currentClient.getStreamid()); - if (!currentClient.getStreamid().equals( - rcl.getStreamid())) { - ((IServiceCapableConnection) conn) - .invoke("sendVarsToModeratorGeneral", - new Object[] { vars }, - this); - // log.debug("sending sendVarsToModeratorGeneral to " - // + conn); - } + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } if (client.getId().equals( + current.getClient().getId())) { + // don't send back to same user + continue; } + ((IServiceCapableConnection) conn) + .invoke("sendVarsToModeratorGeneral", + new Object[] { vars },this); } } } @@ -2322,25 +2232,18 @@ public class ScopeApplicationAdapter ext for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient().getId(), null); - - if (rcl == null) { - // RoomClient can be null if there are network problems - continue; - } else if (!sendScreen && rcl.getIsScreenClient() != null && rcl - .getIsScreenClient()) { + IClient client = conn.getClient(); + if (!sendScreen && SessionVariablesUtil.isScreenClient(client)) { // screen sharing clients do not receive events continue; - } else if (rcl.getIsAVClient()) { + } else if (SessionVariablesUtil.isAVClient(client)) { // AVClients or potential AVClients do not receive events continue; - } else if (current.getClient().getId().equals( - conn.getClient().getId()) && !sendSelf) { + } else if (!sendSelf && client.getId().equals( + current.getClient().getId())) { //Do not send back to self continue; } - ((IServiceCapableConnection) conn).invoke( remoteMethodName, new Object[] { newMessage }, this); @@ -2418,24 +2321,10 @@ public class ScopeApplicationAdapter ext for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient() - .getId(), null); - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - // log.debug("### sendMessageById 1 ###"+clientId); - // log.debug("### sendMessageById 2 ###"+conn.getClient().getId()); - if (conn.getClient().getId().equals(clientId)) { - ((IServiceCapableConnection) conn).invoke( - "sendVarsToMessageWithClient", - new Object[] { hsm }, this); - // log.debug("sendingsendVarsToMessageWithClient ByID to " - // + conn); - } + if (conn.getClient().getId().equals(clientId)) { + ((IServiceCapableConnection) conn).invoke( + "sendVarsToMessageWithClient", + new Object[] { hsm }, this); } } } @@ -2462,8 +2351,6 @@ public class ScopeApplicationAdapter ext RoomClient currentClient = this.clientListManager .getClientByStreamId(current.getClient().getId(), null); - log.debug("### sendMessageWithClientById ###" + clientId); - HashMap<String, Object> hsm = new HashMap<String, Object>(); hsm.put("client", currentClient); hsm.put("message", newMessage); @@ -2473,27 +2360,10 @@ public class ScopeApplicationAdapter ext .getConnections(); for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { - if (conn != null) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient().getId(), null); - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - if (conn instanceof IServiceCapableConnection) { - // log.debug("### sendMessageWithClientById 1 ###"+clientId); - // log.debug("### sendMessageWithClientById 2 ###"+conn.getClient().getId()); - if (conn.getClient().getId().equals(clientId)) { - ((IServiceCapableConnection) conn).invoke( - "sendVarsToMessageWithClient", - new Object[] { hsm }, this); - // log.debug("sendingsendVarsToMessageWithClient ByID to " - // + conn); - } - } - } + if (conn.getClient().getId().equals(clientId)) { + ((IServiceCapableConnection) conn).invoke( + "sendVarsToMessageWithClient", + new Object[] { hsm }, this); } } } @@ -2561,28 +2431,20 @@ public class ScopeApplicationAdapter ext .getScope(scopeName).getConnections(); for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { - if (conn != null) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient() - .getId(), null); - if (rcl != null) { - if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - // log.debug("rcl "+rcl+" rcl.getUser_id(): "+rcl.getPublicSID()+" publicSID: "+publicSID+ - // " IS EQUAL? "+rcl.getPublicSID().equals(publicSID)); - if (rcl.getPublicSID().equals(publicSID)) { - // log.debug("IS EQUAL "); - ((IServiceCapableConnection) conn) - .invoke("newMessageByRoomAndDomain", - new Object[] { message }, - this); - log.debug("newMessageByRoomAndDomain RPC:newMessageByRoomAndDomain" - + message); - } - } - } + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } + + if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)) { + // log.debug("IS EQUAL "); + ((IServiceCapableConnection) conn) + .invoke("newMessageByRoomAndDomain", + new Object[] { message }, this); } } } @@ -2645,32 +2507,30 @@ public class ScopeApplicationAdapter ext for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { if (conn != null) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient().getId(), null); - if (rcl != null) { - if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - // log.debug("rcl "+rcl+" rcl.getUser_id(): "+rcl.getPublicSID()+" publicSID: "+publicSID+ - // " IS EQUAL? "+rcl.getPublicSID().equals(publicSID)); - if (rcl.getPublicSID().equals(publicSID)) { - // log.debug("IS EQUAL "); - ((IServiceCapableConnection) conn).invoke( - "newMessageByRoomAndDomain", - new Object[] { message }, this); - log.debug("sendMessageWithClientByPublicSID RPC:newMessageByRoomAndDomain" - + message); - } else if (user_id != 0 - && rcl.getUser_id() != null - && rcl.getUser_id().equals(user_id)) { - ((IServiceCapableConnection) conn).invoke( - "newMessageByRoomAndDomain", - new Object[] { message }, this); - log.debug("sendMessageWithClientByPublicSID RPC:newMessageByRoomAndDomain" - + message); - } - } + + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } + + if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)) { + // log.debug("IS EQUAL "); + ((IServiceCapableConnection) conn).invoke( + "newMessageByRoomAndDomain", + new Object[] { message }, this); + log.debug("sendMessageWithClientByPublicSID RPC:newMessageByRoomAndDomain" + + message); + } else if (user_id != 0 + && SessionVariablesUtil.getUserId(client).equals(user_id)) { + ((IServiceCapableConnection) conn).invoke( + "newMessageByRoomAndDomain", + new Object[] { message }, this); + log.debug("sendMessageWithClientByPublicSID RPC:newMessageByRoomAndDomain" + + message); } } } @@ -2681,6 +2541,12 @@ public class ScopeApplicationAdapter ext } } + /** + * @deprecated this method should be reworked to use a single SQL query in + * the cache to get any client in the current room that is + * recording instead of iterating through connections! + * @return + */ public synchronized Boolean getInterviewRecordingStatus() { try { @@ -2693,7 +2559,8 @@ public class ScopeApplicationAdapter ext if (conn != null) { RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient().getId(), null); + .getClientByStreamId(conn.getClient().getId(), + null); if (rcl.getIsRecording() != null && rcl.getIsRecording()) { @@ -2712,6 +2579,10 @@ public class ScopeApplicationAdapter ext return null; } + /** + * @deprecated @see {@link ScopeApplicationAdapter#getInterviewRecordingStatus()} + * @return + */ public synchronized Boolean startInterviewRecording() { try { @@ -2751,14 +2622,12 @@ public class ScopeApplicationAdapter ext for (IConnection conn : conset) { if (conn != null) { - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient().getId(), null); - - if (rcl == null) { - continue; - } else if (rcl.getIsAVClient()) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events continue; - } else if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) { + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events continue; } @@ -2797,26 +2666,14 @@ public class ScopeApplicationAdapter ext for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { if (conn != null) { - - RoomClient rcl = this.clientListManager - .getClientByStreamId(conn.getClient().getId(), null); - - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - - if (rcl.getStreamid() != null - && rcl.getStreamid().equals(streamid)) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + if (conn.getClient().getId().equals(streamid)) { ((IServiceCapableConnection) conn).invoke( "sendRemoteCursorEvent", new Object[] { messageObj }, this); - log.debug("sendRemoteCursorEvent messageObj" - + messageObj); } - } - } } } @@ -2885,12 +2742,17 @@ public class ScopeApplicationAdapter ext for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { if (conn != null) { + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } ((IServiceCapableConnection) conn).invoke( "interviewStatus", new Object[] { interviewStatus }, this); - log.debug("sendMessageWithClientByPublicSID interviewStatus" - + interviewStatus); - } } } @@ -3065,25 +2927,26 @@ public class ScopeApplicationAdapter ext for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { if (conn != null) { - RoomClient rcl = this.clientListManager.getClientByStreamId(conn.getClient().getId(), null); - if (rcl == null) { - // continue; - } else if (rcl.getIsScreenClient() != null - && rcl.getIsScreenClient()) { - // continue; - } else { - if (!streamid.equals(rcl.getStreamid())) { - // It is not needed to send back - // that event to the actuall - // Moderator - // as it will be already triggered - // in the result of this Function - // in the Client - if (conn instanceof IServiceCapableConnection) { - ((IServiceCapableConnection) conn).invoke("addNewUser", new Object[]{currentClient}, this); - ((IServiceCapableConnection) conn).invoke("newStream", new Object[]{currentClient}, this); - log.debug("sending setSipTransport to " + conn); - } + IClient client = conn.getClient(); + if (SessionVariablesUtil.isScreenClient(client)) { + // screen sharing clients do not receive events + continue; + } else if (SessionVariablesUtil.isAVClient(client)) { + // AVClients or potential AVClients do not receive events + continue; + } + + if (!client.getId().equals(current.getClient().getId())) { + // It is not needed to send back + // that event to the actual + // Moderator + // as it will be already triggered + // in the result of this Function + // in the Client + if (conn instanceof IServiceCapableConnection) { + ((IServiceCapableConnection) conn).invoke("addNewUser", new Object[]{currentClient}, this); + ((IServiceCapableConnection) conn).invoke("newStream", new Object[]{currentClient}, this); + log.debug("sending setSipTransport to " + conn); } } } Added: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/util/SessionVariablesUtil.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/util/SessionVariablesUtil.java?rev=1435029&view=auto ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/util/SessionVariablesUtil.java (added) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/util/SessionVariablesUtil.java Fri Jan 18 05:02:33 2013 @@ -0,0 +1,91 @@ +package org.apache.openmeetings.remote.util; + +import org.apache.openmeetings.OpenmeetingsVariables; +import org.red5.logging.Red5LoggerFactory; +import org.red5.server.api.IClient; +import org.slf4j.Logger; + +public class SessionVariablesUtil { + + private static final Logger log = Red5LoggerFactory.getLogger( + SessionVariablesUtil.class, OpenmeetingsVariables.webAppRootKey); + + private enum SESSION_VARIABLES { + isAVClient, // if the client connection is a audio-video only connection + isScreenClient, // if the client connection is from a Java Web-Start application + PUBLIC_SID, // the public SID of the client + USER_ID, // the userId of the user that is using this connection (if there is any) + } + + public static void initClient(IClient client, boolean isAVClient, String publicSID) { + client.setAttribute(SESSION_VARIABLES.isAVClient.toString(), isAVClient); + client.setAttribute(SESSION_VARIABLES.PUBLIC_SID.toString(), publicSID); + } + + public static boolean isAVClient(IClient client) { + try { + if (client.getAttribute(SESSION_VARIABLES.isAVClient.toString()) == null) { + throw new Exception("Connection has no publicSID client: "+client); + } + return (Boolean) client.getAttribute(SESSION_VARIABLES.isAVClient.toString()); + } catch (Exception err) { + log.error("[isAVClient]", err); + } + return false; + } + + public static String getPublicSID(IClient client) { + try { + if (client.getAttribute(SESSION_VARIABLES.PUBLIC_SID.toString()) == null) { + throw new Exception("Connection has no publicSID client: "+client); + } + return (String) client.getAttribute(SESSION_VARIABLES.PUBLIC_SID.toString()); + } catch (Exception err) { + log.error("[getPublicSID]", err); + } + return null; + } + + public static void setIsScreenClient(IClient client) { + client.setAttribute(SESSION_VARIABLES.isScreenClient.toString(), true); + } + + public static boolean isScreenClient(IClient client) { + try { + if (client + .getAttribute(SESSION_VARIABLES.isScreenClient.toString()) == null) { + return false; + } + if ((Boolean) client.getAttribute(SESSION_VARIABLES.isScreenClient + .toString())) { + return true; + } + } catch (Exception err) { + log.error("[isScreenClient]", err); + } + return false; + } + + public static void setUserId(IClient client, Long userId) { + client.setAttribute(SESSION_VARIABLES.USER_ID.toString(), userId); + } + + /** + * if there is no user id set, it will return Long.MIN_VALUE + * @param client + * @return + */ + public static Long getUserId(IClient client) { + try { + if (client.getAttribute(SESSION_VARIABLES.USER_ID.toString()) == null) { + return Long.MIN_VALUE; + } + return (Long) client.getAttribute(SESSION_VARIABLES.USER_ID + .toString()); + } catch (Exception err) { + log.error("[getUserId]", err); + } + return null; + } + +} Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/userdata/TestLogin.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/userdata/TestLogin.java?rev=1435029&r1=1435028&r2=1435029&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/userdata/TestLogin.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/userdata/TestLogin.java Fri Jan 18 05:02:33 2013 @@ -40,7 +40,7 @@ public class TestLogin extends AbstractO public void testTestLogin(){ Sessiondata sessionData = mService.getsessiondata(); - Users us = (Users) userManagement.loginUser(sessionData.getSession_id(), username, userpass, null, false); + Users us = (Users) userManagement.loginUser(sessionData.getSession_id(), username, userpass, null, null, false); assertNotNull("User is unable to login", us); Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java?rev=1435029&r1=1435028&r2=1435029&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java Fri Jan 18 05:02:33 2013 @@ -84,7 +84,7 @@ public class WebSession extends Abstract Sessiondata sessData = Application.getBean(Sessionmanagement.class).startsession(); SID = sessData.getSession_id(); Object u = Application.getBean(Usermanagement.class).loginUser(SID, login, password, - null, false); + null, null, false); if (u instanceof Users) { Users user = (Users)u;