Author: seba.wagner
Date: Wed Jan  7 13:24:30 2009
New Revision: 1759

Added:
     
trunk/webapp/src/app/org/openmeetings/app/quartz/scheduler/QuartzZombieJob.java
    trunk/webapp/src/app/org/openmeetings/app/remote/red5/
    trunk/webapp/src/app/org/openmeetings/app/remote/red5/Application.java    
(contents, props changed)
       - copied, changed from r1757,  
/trunk/webapp/src/app/org/openmeetings/app/remote/Application.java
Removed:
    trunk/webapp/src/app/org/openmeetings/app/remote/Application.java
Modified:
    trunk/webapp/filetest.keystore
     
trunk/webapp/src/app/org/openmeetings/app/conference/configutils/BandWidthHelper.java
     
trunk/webapp/src/app/org/openmeetings/app/conference/whiteboard/WhiteboardManagement.java
     
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManager.java
     
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManagerSWFTools.java
     
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardMapToSVG.java
    trunk/webapp/src/app/org/openmeetings/app/documents/GenerateImage.java
    trunk/webapp/src/app/org/openmeetings/app/documents/GeneratePDF.java
    trunk/webapp/src/app/org/openmeetings/app/documents/GenerateSWF.java
    trunk/webapp/src/app/org/openmeetings/app/documents/GenerateThumbs.java
    trunk/webapp/src/app/org/openmeetings/app/documents/MakeExectuable.java
     
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RoomClient.hbm.xml
     
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RoomClient.java
     
trunk/webapp/src/app/org/openmeetings/app/hibernate/utils/HibernateUtil.java
    trunk/webapp/src/app/org/openmeetings/app/remote/ChatService.java
    trunk/webapp/src/app/org/openmeetings/app/remote/ConferenceLibrary.java
    trunk/webapp/src/app/org/openmeetings/app/remote/ConferenceService.java
    trunk/webapp/src/app/org/openmeetings/app/remote/MainService.java
    trunk/webapp/src/app/org/openmeetings/app/remote/PollService.java
    trunk/webapp/src/app/org/openmeetings/app/remote/StreamService.java
    trunk/webapp/src/app/org/openmeetings/app/remote/WhiteBoardService.java
     
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/ExportToImage.java
    trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/Install.java
     
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/ScreenServlet.java
     
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/UploadHandler.java
     
trunk/webapp/src/app/org/openmeetings/utils/stringhandlers/ChatString.java
    trunk/webapp/src/test/org/openmeetings/emotes/TestChatParsing.java
    trunk/webapp/webapp/openmeetings/WEB-INF/red5-web.xml

Log:
Fixes:
New Scheduler for Zombie Connection left in room,
Issue 583 remove zombie connections in scheduled way

Modified: trunk/webapp/filetest.keystore
==============================================================================
Binary files. No diff available.

Modified:  
trunk/webapp/src/app/org/openmeetings/app/conference/configutils/BandWidthHelper.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/conference/configutils/BandWidthHelper.java
    
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/conference/configutils/BandWidthHelper.java
    
Wed Jan  7 13:24:30 2009
@@ -7,7 +7,7 @@
  import org.red5.server.api.scheduling.IScheduledJob;
  import org.red5.server.api.scheduling.ISchedulingService;

