Author: sebawagner
Date: Fri Nov  2 18:21:52 2012
New Revision: 1405087

URL: http://svn.apache.org/viewvc?rev=1405087&view=rev
Log:
OPENMEETINGS-460 Enhance session object to store some meta information about 
the Session object / create a Container object with server side session data to 
separated the ClientSessions in locally ones and ones that are handled via the 
slaves/other servers

Added:
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientListHashMapStore.java
      - copied, changed from r1404957, 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ClientListHashMapStore.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSession.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSessionUtil.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/IClientList.java
      - copied, changed from r1404957, 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/IClientList.java
Removed:
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ClientListHashMapStore.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/IClientList.java
Modified:
    
incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/RoomWebService.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/RoomClient.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/Sessionmanagement.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDao.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/Roommanagement.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/Usermanagement.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ChatService.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceLibrary.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/FLVRecorderService.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/MainService.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/PollService.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/WhiteBoardService.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/EmoticonsManager.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/ScreenController.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/poll/TestClientListManager.java

Modified: 
incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml
 Fri Nov  2 18:21:52 2012
@@ -51,7 +51,7 @@
        <!-- New Class for the Streaming Handlers -->
        <bean id="web.handler"
                
class="org.apache.openmeetings.remote.red5.ScopeApplicationAdapter" />
-       <bean id="openmeetings.ClientListManager" 
class="org.apache.openmeetings.remote.red5.ClientListHashMapStore" />
+       <bean id="openmeetings.ClientListManager" 
class="org.apache.openmeetings.conference.room.ClientListHashMapStore" />
        <bean id="openmeetings.EmoticonsManager" 
class="org.apache.openmeetings.remote.red5.EmoticonsManager" />
        <bean id="openmeetings.WhiteBoardObjectListManager"
                
class="org.apache.openmeetings.remote.red5.WhiteBoardObjectListManager" />

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/RoomWebService.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/RoomWebService.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/RoomWebService.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/axis/services/RoomWebService.java
 Fri Nov  2 18:21:52 2012
@@ -28,6 +28,7 @@ import java.util.Map;
 
 import org.apache.axis2.AxisFault;
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
 import org.apache.openmeetings.data.basic.Sessionmanagement;
@@ -46,7 +47,6 @@ import org.apache.openmeetings.persisten
 import org.apache.openmeetings.persistence.beans.rooms.Rooms;
 import org.apache.openmeetings.persistence.beans.user.Users;
 import org.apache.openmeetings.remote.ConferenceService;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.utils.math.CalendarPatterns;
 import org.red5.logging.Red5LoggerFactory;

Copied: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientListHashMapStore.java
 (from r1404957, 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ClientListHashMapStore.java)
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientListHashMapStore.java?p2=incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientListHashMapStore.java&p1=incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ClientListHashMapStore.java&r1=1404957&r2=1405087&rev=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ClientListHashMapStore.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientListHashMapStore.java
 Fri Nov  2 18:21:52 2012
@@ -16,28 +16,34 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.remote.red5;
+package org.apache.openmeetings.conference.room;
 
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
-import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.beans.basic.SearchResult;
 import org.apache.openmeetings.utils.crypt.ManageCryptStyle;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
