[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