-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;

  public class BandWidthHelper implements IScheduledJob {


Modified:  
trunk/webapp/src/app/org/openmeetings/app/conference/whiteboard/WhiteboardManagement.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/conference/whiteboard/WhiteboardManagement.java
        
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/conference/whiteboard/WhiteboardManagement.java
        
Wed Jan  7 13:24:30 2009
@@ -6,7 +6,7 @@

  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;

  public class WhiteboardManagement {
        

Modified:  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManager.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManager.java
        
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManager.java
        
Wed Jan  7 13:24:30 2009
@@ -26,8 +26,8 @@
  import  
org.openmeetings.app.hibernate.beans.recording.RecordingConversionJob;
  import org.openmeetings.app.hibernate.beans.recording.RoomRecording;
  import org.openmeetings.app.hibernate.beans.recording.WhiteBoardEvent;
-import org.openmeetings.app.remote.Application;
  import org.openmeetings.app.remote.StreamService;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.math.CalendarPatterns;
  import org.w3c.dom.DOMImplementation;
  import org.w3c.dom.Document;

Modified:  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManagerSWFTools.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManagerSWFTools.java
        
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManagerSWFTools.java
        
Wed Jan  7 13:24:30 2009
@@ -25,8 +25,8 @@
  import  
org.openmeetings.app.hibernate.beans.recording.RecordingConversionJob;
  import org.openmeetings.app.hibernate.beans.recording.RoomRecording;
  import org.openmeetings.app.hibernate.beans.recording.WhiteBoardEvent;
-import org.openmeetings.app.remote.Application;
  import org.openmeetings.app.remote.StreamService;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.math.CalendarPatterns;
  import org.w3c.dom.DOMImplementation;
  import org.w3c.dom.Document;

Modified:  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardMapToSVG.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardMapToSVG.java   
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardMapToSVG.java   
 
Wed Jan  7 13:24:30 2009
@@ -12,7 +12,7 @@
  import org.apache.batik.svggen.SVGGraphics2D;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.geom.GeomPoint;

  public class WhiteboardMapToSVG extends BatikMethods {

Modified:  
trunk/webapp/src/app/org/openmeetings/app/documents/GenerateImage.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/documents/GenerateImage.java      
 
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/documents/GenerateImage.java      
 
Wed Jan  7 13:24:30 2009
@@ -15,7 +15,7 @@
  import org.openmeetings.app.data.user.Usermanagement;
  import org.openmeetings.app.data.user.dao.UsersDaoImpl;
  import org.openmeetings.app.hibernate.beans.user.Users;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.math.CalendarPatterns;

  public class GenerateImage {

Modified:  
trunk/webapp/src/app/org/openmeetings/app/documents/GeneratePDF.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/documents/GeneratePDF.java        
 
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/documents/GeneratePDF.java        
 
Wed Jan  7 13:24:30 2009
@@ -11,7 +11,7 @@
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.apache.commons.transaction.util.FileHelper;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.math.CalendarPatterns;

  public class GeneratePDF {

Modified:  
trunk/webapp/src/app/org/openmeetings/app/documents/GenerateSWF.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/documents/GenerateSWF.java        
 
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/documents/GenerateSWF.java        
 
Wed Jan  7 13:24:30 2009
@@ -14,7 +14,7 @@
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.openmeetings.app.data.basic.Configurationmanagement;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.math.CalendarPatterns;

  public class GenerateSWF {

Modified:  
trunk/webapp/src/app/org/openmeetings/app/documents/GenerateThumbs.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/documents/GenerateThumbs.java     
 
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/documents/GenerateThumbs.java     
 
Wed Jan  7 13:24:30 2009
@@ -12,7 +12,7 @@
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.openmeetings.app.data.basic.Configurationmanagement;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.math.CalendarPatterns;

  public class GenerateThumbs {

Modified:  
trunk/webapp/src/app/org/openmeetings/app/documents/MakeExectuable.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/documents/MakeExectuable.java     
 
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/documents/MakeExectuable.java     
 
Wed Jan  7 13:24:30 2009
@@ -6,7 +6,7 @@

  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;

  public class MakeExectuable {
        

Modified:  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RoomClient.hbm.xml
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RoomClient.hbm.xml
   
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RoomClient.hbm.xml
   
Wed Jan  7 13:24:30 2009
@@ -33,5 +33,6 @@
      <property name="avsettings" type="string" column="avsettings"/>
      <property name="broadCastID" type="long" column="broadcast_id"/>
      <property name="publicSID" type="string" column="public_sid"/>
+    <property name="zombieCheckFlag" type="boolean"  
column="zombieCheckFlag"/>
    </class>
  </hibernate-mapping>

Modified:  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RoomClient.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RoomClient.java
      
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RoomClient.java
      
Wed Jan  7 13:24:30 2009
@@ -112,6 +112,11 @@
        private Boolean isRecording = false;
        private String roomRecordingName;
        
+       /*
+        * Zombie Flag
+        */
+       private Boolean zombieCheckFlag = false;
+       
        public RoomClient() {
                super();
        }
@@ -504,4 +509,16 @@
                this.publicSID = publicSID;
        }

-}
+       /**
+     * @hibernate.property
+     *  column="zombieCheckFlag"
+     *  type="boolean"
+     */
+       public Boolean getZombieCheckFlag() {
+               return zombieCheckFlag;
+       }
+       public void setZombieCheckFlag(Boolean zombieCheckFlag) {
+               this.zombieCheckFlag = zombieCheckFlag;
+       }
+
+}
\ No newline at end of file

Modified:  
trunk/webapp/src/app/org/openmeetings/app/hibernate/utils/HibernateUtil.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/hibernate/utils/HibernateUtil.java    
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/hibernate/utils/HibernateUtil.java    
 
Wed Jan  7 13:24:30 2009
@@ -7,7 +7,7 @@
  import org.hibernate.*;
  import org.hibernate.cfg.*;

-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;

  public class HibernateUtil {
        

Added:  
trunk/webapp/src/app/org/openmeetings/app/quartz/scheduler/QuartzZombieJob.java
==============================================================================
--- (empty file)
+++  
trunk/webapp/src/app/org/openmeetings/app/quartz/scheduler/QuartzZombieJob.java 
 
Wed Jan  7 13:24:30 2009
@@ -0,0 +1,34 @@
+package org.openmeetings.app.quartz.scheduler;
+
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
+
+import org.red5.server.api.scheduling.IScheduledJob;
+import org.red5.server.api.scheduling.ISchedulingService;
+import org.openmeetings.app.data.basic.Sessionmanagement;
+import org.openmeetings.app.data.record.WhiteboardConvertionJobManager;
+import org.openmeetings.app.remote.red5.Application;
+
+public class QuartzZombieJob implements IScheduledJob {
+
+       private static Logger log =  
LoggerFactory.getLogger(QuartzZombieJob.class.getName());
+
+       public void execute(ISchedulingService service) {
+               try {
+                       
+                       //cntxt.getScheduler().rescheduleJob("Income Session", 
"SessionClear  
Generation", cntxt.getTrigger());
+                       
+                       // TODO Check for Zombies
+                       
+                       
Application.getInstance().clearZombiesFromAllConnection();
+
+               } catch (Exception err){
+                       log.error("execute",err);
+               }
+       }
+       
+
+}

Modified: trunk/webapp/src/app/org/openmeetings/app/remote/ChatService.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/remote/ChatService.java    
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/ChatService.java   Wed  
Jan  7 13:24:30 2009
@@ -17,6 +17,7 @@
  import org.red5.server.api.service.IPendingServiceCallback;
  import org.red5.server.api.service.IServiceCapableConnection;
  import org.openmeetings.app.hibernate.beans.recording.RoomClient;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.stringhandlers.ChatString;

  /**

Modified:  
trunk/webapp/src/app/org/openmeetings/app/remote/ConferenceLibrary.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/remote/ConferenceLibrary.java     
 
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/ConferenceLibrary.java     
 
Wed Jan  7 13:24:30 2009
@@ -25,6 +25,7 @@
  import org.openmeetings.app.documents.LoadLibraryPresentation;
  import org.openmeetings.app.documents.LoadLibraryPresentationToObject;
  import org.openmeetings.app.documents.CreateLibraryPresentation;
+import org.openmeetings.app.remote.red5.Application;

  /**
   *

Modified:  
trunk/webapp/src/app/org/openmeetings/app/remote/ConferenceService.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/remote/ConferenceService.java     
 
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/ConferenceService.java     
 
Wed Jan  7 13:24:30 2009
@@ -16,6 +16,7 @@
  import org.openmeetings.app.hibernate.beans.rooms.Rooms;
  import org.openmeetings.app.hibernate.beans.rooms.RoomTypes;
  import org.openmeetings.app.hibernate.beans.rooms.Rooms_Organisation;
+import org.openmeetings.app.remote.red5.Application;

  /**
   *

Modified: trunk/webapp/src/app/org/openmeetings/app/remote/MainService.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/remote/MainService.java    
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/MainService.java   Wed  
Jan  7 13:24:30 2009
@@ -29,6 +29,7 @@
  import org.openmeetings.app.data.conference.Invitationmanagement;
  import org.openmeetings.app.data.conference.Feedbackmanagement;
  import org.openmeetings.app.data.basic.AuthLevelmanagement;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.app.rss.LoadAtomRssFeed;



Modified: trunk/webapp/src/app/org/openmeetings/app/remote/PollService.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/remote/PollService.java    
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/PollService.java   Wed  
Jan  7 13:24:30 2009
@@ -20,6 +20,7 @@
  import org.openmeetings.app.conference.videobeans.RoomPollAnswers;
  import org.openmeetings.app.conference.videobeans.PollType;
  import org.openmeetings.app.hibernate.beans.recording.RoomClient;
+import org.openmeetings.app.remote.red5.Application;

  /**
   *

Modified:  
trunk/webapp/src/app/org/openmeetings/app/remote/StreamService.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/remote/StreamService.java  
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/StreamService.java Wed  
Jan  7 13:24:30 2009
@@ -44,6 +44,7 @@
  import org.openmeetings.app.hibernate.beans.recording.RoomRecording;
  import org.openmeetings.app.hibernate.beans.recording.RoomStream;
  import org.openmeetings.app.hibernate.beans.recording.WhiteBoardEvent;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.app.data.record.dao.ChatvaluesEventDaoImpl;
  import org.openmeetings.app.data.record.dao.RecordingClientDaoImpl;
  import org.openmeetings.app.data.record.dao.RecordingConversionJobDaoImpl;
@@ -228,14 +229,14 @@
                                        }
                                }
                        }
-                       return stopRecordAndSave(current, roomrecordingName, 
currentClient);
+                       return stopRecordAndSave(current.getScope(), 
roomrecordingName,  
currentClient);
                } catch (Exception err) {
                        log.error("[stopRecordAndSave]",err);
                }
                return new Long(-1);
        }
        
-       public static Long stopRecordAndSave(IConnection current, String  
roomrecordingName, RoomClient currentClient){
+       public static Long stopRecordAndSave(IScope scope, String  
roomrecordingName, RoomClient currentClient){
                try {
                         
log.debug("stopRecordAndSave 
"+currentClient.getUsername()+","+currentClient.getUserip());
                        RoomRecording roomRecording = 
roomRecordingList.get(roomrecordingName);
@@ -243,14 +244,14 @@
                        Long room_id = currentClient.getRoom_id();
                        currentClient.setIsRecording(false);
                        currentClient.setRoomRecordingName("");
-                       
Application.getClientList().put(current.getClient().getId(),  
currentClient);
+                       
Application.getClientList().put(currentClient.getStreamid(),  
currentClient);
                        
                        
                        String conferenceType = 
roomRecording.getConferenceType();
                        
                        //get all stream and stop recording them
                        //Todo: Check that nobody does Recording at the same 
time Issue 253
-                       Iterator<IConnection> it = 
current.getScope().getConnections();
+                       Iterator<IConnection> it = scope.getConnections();
                        while (it.hasNext()) {
                                IConnection conn = it.next();
                                if (conn instanceof IServiceCapableConnection) {

Modified:  
trunk/webapp/src/app/org/openmeetings/app/remote/WhiteBoardService.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/remote/WhiteBoardService.java     
 
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/WhiteBoardService.java     
 
Wed Jan  7 13:24:30 2009
@@ -11,7 +11,9 @@
  import org.openmeetings.app.conference.whiteboard.WhiteboardManagement;
  import org.openmeetings.app.conference.whiteboard.WhiteboardSyncLockObject;
  import org.openmeetings.app.hibernate.beans.recording.RoomClient;
+import org.openmeetings.app.remote.red5.Application;
  import org.red5.server.api.IConnection;
+import org.red5.server.api.IScope;
  import org.red5.server.api.Red5;
  import org.red5.server.api.service.IPendingServiceCall;
  import org.red5.server.api.service.IPendingServiceCallback;
@@ -393,7 +395,7 @@
  //            return number;
  //    }       
  //    
-       public void removeUserFromAllLists(IConnection current, RoomClient  
currentClient){
+       public void removeUserFromAllLists(IScope scope, RoomClient  
currentClient){
                try {
                        
                        Long room_id = currentClient.getRoom_id();
@@ -416,7 +418,7 @@
                                int numberOfInitial = 
this.getNumberOfInitialLoaders(syncListRoom);
                                
                                if (numberOfInitial==0){
-                                       Iterator<IConnection> it = 
current.getScope().getConnections();
+                                       Iterator<IConnection> it = 
scope.getConnections();
                                        while (it.hasNext()) {
                                                IConnection conn = it.next();
                                                if (conn instanceof 
IServiceCapableConnection) {
@@ -448,7 +450,7 @@
                                int numberOfImageLoaders =  
Application.getWhiteBoardObjectSyncListByRoomid(room_id).size();
                                
                                if (numberOfImageLoaders==0){
-                                       Iterator<IConnection> it = 
current.getScope().getConnections();
+                                       Iterator<IConnection> it = 
scope.getConnections();
                                        while (it.hasNext()) {
                                                IConnection conn = it.next();
                                                if (conn instanceof 
IServiceCapableConnection) {

Copied:  
trunk/webapp/src/app/org/openmeetings/app/remote/red5/Application.java  
(from r1757,  
/trunk/webapp/src/app/org/openmeetings/app/remote/Application.java)
==============================================================================
--- /trunk/webapp/src/app/org/openmeetings/app/remote/Application.java   
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/red5/Application.java      
 
Wed Jan  7 13:24:30 2009
@@ -1,4 +1,4 @@
-package org.openmeetings.app.remote;
+package org.openmeetings.app.remote.red5;


  import java.io.BufferedReader;
@@ -35,6 +35,10 @@
  import org.openmeetings.app.conference.configutils.UserConfigFactory;
  import org.openmeetings.app.quartz.scheduler.QuartzRecordingJob;
  import org.openmeetings.app.quartz.scheduler.QuartzSessionClear;
+import org.openmeetings.app.quartz.scheduler.QuartzZombieJob;
+import org.openmeetings.app.remote.PollService;
+import org.openmeetings.app.remote.StreamService;
+import org.openmeetings.app.remote.WhiteBoardService;
  import org.openmeetings.utils.crypt.MD5;
  import org.openmeetings.utils.crypt.ManageCryptStyle;
  import org.openmeetings.utils.stringhandlers.ChatString;
@@ -119,8 +123,10 @@
                        //System.out.println("################## appStart    ");
                        QuartzSessionClear bwHelp = new QuartzSessionClear();
                        QuartzRecordingJob recordingJob = new 
QuartzRecordingJob();
+                       QuartzZombieJob quartzZombieJob = new QuartzZombieJob();
                        String jobName = addScheduledJob(300000,bwHelp);
                        String jobName2 = addScheduledJob(3000,recordingJob);
+                       String jobName3 = addScheduledJob(2000,quartzZombieJob);
                        //String jobName = addScheduledJob(1000,bwHelp);
                        log.debug("jobName: "+jobName);
                } catch (Exception err) {
@@ -300,28 +306,40 @@
                        IConnection current = Red5.getConnectionLocal();
                        String streamid = current.getClient().getId();
                        RoomClient currentClient = ClientList.get(streamid);
+                       
+                       IScope scope = current.getScope();
+                       
+                       this.roomLeaveByScope(currentClient, scope);
+                       
+               } catch (Exception err){
+                       log.error("[roomLeave]",err);
+               }               
+       }
+       
+       private void roomLeaveByScope(RoomClient currentClient, IScope  
currentScope) {
+               try {
+                       
                        Long room_id = currentClient.getRoom_id();
                        
                        //Log the User
-                       
ConferenceLogDaoImpl.getInstance().addConferenceLog("roomLeave",  
currentClient.getUser_id(), streamid, room_id, currentClient.getUserip());
+                       
ConferenceLogDaoImpl.getInstance().addConferenceLog("roomLeave",  
currentClient.getUser_id(),
+                                       currentClient.getStreamid(), room_id, 
currentClient.getUserip());
                        
                        
                        //Remove User from Sync List's
                        if (room_id != null) {
-                               
WhiteBoardService.getInstance().removeUserFromAllLists(current,  
currentClient);
+                               
WhiteBoardService.getInstance().removeUserFromAllLists(currentScope,  
currentClient);
                        }

                        //String streamid = currentClient.getStreamid();
                        
                        log.debug("##### roomLeave :. " + 
currentClient.getStreamid()); // just  
a unique number
-
-
                        log.debug("removing  
USername "+currentClient.getUsername()+" "+currentClient.getConnectedSince()+"  
streamid: "+currentClient.getStreamid());
                        
                        //stop and save any recordings
                        if (currentClient.getIsRecording()) {
                                log.debug("*** roomLeave Current Client is 
Recording - stop that");
-                               StreamService.stopRecordAndSave(current,  
currentClient.getRoomRecordingName(), currentClient);
+                               StreamService.stopRecordAndSave(currentScope,  
currentClient.getRoomRecordingName(), currentClient);
                                
                                //set to true and overwrite the default one 
cause otherwise no  
notification is send
                                currentClient.setIsRecording(true);
@@ -336,18 +354,20 @@
  //                            log.debug("clearRoomPollList cleared");
                        }
                        
-                       //Notify all clients of the same scope (room) with 
domain and room
+                       //Notify all clients of the same currentScope (room) 
with domain and  
room
                        //except the current disconnected cause it could throw 
an exception
                        
-                       Iterator<IConnection> it = 
current.getScope().getConnections();
+                       Iterator<IConnection> it = 
currentScope.getConnections();
                        while (it.hasNext()) {
                                log.debug("hasNext == true");
                                IConnection cons = it.next();
                                log.debug("cons Host: "+cons);
                                if (cons instanceof IServiceCapableConnection) {
-                                       if (!cons.equals(current)){
-                                               log.debug("sending 
roomDisconnect to " + cons);
-                                               RoomClient rcl = 
ClientList.get(cons.getClient().getId());
+                                       
+                                       log.debug("sending roomDisconnect to " 
+ cons);
+                                       RoomClient rcl = 
ClientList.get(cons.getClient().getId());
+                                       
+                                       if 
(!currentClient.getStreamid().equals(rcl.getStreamid())){
                                                //Send to all connected users   
                                                ((IServiceCapableConnection) 
cons).invoke("roomDisconnect",new  
Object[] { currentClient }, this);
                                                log.debug("sending 
roomDisconnect to " + cons);
@@ -364,10 +384,9 @@
                                        }
                                }
                        }                       
-                       
-               } catch (Exception err){
-                       log.error("[roomDisconnect]",err);
-               }               
+               } catch (Exception err) {
+                       log.error("[roomLeaveByScope]",err);
+               }
        }
        
        /**
@@ -382,66 +401,8 @@
                        IConnection current = Red5.getConnectionLocal();
                        String streamid = current.getClient().getId();
                        RoomClient currentClient = ClientList.get(streamid);
-                       Long room_id = currentClient.getRoom_id();      
-                       
-                       //Log the User
-                       
ConferenceLogDaoImpl.getInstance().addConferenceLog("roomLeave",  
currentClient.getUser_id(), streamid, room_id, currentClient.getUserip());
-                       
-                       
-                       //Remove User from Sync List's
-                       if (room_id != null) {
-                               
WhiteBoardService.getInstance().removeUserFromAllLists(current,  
currentClient);
-                       }
-                       
-                       //stop and save any recordings if this user is recording
-                       if (currentClient.getIsRecording()) {
-                               StreamService.stopRecordAndSave(current,  
currentClient.getRoomRecordingName(), currentClient);
-                               
-                               //set to true and overwrite the default one 
cause otherwise no  
notification is send
-                               currentClient.setIsRecording(true);
-                       }                       
-                       
-                       log.debug("##### logicalRoomLeave :. " + 
currentClient.getStreamid());  
// just a unique number
-                       
-                       //If this Room is empty clear the Room Poll List
-                       HashMap<String,RoomClient> rcpList =  
this.getClientListByRoomAndDomain(room_id);
-                       log.debug("logicalRoomLeave rcpList size: 
"+rcpList.size());
-                       if (rcpList.size()==0){
-                               PollService.clearRoomPollList(room_id);
-                               log.debug("logicalRoomLeave clearRoomPollList 
cleared");
-                       }
-                       
-                       //Notify all clients of the same scope (room) with 
domain and room
-                       
-                       Iterator<IConnection> it = 
current.getScope().getConnections();
-                       while (it.hasNext()) {
-                               IConnection cons = it.next();
-                               //log.debug("cons Host: "+cons);
-                               if (cons instanceof IServiceCapableConnection) {
-                                       if (!cons.equals(current)){
-                                               //log.debug("sending 
roomDisconnect to " + cons);
-                                               RoomClient rcl = 
ClientList.get(cons.getClient().getId());
-                                               //Check if the Client is in the 
same room and same domain except its  
the current one
-                                               if(room_id!=null && 
room_id.equals(rcl.getRoom_id())){                                  
-                                                       
((IServiceCapableConnection) cons).invoke("logicalRoomLeaveDis",new  
Object[] { currentClient }, this);
-                                                       log.debug("sending 
roomDisconnect to " + cons);
-                                                       
-                                                       //add Notification if 
another user is recording in this room
-                                                       if 
(rcl.getIsRecording()){
-                                                               log.debug("*** 
logicalRoomLeave Any Client is Recording - stop  
that");
-                                                               
StreamService.addRoomClientEnterEventFunc(rcl,  
rcl.getRoomRecordingName(), rcl.getUserip(), false);
-                                                               
StreamService.stopRecordingShowForClient(cons, currentClient,  
rcl.getRoomRecordingName(), true);
-                                                       }
-                                               }
-                                               
-                                       }
-                               }
-                       }       
-                       currentClient.setRoom_id(null);                 
-                       currentClient.setIsRecording(false);
                        
-                       log.debug("removing  
USername "+currentClient.getUsername()+" "+currentClient.getConnectedSince()+"  
streamid: "+currentClient.getStreamid());
-                       
ClientList.put(currentClient.getStreamid(),currentClient);
+                       this.roomLeaveByScope(currentClient, 
current.getScope());
                        
                } catch (Exception err){
                        log.error("[roomDisconnect]",err);
@@ -1531,6 +1492,61 @@
                        imageSyncList = new 
HashMap<String,WhiteboardSyncLockObject>();
                }
                return imageSyncList;
+       }
+       
+       /**
+        * Remove all Zombies from all Connections
+        */
+       public synchronized void clearZombiesFromAllConnection(){
+               try {
+                       
+                       IScope globalScope = getContext().getGlobalScope();
+                       
+                       IScope webAppKeyScope = 
globalScope.getScope(Application.webAppRootKey);
+                       
+                       //log.debug("clearZombiesFromAllConnection  
webAppKeyScope "+webAppKeyScope);
+                       
+                       IScope scopeHibernate = 
webAppKeyScope.getScope("hibernate");
+                       
+                       for (Iterator<String> iter =  
ClientList.keySet().iterator();iter.hasNext();) {
+                               String key = iter.next();
+                               RoomClient rcl = ClientList.get(key);
+                               rcl.setZombieCheckFlag(false);
+                               ClientList.put(key, rcl);
+                       }
+                       
+                       if (scopeHibernate!=null){
+
+                               //Notify all clients of the same scope (room)
+                               Iterator<IConnection> it =  
webAppKeyScope.getScope("hibernate").getConnections();
+                               
+                               if (it!=null) {
+                                       while (it.hasNext()) {
+                                               IConnection conn = it.next();   
                        
+                                               RoomClient rcl = 
ClientList.get(conn.getClient().getId());
+                                               rcl.setZombieCheckFlag(true);
+                                               
ClientList.put(conn.getClient().getId(), rcl);
+                                       }
+                               } else {
+                                       log.info("sendMessageByRoomAndDomain 
connections is empty ");
+                               }
+                       } else {
+                               log.info("sendMessageByRoomAndDomain servlet 
not yet started ");
+                       }
+                       
+                       //Remove Zombie users
+                       for (Iterator<String> iter =  
ClientList.keySet().iterator();iter.hasNext();) {
+                               String key = iter.next();
+                               RoomClient rcl = ClientList.get(key);
+                               if (!rcl.getZombieCheckFlag()) {
+                                       log.debug("######### Found Zombie and 
removed em ");
+                                       this.roomLeaveByScope(rcl, 
scopeHibernate);
+                               }
+                       }
+                       
+               } catch (Exception err) {
+                       log.error("[clearZombiesFromAllConnection]",err);
+               }
        }
        
        /*

Modified:  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/ExportToImage.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/ExportToImage.java  
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/ExportToImage.java  
 
Wed Jan  7 13:24:30 2009
@@ -29,7 +29,7 @@
  import org.openmeetings.app.data.record.WhiteboardMapToSVG;
  import org.openmeetings.app.data.user.Usermanagement;
  import org.openmeetings.app.documents.GenerateImage;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.geom.GeomPoint;
  import org.openmeetings.utils.math.CalendarPatterns;
  import org.slf4j.Logger;

Modified:  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/Install.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/Install.java        
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/Install.java        
 
Wed Jan  7 13:24:30 2009
@@ -19,7 +19,7 @@
  import org.slf4j.LoggerFactory;
  import org.openmeetings.app.documents.InstallationDocumentHandler;
  import org.openmeetings.app.installation.ImportInitvalues;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;

  public class Install extends VelocityViewServlet {


Modified:  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/ScreenServlet.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/ScreenServlet.java  
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/ScreenServlet.java  
 
Wed Jan  7 13:24:30 2009
@@ -27,7 +27,7 @@
  import org.openmeetings.app.hibernate.beans.recording.RoomClient;
  import org.openmeetings.utils.stringhandlers.StringComparer;

-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;

  public class ScreenServlet extends HttpServlet {
        

Modified:  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/UploadHandler.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/UploadHandler.java  
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/servlet/outputhandler/UploadHandler.java  
 
Wed Jan  7 13:24:30 2009
@@ -24,7 +24,7 @@
  import org.openmeetings.app.documents.GenerateThumbs;
  import org.openmeetings.app.documents.GeneratePDF;
  import org.openmeetings.app.documents.GenerateImage;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.app.hibernate.beans.user.Users;

  public class UploadHandler extends HttpServlet {

Modified:  
trunk/webapp/src/app/org/openmeetings/utils/stringhandlers/ChatString.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/utils/stringhandlers/ChatString.java      
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/utils/stringhandlers/ChatString.java      
 
Wed Jan  7 13:24:30 2009
@@ -6,7 +6,7 @@
  import java.util.LinkedList;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;

  public class ChatString {
        

Modified: trunk/webapp/src/test/org/openmeetings/emotes/TestChatParsing.java
==============================================================================
--- trunk/webapp/src/test/org/openmeetings/emotes/TestChatParsing.java   
(original)
+++ trunk/webapp/src/test/org/openmeetings/emotes/TestChatParsing.java  Wed  
Jan  7 13:24:30 2009
@@ -5,7 +5,7 @@
  import java.io.FileReader;
  import java.util.LinkedList;

-import org.openmeetings.app.remote.Application;
+import org.openmeetings.app.remote.red5.Application;
  import org.openmeetings.utils.stringhandlers.ChatString;

  import com.thoughtworks.xstream.XStream;

Modified: trunk/webapp/webapp/openmeetings/WEB-INF/red5-web.xml
==============================================================================
--- trunk/webapp/webapp/openmeetings/WEB-INF/red5-web.xml       (original)
+++ trunk/webapp/webapp/openmeetings/WEB-INF/red5-web.xml       Wed Jan  7  
13:24:30 2009
@@ -21,7 +21,7 @@

      <!-- Class for the Streaming Handlers -->
      <bean id="web.handler"
-        class="org.openmeetings.app.remote.Application"
+        class="org.openmeetings.app.remote.red5.Application"
          singleton="true" />

      <!-- DATABASE Connection via hibernate

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"OpenMeetings developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/openmeetings-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to