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
-~----------~----~----~----~------~----~------~--~---