[Red5commits] [719] lhubbard
luke@codegent.com
luke at codegent.com
Sun Apr 16 18:00:07 EDT 2006
Some fixes...
Basic scopes now remove from parent if they are not persistent and have no more listeners.
Added hack to disconnect from shared objects to base connection.
Timestamp: 04/17/06 07:00:54 (less than one hour ago)
Change: 719
Author: lhubbard
Files (see diff or trac for details):
java/server/trunk/src/org/red5/server/BaseConnection.java
java/server/trunk/src/org/red5/server/BasicScope.java
java/server/trunk/src/org/red5/server/Scope.java
java/server/trunk/src/org/red5/server/Standalone.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
java/server/trunk/src/org/red5/server/stream/ScopeWrappingStreamManager.java
java/server/trunk/webapps/fitcDemo/WEB-INF/src/org/red5/demos/fitc/Application.java
Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/719
Index: /java/server/trunk/webapps/fitcDemo/WEB-INF/src/org/red5/demos/fitc/Application.java
===================================================================
--- /java/server/trunk/webapps/fitcDemo/WEB-INF/src/org/red5/demos/fitc/Application.java (revision 716)
+++ /java/server/trunk/webapps/fitcDemo/WEB-INF/src/org/red5/demos/fitc/Application.java (revision 719)
@@ -30,4 +30,5 @@
// Initialize id generation and list of streams
+ /*
if (ScopeUtils.isApp(scope)) {
synchronized (scope) {
@@ -35,4 +36,5 @@
}
}
+ */
// Every scope keeps a list of connected streams
@@ -51,4 +53,5 @@
return true;
+ /*
Integer id;
if (!client.hasAttribute(CLIENT_ID)) {
@@ -65,4 +68,5 @@
id = (Integer) client.getAttribute(CLIENT_ID);
}
+ */
// Send to client
@@ -71,6 +75,6 @@
IServiceCapableConnection service = (IServiceCapableConnection) conn;
- log.info("Setting id " + id + " for client " + client);
- service.invoke("setId", new Object[]{id}, this);
+ log.info("Setting id " + client.getId() + " for client " + client);
+ service.invoke("setId", new Object[]{client.getId()}, this);
}
@@ -85,5 +89,5 @@
if (!super.addChildScope(scope))
return false;
-
+ log.debug("Adding stream");
if (scope instanceof IBroadcastStream) {
IConnection current = Red5.getConnectionLocal();
@@ -107,5 +111,5 @@
return true;
}
-
+
public void removeChildScope(IBasicScope scope) {
if (scope instanceof IBroadcastStream) {
@@ -113,8 +117,8 @@
synchronized (parent) {
Set<String> streams = (Set<String>) parent.getAttribute(STREAMS_ID);
+ log.debug("Remove stream:"+scope.getName());
streams.remove(scope.getName());
}
}
-
super.removeChildScope(scope);
}
Index: /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java (revision 713)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java (revision 719)
@@ -341,5 +341,4 @@
}
so = conn.sharedObjectService.getSharedObject(name);
-
so.beginUpdate();
Iterator it = object.getEvents().iterator();
Index: /java/server/trunk/src/org/red5/server/Scope.java
===================================================================
--- /java/server/trunk/src/org/red5/server/Scope.java (revision 715)
+++ /java/server/trunk/src/org/red5/server/Scope.java (revision 719)
@@ -130,4 +130,8 @@
}
children.remove(scope);
+ if (hasHandler()){
+ log.debug("Remove child scope");
+ getHandler().removeChildScope(scope);
+ }
}
@@ -317,5 +321,5 @@
final String result = next;
next = null;
- return result;
+ return result.substring(prefix.length());
}
if(hasNext()) return next();
Index: /java/server/trunk/src/org/red5/server/BasicScope.java
===================================================================
--- /java/server/trunk/src/org/red5/server/BasicScope.java (revision 651)
+++ /java/server/trunk/src/org/red5/server/BasicScope.java (revision 719)
@@ -44,4 +44,7 @@
public void removeEventListener(IEventListener listener) {
listeners.remove(listener);
+ if(isPersistant() && listeners.isEmpty()){
+ parent.removeChildScope(this);
+ }
}
Index: /java/server/trunk/src/org/red5/server/stream/ScopeWrappingStreamManager.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/ScopeWrappingStreamManager.java (revision 682)
+++ /java/server/trunk/src/org/red5/server/stream/ScopeWrappingStreamManager.java (revision 719)
@@ -130,4 +130,5 @@
public void deleteStream(IStream stream) {
+
if (stream instanceof IBroadcastStream) {
// Notify all clients that stream is no longer published
@@ -143,7 +144,9 @@
}
- if (stream instanceof IBasicScope)
+ if (stream instanceof IBasicScope){
+ log.info("Remove stream scope:" + stream);
scope.removeChildScope((IBasicScope) stream);
-
+ }
+
stream.close();
}
Index: /java/server/trunk/src/org/red5/server/Standalone.java
===================================================================
--- /java/server/trunk/src/org/red5/server/Standalone.java (revision 683)
+++ /java/server/trunk/src/org/red5/server/Standalone.java (revision 719)
@@ -3,10 +3,5 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.mortbay.jetty.Handler;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.webapp.WebAppContext;
-import org.mortbay.xml.XmlConfiguration;
import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
-import org.springframework.context.support.FileSystemXmlApplicationContext;
/*
Index: /java/server/trunk/src/org/red5/server/BaseConnection.java
===================================================================
--- /java/server/trunk/src/org/red5/server/BaseConnection.java (revision 698)
+++ /java/server/trunk/src/org/red5/server/BaseConnection.java (revision 719)
@@ -13,4 +13,5 @@
import org.red5.server.api.IScope;
import org.red5.server.api.event.IEvent;
+import org.red5.server.api.so.ISharedObject;
public class BaseConnection extends AttributeStore
@@ -93,7 +94,20 @@
public void close(){
- if(isConnected()) {
- log.debug("Close, disconnect from scope");
+ if(scope != null) {
+ log.debug("Close, disconnect from scope, and children");
+ for(IBasicScope basicScope : basicScopes){
+ basicScope.removeEventListener(this);
+ }
scope.disconnect(this);
+
+ // XXX: HACK HACK HACK, this should not be needed,
+ // the so should be in the basic scopes. Quick fix
+ Iterator<String>it = scope.getBasicScopeNames(ISharedObject.TYPE);
+ while(it.hasNext()){
+ String name = it.next();
+ IBasicScope so = scope.getBasicScope(ISharedObject.TYPE, name);
+ so.removeEventListener(this);
+ }
+
scope=null;
} else {
More information about the Red5commits
mailing list