[IconFile("FCS_Connection.png")] [Event("change")] //class FCS_Connection extends MovieClip { //JMC: We extend from UIComponent so we have access to the EventDispatcher API class FCS_Connection extends mx.core.UIComponent { static var symbolName : String = "FCS_Connection"; static var symbolOwner : Object = FCS_Connection; static var className : String = "FCS_Connection"; private var bBox : MovieClip; private var FCS_icon : MovieClip private var netConn : NetConnection; private var connectInterval : Number; private var port_count : Number = 0; private var __ports : Array; private var __domain : String; private var __userName : String; private var __BindData : Object; private var globalUserList_so : SharedObject; ////COMPONENT FUNCTIONS////////////////////////////////// function FCS_Connection() { init(); onMouseDown = function (){ this.removeMovieClip(); } } function init() : Void { bBox._width = 0; bBox._height = 0; bBox._visible = false; createChildren(); } function createChildren() : Void { FCS_icon = attachMovie("FCS_ConnectionIcon", "FCS_icon", 10); runPorts(); size(); } function size() : Void { //trace ("Sizing"); draw(); } function draw() : Void { //trace ("Drawing"); } ////USERNAME GETTER SETTER METHODS////////////////////////////// [Inspectable(defaultValue="testUser_01")] public function set userName(argValue:String) { __userName = argValue; } public function get userName() : String { return __userName; } ////DOMAIN GETTER SETTER METHODS//////////////////////////////// [Inspectable(defaultValue="wk11")] public function set domain(argValue:String) { __domain = argValue; } public function get domain():String{ return __domain; } ////PORTS GETTER SETTER METHODS//////////////////////////////// [Inspectable( type="Array", defaultValue="8080, 443, 80")] public function set ports(argValue:Array ) : Void { __ports = argValue; } public function get ports() : Array { return __ports; } ////BINDDATA GETTER SETTER METHODS///////////////////////////// [ChangeEvent("change")] [Bindable ("readonly")] public function set BindData (argValue : Object) : Void { __BindData = argValue; trace ("BindData set called"); } public function get BindData() : Object { trace ("BindData get called"); return __BindData; } ////Connect to FCS///////////////////////////////////////////// function runPorts() : Void { var tempOwner : FCS_Connection = this; port_count = 0; netConn = new NetConnection(); netConn.onStatus = function(info) { trace(this.uri+": "+info.code); if (info.code == "NetConnection.Connect.Failed") { if (port_count >= ports.length){ trace ("stopped: couldn't make a connection"); return; } trace("failed on "+ports[port_count]); port_count++; connectInterval = setInterval(tempOwner, doConnect, 100); } else if (info.code == "NetConnection.Connect.Success") { trace ("login success!"); tempOwner.initLobbyResources(this); } }; netConn.msgFromSrvr = function (argValue:String){ trace ("msgFromSrvr: " + argValue); } doConnect(); } function doConnect() : Void{ clearInterval(connectInterval); var rtmp_url : String = "rtmp://"+__domain+"/testEdge/"; //rtmp_url = "rtmp://" + fc_server + ":"+ports[port_count]; netConn.close(); netConn.connect(rtmp_url, userName); trace("port_count is: "+port_count+" and ports[port_count] is: "+ports[port_count]); } function initLobbyResources(nc){ var tempOwner : FCS_Connection = this; globalUserList_so = SharedObject.getRemote("globalUserList_so", nc.uri, false); //JMC: Save a reference to the "owner" class instance here globalUserList_so.owner = this; globalUserList_so.ready = false; globalUserList_so.onSync = function(list){ if (tempOwner.userName != "testUser_01") { return; } trace ("ONSYNC"); for (var p in this.data){ tempOwner.BindData = this.data[p]; trace("p: " + p + " = " + this.data[p]); for (var z in this.data[p]){ trace (" z: " + z); for (var q in this.data[p][z]){ trace (" q: " + this.data[p][z][q]); } } } //JMC: Dispatch a custom "userListChange" event from the owning FCS_Connection instance owner.dispatchEvent({type:'userListChange', list:list}); } globalUserList_so.connect(nc); } public function destroyConn(){ netConn.close(); } }