commit 60e2c5afa70435c9f336bf33097717ff24573515 Author: Nate Hardison nate@rescomp-09-154551.stanford.edu Date: Thu Jun 2 10:50:09 2011 -0700
Attempted to fix stream disconnection notification, also trying to fix whitespace --- rtmfp/CirrusSocket.as | 28 +++++++++++++------------- rtmfp/RTMFPSocket.as | 53 +++++++++++++++++++++++++----------------------- rtmfpcat.as | 3 ++ 3 files changed, 45 insertions(+), 39 deletions(-)
diff --git a/rtmfp/CirrusSocket.as b/rtmfp/CirrusSocket.as index 9e97c7d..071ac0d 100644 --- a/rtmfp/CirrusSocket.as +++ b/rtmfp/CirrusSocket.as @@ -31,10 +31,10 @@ package rtmfp { private static const CONNECT_TIMEOUT:uint = 4000; // in milliseconds - /* We'll append a unique number to the DATA_STREAM_PREFIX for each + /* We'll append a unique number to the DATA_STREAM_PREFIX for each new stream we create so that we have unique streams per player. */ private static const DATA_STREAM_PREFIX:String = "DATA"; - private var data_stream_suffix:uint = 0; + private var data_stream_suffix:uint = 0;
/* Connection to the Cirrus rendezvous service */ public var connection:NetConnection; @@ -94,18 +94,18 @@ package rtmfp return DATA_STREAM_PREFIX + data_stream_suffix; }
- /* Sends a hello message to the Flash player with Cirrus ID "id" - We use this new call protocol outlined here: - http://forums.adobe.com/thread/780788?tstart=0 */ - public function send_hello(id:String):void - { - if (this.connected) { - connection.call("relay", null, id, local_stream_name); - } else { - throw new Error("Cannot send hello: Cirrus socket not connected."); - } - } - + /* Sends a hello message to the Flash player with Cirrus ID "id" + We use this new call protocol outlined here: + http://forums.adobe.com/thread/780788?tstart=0 */ + public function send_hello(id:String):void + { + if (this.connected) { + connection.call("relay", null, id, local_stream_name); + } else { + throw new Error("Cannot send hello: Cirrus socket not connected."); + } + } + /*************************** PRIVATE HELPER FUNCTIONS *************************/
private function fail():void diff --git a/rtmfp/RTMFPSocket.as b/rtmfp/RTMFPSocket.as index 6e9a45e..bcbee67 100644 --- a/rtmfp/RTMFPSocket.as +++ b/rtmfp/RTMFPSocket.as @@ -27,26 +27,28 @@ package rtmfp [Event(name=RTMFPSocketEvent.PUBLISH_FAILED, type="com.flashproxy.rtmfp.events.RTMFPSocketEvent")] public class RTMFPSocket extends EventDispatcher { - private const CONNECT_TIMEOUT:uint = 10000; + private const CONNECT_TIMEOUT:uint = 10000; private var s_c:CirrusSocket;
- private var recv_stream:NetStream; + private var recv_stream:NetStream; private var send_stream:NetStream;
- private var connect_timeout:int; + private var peer_stream:NetStream; + + private var connect_timeout:int;
public function RTMFPSocket(s_c:CirrusSocket) { this.s_c = s_c; recv_stream = null; - send_stream = null; - connect_timeout = 0; + send_stream = null; + connect_timeout = 0; }
- /* Tears down this RTMFPSocket, closing both its streams. - To be used when destroying this object. */ - public function close():void + /* Tears down this RTMFPSocket, closing both its streams. + To be used when destroying this object. */ + public function close():void { if (send_stream != null) { s_c.connection.removeEventListener(NetStatusEvent.NET_STATUS, on_stream_disconnection_event); @@ -81,23 +83,23 @@ package rtmfp RTMFPSocketClient(recv_stream.client).connect_acknowledged); }
- /* In RTMFP, you open a listening socket by publishing a named + /* In RTMFP, you open a listening socket by publishing a named stream that others can connect to instead of listening on a port. You register this stream with the Cirrus server via the Cirrus socket so that it can redirect connection requests for an id/stream tuple to this socket. */ public function listen(stream:String):void { - // apparently streams don't get disconnection events, only the NetConnection - // object does...bleh. - s_c.connection.addEventListener(NetStatusEvent.NET_STATUS, on_stream_disconnection_event); + // apparently streams don't get disconnection events, only the NetConnection + // object does...bleh. + s_c.connection.addEventListener(NetStatusEvent.NET_STATUS, on_stream_disconnection_event);
send_stream = new NetStream(s_c.connection, NetStream.DIRECT_CONNECTIONS); - send_stream.addEventListener(NetStatusEvent.NET_STATUS, on_send_stream_event); - var client:Object = new Object(); - client.onPeerConnect = on_peer_connect; - send_stream.client = client; - send_stream.publish(stream); + send_stream.addEventListener(NetStatusEvent.NET_STATUS, on_send_stream_event); + var client:Object = new Object(); + client.onPeerConnect = on_peer_connect; + send_stream.client = client; + send_stream.publish(stream); }
public function get peer():String @@ -113,16 +115,16 @@ package rtmfp
public function readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void { - if (recv_stream != null && recv_stream.client != null) { - recv_stream.client.bytes.readBytes(bytes, offset, length); - } + if (recv_stream != null && recv_stream.client != null) { + recv_stream.client.bytes.readBytes(bytes, offset, length); + } }
public function writeBytes(bytes:ByteArray):void { if (send_stream != null && peer_connected) { - send_stream.send(RTMFPSocketClient.DATA_AVAILABLE, bytes); - } + send_stream.send(RTMFPSocketClient.DATA_AVAILABLE, bytes); + } }
/* Listens for acknowledgement of a connection attempt to a @@ -130,7 +132,7 @@ package rtmfp private function on_connect_acknowledged(event:Event):void { clearTimeout(connect_timeout); - dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.CONNECT_SUCCESS, recv_stream)); + dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.CONNECT_SUCCESS, recv_stream)); }
/* If we don't get a connection acknowledgement by the time this @@ -163,6 +165,7 @@ package rtmfp return false; }
+ peer_stream = peer; peer.send(RTMFPSocketClient.SET_CONNECT_ACKNOWLEDGED);
// need to do this in a timeout so that this function can @@ -190,10 +193,10 @@ package rtmfp
private function on_stream_disconnection_event(event:NetStatusEvent):void { - if (event.info.code == "NetStream.Connect.Closed") { + if (event.info.code == "NetStream.Connect.Closed" && event.info.stream === peer_stream) { dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEER_DISCONNECTED)); - //disconnect(); } } } } + diff --git a/rtmfpcat.as b/rtmfpcat.as index 866175e..25099dd 100644 --- a/rtmfpcat.as +++ b/rtmfpcat.as @@ -49,6 +49,8 @@ package private var s_f:FacilitatorSocket; // Handle local-remote traffic private var p_p:ProxyPair; + + private var proxy_pairs:Array;
private var proxy_mode:Boolean;
@@ -87,6 +89,7 @@ package puts("Parameters loaded.");
proxy_mode = (this.loaderInfo.parameters["proxy"] != null); + proxy_pairs = new Array();
fac_spec = this.loaderInfo.parameters["facilitator"]; if (fac_spec) {