2012-08-08 64 views
0

我已經通過Google,FMS Guru和大量Adobe開發人員教程進行了搜索。我有點困惑,因爲如何從客戶端發送變量作爲sharedobject或客戶端對象的參數,所以我可以從main.asc文件中抓取服務器端的變量&。如何使用Flex,AS3和Flash Builder將變量從客戶端swf發送到serverside(main.asc)

例如,如何使用創建的SWF中的AS3將用戶名,用戶ID,性別,用戶類型和生日變量發送到main.asc文件?

從chat.mxml

private var xmlstring:String = "http://www.blah.com/xml.xml"; 


      private var userType:String; 
      private var userCountText:String; 

      protected function getXML():void { 
       XML.ignoreWhitespace = true; 
       var myLoader:URLLoader=new URLLoader(); 
       myLoader.load(new URLRequest(ownerstring)); 
       myLoader.addEventListener(Event.COMPLETE, processXML); 
      } 

      protected function processXML(e:Event):void { 
       var myXML:XML = XML(e.target.data) 
       for (var i:int = 0; i<myXML.*.length(); i++){ 
        xinstance = myXML.owner[0]; 
        xuserid = myXML.owner[1]; 
        xusername = myXML.owner[2]; 
        xphoto = myXML.owner[3]; 
        xroomowner = myXML.owner[4]; 
       } 
       //xinstance = myXML.broadcastowner.owner.(@title == "instance"); 
       //xuserid = myXML.broadcastowner.owner.(@title == "userid"); 
       //xusername = myXML.broadcastowner.owner.(@title == "username"); 
       //xphoto = myXML.broadcastowner.owner.(@title == "photo"); 
       //xroomowner = myXML.broadcastowner.owner.(@title == "roomowner"); 

       go(); 
      } 

      private function initConnection(event:FlexEvent):void{ 
       getXML(); 
      } 

      private function go():void { 
       var fmsstring:String = "rtmp://blah.com/appname/" + xinstance; 

       nc = new NetConnection(); 
       nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
       nc.connect(fmsstring); 
       nc.client = this; 
      }   

      protected function onNetStatus(event:NetStatusEvent):void{ 
       trace(event.info.code); 

       switch(event.info.code){ 

        case "NetConnection.Connect.Success": 
         publishCamera(); 
         displayPublishingVideo(); 
         chat_broadcastLive(); 

         so = SharedObject.getRemote("message", nc.uri, false); 

         so.username = xusername; 
         so.userid = xuserid; 
         so.userType = xroomowner; 

         so.addEventListener(SyncEvent.SYNC, soOnSync); 
         so.client = this; 
         so.connect(nc); 

         //so.setProperty("userinfo",{username:xusername, userid:xuserid, userType:xroomowner}); 

         sendBtn.addEventListener(MouseEvent.CLICK, onClickSendBtn); 
         break; 

        case "NetConnection.Connect.Closed" : 
         nc.call("chat.sendMessage", myResponder, xusername + " left the room"); 
         break; 

       } 
      } 

main.asc的

application.onAppstart = function(){ 
this.totalUserCount = 0; 
} 

application.onConnect = function(client, username, userid, gender, userType, birthday) 
{ 

//userType = so.data.userinfo["userType"]; 

client.username = username; 
client.userid = userid; 
client.gender = gender; 
client.userType = userType; 
client.birthdaye = birthday; 

if(userType="viewer"){ 
this.totalUserCount++; 
} 

client.chat = chat; 

application.acceptConnection(client); 

} 

application.onDisconnect = function(client){ 
if(userType="viewer"){ 
this.totalUserCount--; 
} 
} 

trace("usercount is:" + this.totalUserCount); 

使用main.asc的代碼上面,我得到 「是USERCOUNT未定義」,所以我必須做一些錯誤的。

+0

我修改我的回答與另一個問題。 – BadFeelingAboutThis 2012-08-09 00:17:07

回答

1

至少有一個問題是您的值「查看器」分配給您的userType var而不是評估它。例如

if(userType="viewer") 

應該

if(userType == "viewer") 

此外,您的跟蹤語句可能是因爲您的應用程序調用onStart()之前運行,所以確實你變量在這一點上不確定的。

在您的客戶端代碼,你需要傳遞的參數在連接字符串後的淨連接上connect()函數,所以在情況下,它會是這樣:

nc.connect(fmsstring, username, userid, gender, userType, birthday); 
+0

我修復了「==」問題。我知道我可以使用application.clients.length;在main.asc中獲取所有連接的客戶端,但可能要過濾另一個變量。如何使用現有代碼從mxml中的AS3代碼發送所需的變量? – Patriotec 2012-08-09 01:03:32

+0

更新了答案給你看。 – BadFeelingAboutThis 2012-08-09 02:03:56

+0

謝謝。我有一天晚上嘗試了這個,但它沒有工作,因爲我沒有在這個例子中正確加載XML:http://stackoverflow.com/questions/11855918/as3-concatenate-rtmp-connection-string-from-兩個XML-間函數 – Patriotec 2012-08-09 12:34:01

相關問題