Author: solomax
Date: Fri Jul 11 18:33:44 2014
New Revision: 1609764
URL: http://svn.apache.org/r1609764
Log:
[OPENMEETINGS-1039] interview recording stop-on-close is fixed
Modified:
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
Modified:
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java?rev=1609764&r1=1609763&r2=1609764&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
(original)
+++
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
Fri Jul 11 18:33:44 2014
@@ -509,7 +509,6 @@ public class FLVRecorderService implemen
try {
Long users_id = sessiondataDao.checkSession(SID);
if
(AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
-
log.debug("updateFileOrFolderName " +
flvRecordingId);
FlvRecording flvRecording =
flvRecordingDaoImpl.get(flvRecordingId);
Modified:
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java?rev=1609764&r1=1609763&r2=1609764&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
(original)
+++
openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
Fri Jul 11 18:33:44 2014
@@ -33,7 +33,6 @@ import java.util.Set;
import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
import org.apache.openmeetings.data.conference.RoomManager;
-import org.apache.openmeetings.data.user.UserManager;
import org.apache.openmeetings.data.whiteboard.EmoticonsManager;
import org.apache.openmeetings.data.whiteboard.WhiteboardManager;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
@@ -98,8 +97,6 @@ public class ScopeApplicationAdapter ext
@Autowired
private SessiondataDao sessiondataDao;
@Autowired
- private UserManager userManager;
- @Autowired
private RoomManager roomManager;
@Autowired
private ConferenceLogDao conferenceLogDao;
@@ -527,11 +524,9 @@ public class ScopeApplicationAdapter ext
* @param currentClient
* @param currentScope
*/
- public synchronized void roomLeaveByScope(Client currentClient,
- IScope currentScope, boolean removeUserFromSessionList)
{
+ public synchronized void roomLeaveByScope(Client currentClient, IScope
currentScope, boolean removeUserFromSessionList) {
try {
log.debug("currentClient " + currentClient);
-
Long room_id = currentClient.getRoom_id();
// Log the User
@@ -557,7 +552,7 @@ public class ScopeApplicationAdapter ext
log.debug("*** roomLeave Current Client is
Recording - stop that");
if (currentClient.getInterviewPodId() != null) {
//interview, TODO need better check
- stopInterviewRecording();
+ _stopInterviewRecording(currentClient,
currentScope);
} else {
flvRecorderService.stopRecordAndSave(currentScope, currentClient, null);
@@ -2431,14 +2426,22 @@ public class ScopeApplicationAdapter ext
* @return true if interview was found
*/
public synchronized Boolean stopInterviewRecording() {
+ IConnection current = Red5.getConnectionLocal();
+ Client currentClient =
sessionManager.getClientByStreamId(current.getClient().getId(), null);
+ return _stopInterviewRecording(currentClient,
current.getScope());
+ }
+
+ /**
+ * Stop the recording of the streams and send event to connected users
of scope
+ *
+ * @return true if interview was found
+ */
+ private synchronized Boolean _stopInterviewRecording(Client
currentClient, IScope currentScope) {
try {
log.debug("----------- stopInterviewRecording");
- IConnection current = Red5.getConnectionLocal();
-
- Long flvRecordingId = checkRecordingClient(current);
+ Long flvRecordingId = currentClient.getFlvRecordingId();
- Set<IConnection> conset =
current.getScope().getClientConnections();
- for (IConnection conn : conset) {
+ for (IConnection conn :
currentScope.getClientConnections()) {
Long recordingId = checkRecordingClient(conn);
if (recordingId != null) {
flvRecordingId = recordingId;
@@ -2449,14 +2452,12 @@ public class ScopeApplicationAdapter ext
return false;
}
- Client currentClient =
sessionManager.getClientByStreamId(current.getClient().getId(), null);
-
flvRecorderService.stopRecordAndSave(scope,
currentClient, flvRecordingId);
Map<String, String> interviewStatus = new
HashMap<String, String>();
interviewStatus.put("action", "stop");
- for (IConnection conn : conset) {
+ for (IConnection conn :
currentScope.getClientConnections()) {
if (conn != null) {
IClient client = conn.getClient();
if
(SessionVariablesUtil.isScreenClient(client)) {
@@ -2466,9 +2467,7 @@ public class ScopeApplicationAdapter ext
// AVClients or potential
AVClients do not receive events
continue;
}
- ((IServiceCapableConnection)
conn).invoke(
- "interviewStatus",
- new Object[] {
interviewStatus }, this);
+ ((IServiceCapableConnection)
conn).invoke("interviewStatus", new Object[] { interviewStatus }, this);
}
}
return true;
Modified:
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java?rev=1609764&r1=1609763&r2=1609764&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/FLVRecorderService.java
Fri Jul 11 18:33:44 2014
@@ -37,7 +37,6 @@ import org.apache.openmeetings.db.dao.re
import org.apache.openmeetings.db.dao.room.RoomDao;
import org.apache.openmeetings.db.dao.server.ISessionManager;
import org.apache.openmeetings.db.dao.server.SessiondataDao;
-import org.apache.openmeetings.db.dao.user.IUserManager;
import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.entity.file.FileItem.Type;
import org.apache.openmeetings.db.entity.record.FlvRecording;
@@ -90,8 +89,6 @@ public class FLVRecorderService implemen
@Autowired
private SessiondataDao sessiondataDao;
@Autowired
- private IUserManager userManager;
- @Autowired
private ScopeApplicationAdapter scopeApplicationAdapter;
@Autowired
private FlvRecordingMetaDeltaDao metaDeltaDao;
@@ -510,7 +507,6 @@ public class FLVRecorderService implemen
try {
Long users_id = sessiondataDao.checkSession(SID);
if
(AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
-
log.debug("updateFileOrFolderName " +
flvRecordingId);
FlvRecording flvRecording =
flvRecordingDaoImpl.get(flvRecordingId);
Modified:
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1609764&r1=1609763&r2=1609764&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
Fri Jul 11 18:33:44 2014
@@ -46,7 +46,6 @@ import org.apache.openmeetings.db.dao.ro
import org.apache.openmeetings.db.dao.server.ISessionManager;
import org.apache.openmeetings.db.dao.server.ServerDao;
import org.apache.openmeetings.db.dao.server.SessiondataDao;
-import org.apache.openmeetings.db.dao.user.IUserManager;
import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.dto.room.BrowserStatus;
import org.apache.openmeetings.db.dto.room.RoomStatus;
@@ -98,8 +97,6 @@ public class ScopeApplicationAdapter ext
@Autowired
private SessiondataDao sessiondataDao;
@Autowired
- private IUserManager userManager;
- @Autowired
private RoomManager roomManager;
@Autowired
private ConferenceLogDao conferenceLogDao;
@@ -527,11 +524,9 @@ public class ScopeApplicationAdapter ext
* @param currentClient
* @param currentScope
*/
- public synchronized void roomLeaveByScope(Client currentClient,
- IScope currentScope, boolean removeUserFromSessionList)
{
+ public synchronized void roomLeaveByScope(Client currentClient, IScope
currentScope, boolean removeUserFromSessionList) {
try {
log.debug("currentClient " + currentClient);
-
Long room_id = currentClient.getRoom_id();
// Log the User
@@ -557,7 +552,7 @@ public class ScopeApplicationAdapter ext
log.debug("*** roomLeave Current Client is
Recording - stop that");
if (currentClient.getInterviewPodId() != null) {
//interview, TODO need better check
- stopInterviewRecording();
+ _stopInterviewRecording(currentClient,
currentScope);
} else {
flvRecorderService.stopRecordAndSave(currentScope, currentClient, null);
@@ -2431,14 +2426,22 @@ public class ScopeApplicationAdapter ext
* @return true if interview was found
*/
public synchronized Boolean stopInterviewRecording() {
+ IConnection current = Red5.getConnectionLocal();
+ Client currentClient =
sessionManager.getClientByStreamId(current.getClient().getId(), null);
+ return _stopInterviewRecording(currentClient,
current.getScope());
+ }
+
+ /**
+ * Stop the recording of the streams and send event to connected users
of scope
+ *
+ * @return true if interview was found
+ */
+ private synchronized Boolean _stopInterviewRecording(Client
currentClient, IScope currentScope) {
try {
log.debug("----------- stopInterviewRecording");
- IConnection current = Red5.getConnectionLocal();
-
- Long flvRecordingId = checkRecordingClient(current);
+ Long flvRecordingId = currentClient.getFlvRecordingId();
- Set<IConnection> conset =
current.getScope().getClientConnections();
- for (IConnection conn : conset) {
+ for (IConnection conn :
currentScope.getClientConnections()) {
Long recordingId = checkRecordingClient(conn);
if (recordingId != null) {
flvRecordingId = recordingId;
@@ -2449,14 +2452,12 @@ public class ScopeApplicationAdapter ext
return false;
}
- Client currentClient =
sessionManager.getClientByStreamId(current.getClient().getId(), null);
-
flvRecorderService.stopRecordAndSave(scope,
currentClient, flvRecordingId);
Map<String, String> interviewStatus = new
HashMap<String, String>();
interviewStatus.put("action", "stop");
- for (IConnection conn : conset) {
+ for (IConnection conn :
currentScope.getClientConnections()) {
if (conn != null) {
IClient client = conn.getClient();
if
(SessionVariablesUtil.isScreenClient(client)) {
@@ -2466,9 +2467,7 @@ public class ScopeApplicationAdapter ext
// AVClients or potential
AVClients do not receive events
continue;
}
- ((IServiceCapableConnection)
conn).invoke(
- "interviewStatus",
- new Object[] {
interviewStatus }, this);
+ ((IServiceCapableConnection)
conn).invoke("interviewStatus", new Object[] { interviewStatus }, this);
}
}
return true;