+/**
+ * User an in-memory HashMap to store the current sessions.
+ * 
+ * FIXME: Add multiple lists to enhance performance, see FIXME tagged methods
+ * 
+ * @author sebawagner
+ * 
+ */
 public class ClientListHashMapStore implements IClientList {
 
-       private static HashMap<String, RoomClient> clientList = new 
HashMap<String, RoomClient>();
+       private static HashMap<String, ClientSession> clientList = new 
HashMap<String, ClientSession>();
 
        private static final Logger log = Red5LoggerFactory.getLogger(
                        ClientListHashMapStore.class, 
OpenmeetingsVariables.webAppRootKey);
@@ -45,12 +51,12 @@ public class ClientListHashMapStore impl
        @Autowired
        private ManageCryptStyle manageCryptStyle;
        
-       /**
-        * Get current clients and extends the room client with its potential 
-        * audio/video client and settings
+       /*
+        * (non-Javadoc)
         * 
-        * @param room_id
-        * @return
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getRoomClients(java.lang
+        * .Long)
         */
        public List<RoomClient> getRoomClients(Long room_id) {
                try {
@@ -61,6 +67,14 @@ public class ClientListHashMapStore impl
                return null;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#addClientListItem(java
+        * .lang.String, java.lang.String, java.lang.Integer, java.lang.String,
+        * java.lang.String, boolean)
+        */
        public synchronized RoomClient addClientListItem(String streamId,
                        String scopeName, Integer remotePort, String 
remoteAddress,
                        String swfUrl, boolean isAVClient) {
@@ -87,7 +101,9 @@ public class ClientListHashMapStore impl
                                return null;
                        }
 
-                       clientList.put(rcm.getStreamid(), rcm);
+                       clientList.put(
+                                       
ClientSessionUtil.getClientSessionKey(null,
+                                                       rcm.getStreamid()), new 
ClientSession(null, rcm));
 
                        return rcm;
                } catch (Exception err) {
@@ -96,41 +112,61 @@ public class ClientListHashMapStore impl
                return null;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.apache.openmeetings.remote.red5.IClientList#getAllClients()
+        */
        public synchronized Collection<RoomClient> getAllClients() {
-               return clientList.values();
+               // only locally clients interesting
+               List<RoomClient> rclList = new ArrayList<RoomClient>();
+               for (ClientSession cSession : clientList.values()) {
+                       if (cSession.getServer() == null) {
+                               rclList.add(cSession.getRoomClient());
+                       }
+               }
+               return rclList;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getClientByStreamId(java
+        * .lang.String)
+        */
        public synchronized RoomClient getClientByStreamId(String streamId) {
                try {
-                       if (!clientList.containsKey(streamId)) {
+                       String uniqueKey = 
ClientSessionUtil.getClientSessionKey(null,
+                                       streamId);
+                       if (!clientList.containsKey(uniqueKey)) {
                                log.debug("Tried to get a non existing Client " 
+ streamId);
                                return null;
                        }
-                       return clientList.get(streamId);
+                       return clientList.get(uniqueKey).getRoomClient();
                } catch (Exception err) {
                        log.error("[getClientByStreamId]", err);
                }
                return null;
        }
        
-       /**
-        * Additionally checks if the client receives sync events
-        * 
-        * Sync events will no be broadcasted to:
-        * - Screensharing users
-        * - Audio/Video connections only
+       /*
+        * (non-Javadoc)
         * 
-        * @param streamId
-        * @return
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getSyncClientByStreamId
+        * (java.lang.String)
         */
        public synchronized RoomClient getSyncClientByStreamId(String streamId) 
{
                try {
-                       if (!clientList.containsKey(streamId)) {
+                       String uniqueKey = 
ClientSessionUtil.getClientSessionKey(null,
+                                       streamId);
+                       if (!clientList.containsKey(uniqueKey)) {
                                log.debug("Tried to get a non existing Client " 
+ streamId);
                                return null;
                        }
                        
-                       RoomClient rcl = clientList.get(streamId);
+                       RoomClient rcl = 
clientList.get(uniqueKey).getRoomClient();
                        
                        if (rcl == null) {
                                return null;
@@ -140,18 +176,25 @@ public class ClientListHashMapStore impl
                                return null;
                        }
                        
-                       return clientList.get(streamId);
+                       return clientList.get(uniqueKey).getRoomClient();
                } catch (Exception err) {
                        log.error("[getClientByStreamId]", err);
                }
                return null;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * org.apache.openmeetings.remote.red5.IClientList#getClientByPublicSID(
+        * java.lang.String, boolean)
+        */
        public RoomClient getClientByPublicSID(String publicSID, boolean 
isAVClient) {
                try {
-                       for (Iterator<String> iter = 
clientList.keySet().iterator(); iter
-                                       .hasNext();) {
-                               RoomClient rcl = clientList.get(iter.next());
+                       for (ClientSession cSession : clientList.values()) {
+
+                               RoomClient rcl = cSession.getRoomClient();
                                
                                if (!rcl.getPublicSID().equals(publicSID)) {
                                        continue;
@@ -168,13 +211,18 @@ public class ClientListHashMapStore impl
                return null;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getClientByUserId(java
+        * .lang.Long)
+        */
        public synchronized RoomClient getClientByUserId(Long userId) {
                try {
-                       for (Iterator<String> iter = 
clientList.keySet().iterator(); iter
-                                       .hasNext();) {
-                               RoomClient rcl = clientList.get(iter.next());
-                               if (rcl.getUser_id().equals(userId)) {
-                                       return rcl;
+                       for (ClientSession cSession : clientList.values()) {
+                               if 
(cSession.getRoomClient().getUser_id().equals(userId)) {
+                                       return cSession.getRoomClient();
                                }
                        }
                } catch (Exception err) {
@@ -183,12 +231,12 @@ public class ClientListHashMapStore impl
                return null;
        }
        
-       /**
-        * Update the session object of the audio/video-connection and 
additionally swap the 
-        * values to the session object of the user that holds the full session 
object
-        * @param streamId
-        * @param rcm
-        * @return
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#updateAVClientByStreamId
+        * (java.lang.String, 
org.apache.openmeetings.conference.room.RoomClient)
         */
        public synchronized Boolean updateAVClientByStreamId(String streamId,
                        RoomClient rcm) {
@@ -203,8 +251,12 @@ public class ClientListHashMapStore impl
                                rclUsual.setVWidth(rcm.getVWidth());
                                rclUsual.setVX(rcm.getVX());
                                rclUsual.setVY(rcm.getVY());
-                               if 
(clientList.containsKey(rclUsual.getStreamid())) {
-                                       clientList.put(rclUsual.getStreamid(), 
rclUsual);
+                               String uniqueKey = 
ClientSessionUtil.getClientSessionKey(null,
+                                               rclUsual.getStreamid());
+                               ClientSession cSession = 
clientList.get(uniqueKey);
+                               if (cSession != null) {
+                                       cSession.setRoomClient(rclUsual);
+                                       clientList.put(uniqueKey, cSession);
                                } else {
                                         log.debug("Tried to update a non 
existing Client " + rclUsual.getStreamid());
                                }
@@ -217,11 +269,22 @@ public class ClientListHashMapStore impl
                return null;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#updateClientByStreamId
+        * (java.lang.String, 
org.apache.openmeetings.conference.room.RoomClient)
+        */
        public synchronized Boolean updateClientByStreamId(String streamId,
                        RoomClient rcm) {
                try {
-                       if (clientList.containsKey(streamId)) {
-                               clientList.put(streamId, rcm);
+                       String uniqueKey = 
ClientSessionUtil.getClientSessionKey(null,
+                                       streamId);
+                       ClientSession cSession = clientList.get(uniqueKey);
+                       if (cSession != null) {
+                               cSession.setRoomClient(rcm);
+                               clientList.put(uniqueKey, cSession);
                                return true;
                        } else {
                                log.debug("Tried to update a non existing 
Client " + streamId);
@@ -233,11 +296,19 @@ public class ClientListHashMapStore impl
                return null;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#removeClient(java.lang
+        * .String)
+        */
        public synchronized Boolean removeClient(String streamId) {
                try {
-                       if (clientList.containsKey(streamId)) {
-                               clientList.remove(streamId);
-                               // log.debug(":: removeClient 
::"+clientList.size());
+                       String uniqueKey = 
ClientSessionUtil.getClientSessionKey(null,
+                                       streamId);
+                       if (clientList.containsKey(uniqueKey)) {
+                               clientList.remove(uniqueKey);
                                return true;
                        } else {
                                log.debug("Tried to remove a non existing 
Client " + streamId);
@@ -249,22 +320,22 @@ public class ClientListHashMapStore impl
                return null;
        }
 
-       /**
-        * Get all ClientList Objects of that room and domain This Function is
-        * needed cause it is invoked internally AFTER the current user has been
-        * already removed from the ClientList to see if the Room is empty 
again and
-        * the PollList can be removed
+       /*
+        * (non-Javadoc)
         * 
-        * @return
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getClientListByRoom(java
+        * .lang.Long)
         */
        public synchronized List<RoomClient> getClientListByRoom(
                        Long room_id) {
                List<RoomClient> roomClientList = new ArrayList<RoomClient>();
                try {
-                       for (Iterator<String> iter = 
clientList.keySet().iterator(); iter
-                                       .hasNext();) {
-                               String key = iter.next();
-                               RoomClient rcl = clientList.get(key);
+
+                       // FIXME: Enhance performance by using multiple lists
+                       for (ClientSession cSession : clientList.values()) {
+
+                               RoomClient rcl = cSession.getRoomClient();
                                
                                // client initialized and same room
                                if (rcl.getRoom_id() == null || 
!room_id.equals(rcl.getRoom_id())) {
@@ -289,15 +360,20 @@ public class ClientListHashMapStore impl
                return roomClientList;
        }
        
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getClientListByRoomAll
+        * (java.lang.Long)
+        */
        public synchronized List<RoomClient> getClientListByRoomAll(
                        Long room_id) {
                List<RoomClient> roomClientList = new ArrayList<RoomClient>();
                try {
-                       for (Iterator<String> iter = 
clientList.keySet().iterator(); iter
-                                       .hasNext();) {
-                               String key = iter.next();
-                               // log.debug("getClientList key: "+key);
-                               RoomClient rcl = clientList.get(key);
+                       // FIXME: Enhance performance by using multiple lists
+                       for (ClientSession cSession : clientList.values()) {
+                               RoomClient rcl = cSession.getRoomClient();
 
                                if (rcl.getRoom_id() != null
                                                && 
rcl.getRoom_id().equals(room_id)) {
@@ -311,22 +387,20 @@ public class ClientListHashMapStore impl
                return roomClientList;
        }
 
-       /**
-        * get the current Moderator in this room
+       /*
+        * (non-Javadoc)
         * 
-        * @param roomname
-        * @return
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getCurrentModeratorByRoom
+        * (java.lang.Long)
         */
        public synchronized List<RoomClient> getCurrentModeratorByRoom(Long 
room_id) {
 
                List<RoomClient> rclList = new LinkedList<RoomClient>();
-               for (Iterator<String> iter = clientList.keySet().iterator(); 
iter
-                               .hasNext();) {
-                       String key = iter.next();
-                       RoomClient rcl = clientList.get(key);
-                       //
-                       log.debug("*..*unsetModerator ClientList key: " + 
rcl.getStreamid());
-                       //
+               // FIXME: Enhance performance by using multiple lists
+               for (ClientSession cSession : clientList.values()) {
+                       // log.debug("getClientList key: "+key);
+                       RoomClient rcl = cSession.getRoomClient();
                        // Check if the Client is in the same room
                        if (room_id != null && room_id.equals(rcl.getRoom_id())
                                        && rcl.getIsMod()) {
@@ -338,6 +412,13 @@ public class ClientListHashMapStore impl
                return rclList;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getListByStartAndMax(int,
+        * int, java.lang.String, boolean)
+        */
        public synchronized SearchResult<RoomClient> getListByStartAndMax(int 
start, int max,
                        String orderby, boolean asc) {
                SearchResult<RoomClient> sResult = new 
SearchResult<RoomClient>();
@@ -346,11 +427,9 @@ public class ClientListHashMapStore impl
                LinkedList<RoomClient> myList = new LinkedList<RoomClient>();
 
                int i = 0;
-               Iterator<String> iter = clientList.keySet().iterator();
-               while (iter.hasNext()) {
-                       String key = iter.next();
+               for (ClientSession cSession : clientList.values()) {
                        if (i >= start) {
-                               myList.add(clientList.get(key));
+                               myList.add(cSession.getRoomClient());
                        }
                        if (i > max) {
                                break;
@@ -362,6 +441,11 @@ public class ClientListHashMapStore impl
                return sResult;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.apache.openmeetings.remote.red5.IClientList#removeAllClients()
+        */
        public synchronized void removeAllClients() {
                try {
                        clientList.clear();
@@ -370,7 +454,12 @@ public class ClientListHashMapStore impl
                }
        }
 
-
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getRecordingCount(long)
+        */
        public long getRecordingCount(long roomId) {
                List<RoomClient> currentClients = 
this.getClientListByRoom(roomId);
                int numberOfRecordingUsers = 0;
@@ -382,6 +471,12 @@ public class ClientListHashMapStore impl
                return numberOfRecordingUsers;
        }
 
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.remote.red5.IClientList#getPublisingCount(long)
+        */
        public long getPublisingCount(long roomId) {
                List<RoomClient> currentClients = 
this.getClientListByRoom(roomId);
                int numberOfPublishingUsers = 0;

Added: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSession.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSession.java?rev=1405087&view=auto
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSession.java
 (added)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSession.java
 Fri Nov  2 18:21:52 2012
@@ -0,0 +1,51 @@
+package org.apache.openmeetings.conference.room;
+
+import org.apache.openmeetings.persistence.beans.basic.Server;
+
+/**
+ * 
+ * Session object, is never populated to the clients, stays on the server
+ * 
+ * So in this object you can store meta information that the client does not
+ * need to know. This is handy because the RoomClient object otherwise gets too
+ * big.
+ * 
+ * @author sebawagner
+ * 
+ */
+public class ClientSession {
+
+       /**
+        * if null, the connection is handled on the master, otherwise the
+        * connection is handled via a slave of the cluster
+        */
+       private Server server;
+
+       private RoomClient roomClient;
+
+       public ClientSession(Server server, RoomClient roomClient) {
+               super();
+               this.server = server;
+               this.roomClient = roomClient;
+       }
+
+       /**
+        * @see ClientSession#server
+        */
+       public Server getServer() {
+               return server;
+       }
+
+       public void setServer(Server server) {
+               this.server = server;
+       }
+
+       public RoomClient getRoomClient() {
+               return roomClient;
+       }
+
+       public void setRoomClient(RoomClient roomClient) {
+               this.roomClient = roomClient;
+       }
+
+}

Added: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSessionUtil.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSessionUtil.java?rev=1405087&view=auto
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSessionUtil.java
 (added)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/ClientSessionUtil.java
 Fri Nov  2 18:21:52 2012
@@ -0,0 +1,28 @@
+package org.apache.openmeetings.conference.room;
+
+import org.apache.openmeetings.persistence.beans.basic.Server;
+
+/**
+ * Utils generate keys and hashs for the {@link ClientSession} and
+ * {@link RoomClient}
+ * 
+ * @author swagner
+ * 
+ */
+public class ClientSessionUtil {
+
+       /**
+        * produce a unique key based on the stream-id and server
+        * 
+        * @param server
+        * @param streamId
+        * @return
+        */
+       public static String getClientSessionKey(Server server, String 
streamId) {
+               if (server == null) {
+                       return "__" + streamId;
+               }
+               return "_" + server.getId() + "_" + streamId;
+       }
+
+}

Copied: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/IClientList.java
 (from r1404957, 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/IClientList.java)
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/IClientList.java?p2=incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/IClientList.java&p1=incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/IClientList.java&r1=1404957&r2=1405087&rev=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/IClientList.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/IClientList.java
 Fri Nov  2 18:21:52 2012
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.remote.red5;
+package org.apache.openmeetings.conference.room;
 
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.beans.basic.SearchResult;
 
 public interface IClientList {
@@ -41,6 +40,12 @@ public interface IClientList {
 
        public abstract Collection<RoomClient> getAllClients();
 
+       /**
+        * Get a client by its streamId
+        * 
+        * @param streamId
+        * @return
+        */
        public abstract RoomClient getClientByStreamId(String streamId);
 
        /**
@@ -73,6 +78,12 @@ public interface IClientList {
        public abstract Boolean updateClientByStreamId(String streamId,
                        RoomClient rcm);
 
+       /**
+        * Remove a client from the session store
+        * 
+        * @param streamId
+        * @return
+        */
        public abstract Boolean removeClient(String streamId);
 
        /**

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/RoomClient.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/RoomClient.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/RoomClient.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/conference/room/RoomClient.java
 Fri Nov  2 18:21:52 2012
@@ -104,6 +104,7 @@ public class RoomClient implements Seria
        /**
         * client IP
         */
+       // FIXME: Move to {@link ClientSession}
        private String userip;
        /**
         * client Port
@@ -144,6 +145,7 @@ public class RoomClient implements Seria
         * n - no av only static Image
         */
        private String avsettings = "";
+       // FIXME: Move to {@link ClientSession}
        private String swfurl;
        private Boolean isRecording = false;
        private String roomRecordingName;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/Sessionmanagement.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/Sessionmanagement.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/Sessionmanagement.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/Sessionmanagement.java
 Fri Nov  2 18:21:52 2012
@@ -32,9 +32,9 @@ import javax.persistence.criteria.Predic
 import javax.persistence.criteria.Root;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.persistence.beans.basic.Sessiondata;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.utils.crypt.ManageCryptStyle;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDao.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDao.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDao.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/ServerDao.java
 Fri Nov  2 18:21:52 2012
@@ -281,5 +281,5 @@ public class ServerDao implements IDataP
 
                return -1L;
        }
-
+       
 }

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/Roommanagement.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/Roommanagement.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/Roommanagement.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/Roommanagement.java
 Fri Nov  2 18:21:52 2012
@@ -32,6 +32,7 @@ import javax.persistence.criteria.Criter
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
 import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
 import org.apache.openmeetings.data.beans.basic.SearchResult;
@@ -45,7 +46,6 @@ import org.apache.openmeetings.persisten
 import org.apache.openmeetings.persistence.beans.rooms.Rooms_Organisation;
 import org.apache.openmeetings.persistence.beans.sip.OpenXGReturnObject;
 import org.apache.openmeetings.persistence.beans.user.Users;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.sip.api.impl.asterisk.AsteriskDbSipClient;
 import org.apache.openmeetings.sip.api.request.SIPCreateConferenceRequest;
 import org.apache.openmeetings.sip.api.result.SipCreateConferenceRequestResult;

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=1405087&r1=1405086&r2=1405087&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 Nov  2 18:21:52 2012
@@ -38,6 +38,7 @@ import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
 import org.apache.openmeetings.data.basic.Fieldmanagment;
@@ -58,7 +59,6 @@ import org.apache.openmeetings.persisten
 import org.apache.openmeetings.persistence.beans.user.Userdata;
 import org.apache.openmeetings.persistence.beans.user.Userlevel;
 import org.apache.openmeetings.persistence.beans.user.Users;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.sip.xmlrpc.OpenXGHttpClient;
 import org.apache.openmeetings.templates.ResetPasswordTemplate;

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=1405087&r1=1405086&r2=1405087&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 Nov  2 18:21:52 2012
@@ -30,9 +30,9 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.remote.red5.EmoticonsManager;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.utils.stringhandlers.ChatString;
 import org.red5.logging.Red5LoggerFactory;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceLibrary.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceLibrary.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceLibrary.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceLibrary.java
 Fri Nov  2 18:21:52 2012
@@ -28,6 +28,7 @@ import java.util.Set;
 
 import org.apache.commons.transaction.util.FileHelper;
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.conference.whiteboard.WhiteboardManagement;
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
@@ -41,7 +42,6 @@ import org.apache.openmeetings.documents
 import org.apache.openmeetings.documents.LibraryWmlLoader;
 import org.apache.openmeetings.documents.LoadLibraryPresentation;
 import org.apache.openmeetings.persistence.beans.files.FileExplorerItem;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.utils.OmFileHelper;
 import org.apache.openmeetings.utils.crypt.MD5;
 import org.red5.logging.Red5LoggerFactory;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java
 Fri Nov  2 18:21:52 2012
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
 import org.apache.openmeetings.data.basic.Sessionmanagement;
@@ -44,7 +45,6 @@ import org.apache.openmeetings.persisten
 import org.apache.openmeetings.persistence.beans.rooms.Rooms;
 import org.apache.openmeetings.persistence.beans.rooms.Rooms_Organisation;
 import org.apache.openmeetings.persistence.beans.user.Users;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.utils.math.CalendarPatterns;
 import org.apache.openmeetings.utils.math.TimezoneUtil;
 import org.red5.logging.Red5LoggerFactory;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/FLVRecorderService.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/FLVRecorderService.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/FLVRecorderService.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/FLVRecorderService.java
 Fri Nov  2 18:21:52 2012
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
 import org.apache.openmeetings.data.basic.Sessionmanagement;
@@ -47,7 +48,6 @@ import org.apache.openmeetings.data.user
 import org.apache.openmeetings.persistence.beans.flvrecord.FlvRecording;
 import org.apache.openmeetings.persistence.beans.flvrecord.FlvRecordingLog;
 import 
org.apache.openmeetings.persistence.beans.flvrecord.FlvRecordingMetaData;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.utils.OmFileHelper;
 import org.apache.openmeetings.utils.math.CalendarPatterns;

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=1405087&r1=1405086&r2=1405087&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 Nov  2 18:21:52 2012
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
 import org.apache.openmeetings.data.basic.Navimanagement;
@@ -54,7 +55,6 @@ import org.apache.openmeetings.persisten
 import org.apache.openmeetings.persistence.beans.basic.Sessiondata;
 import org.apache.openmeetings.persistence.beans.user.Userdata;
 import org.apache.openmeetings.persistence.beans.user.Users;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.rss.LoadAtomRssFeed;
 import org.red5.logging.Red5LoggerFactory;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/PollService.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/PollService.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/PollService.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/PollService.java
 Fri Nov  2 18:21:52 2012
@@ -24,13 +24,13 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.conference.PollManagement;
 import org.apache.openmeetings.data.user.Usermanagement;
 import org.apache.openmeetings.persistence.beans.poll.PollType;
 import org.apache.openmeetings.persistence.beans.poll.RoomPoll;
 import org.apache.openmeetings.persistence.beans.poll.RoomPollAnswers;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
 import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.api.IConnection;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java
 Fri Nov  2 18:21:52 2012
@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
 import org.apache.openmeetings.data.basic.Fieldmanagment;
@@ -57,7 +58,6 @@ import org.apache.openmeetings.persisten
 import org.apache.openmeetings.persistence.beans.user.Salutations;
 import org.apache.openmeetings.persistence.beans.user.UserContacts;
 import org.apache.openmeetings.persistence.beans.user.Users;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.templates.RequestContactConfirmTemplate;
 import org.apache.openmeetings.templates.RequestContactTemplate;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/WhiteBoardService.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/WhiteBoardService.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/WhiteBoardService.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/WhiteBoardService.java
 Fri Nov  2 18:21:52 2012
@@ -29,6 +29,7 @@ import java.util.LinkedList;
 import java.util.Map;
 
 import org.apache.commons.collections.ComparatorUtils;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.conference.whiteboard.Cliparts;
 import org.apache.openmeetings.conference.whiteboard.WhiteboardObject;
@@ -37,7 +38,6 @@ import org.apache.openmeetings.conferenc
 import org.apache.openmeetings.data.basic.AuthLevelmanagement;
 import org.apache.openmeetings.data.basic.Sessionmanagement;
 import org.apache.openmeetings.data.user.Usermanagement;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.remote.red5.WhiteBoardObjectListManager;
 import org.apache.openmeetings.remote.red5.WhiteBoardObjectListManagerById;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/EmoticonsManager.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/EmoticonsManager.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/EmoticonsManager.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/EmoticonsManager.java
 Fri Nov  2 18:21:52 2012
@@ -32,7 +32,16 @@ import org.slf4j.Logger;
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.io.xml.XppDriver;
 
+/**
+ * Load the list of available emoticons from the XML file and store them in
+ * memory to load faster, {@link #loadEmot()} is only called once: during 
server
+ * startup
+ * 
+ * @author sebawagner
+ * 
+ */
 public class EmoticonsManager {
+
        private static final Logger log = 
Red5LoggerFactory.getLogger(EmoticonsManager.class, 
OpenmeetingsVariables.webAppRootKey);
        
        private LinkedList<LinkedList<String>> emotfilesList = new 
LinkedList<LinkedList<String>>();

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=1405087&r1=1405086&r2=1405087&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 Nov  2 18:21:52 2012
@@ -30,6 +30,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.conference.whiteboard.BrowserStatus;
 import org.apache.openmeetings.conference.whiteboard.RoomStatus;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/ScreenController.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/ScreenController.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/ScreenController.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/ScreenController.java
 Fri Nov  2 18:21:52 2012
@@ -30,11 +30,11 @@ import javax.servlet.http.HttpServletRes
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.lang.StringUtils;
 import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.conference.room.RoomClient;
 import org.apache.openmeetings.data.basic.Fieldmanagment;
 import org.apache.openmeetings.data.basic.Sessionmanagement;
 import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
-import org.apache.openmeetings.remote.red5.IClientList;
 import org.apache.openmeetings.utils.OmFileHelper;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/poll/TestClientListManager.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/poll/TestClientListManager.java?rev=1405087&r1=1405086&r2=1405087&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/poll/TestClientListManager.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/poll/TestClientListManager.java
 Fri Nov  2 18:21:52 2012
@@ -22,7 +22,7 @@ import static org.junit.Assert.assertNot
 
 import java.util.Random;
 
-import org.apache.openmeetings.remote.red5.IClientList;
+import org.apache.openmeetings.conference.room.IClientList;
 import org.apache.openmeetings.test.AbstractOpenmeetingsSpringTest;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;


Reply via email to