0

私はGoogle、FMSの達人、そしてたくさんのAdobe開発者向けチュートリアルを検索しました。main.ascファイル内からサーバー側の変数を取得して処理できるように、クライアント側から共有オブジェクトまたはクライアントオブジェクトのパラメーターとして変数を送信する方法について少し混乱しています。

たとえば、作成されたSWFのAS3を使用して、username、userid、gender、usertype、birthday変数を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 is undefined」が表示されるので、何か間違ったことをしているに違いありません。

4

1 に答える 1

1

問題の少なくとも1つは、値「viewer」を評価する代わりにuserType変数に割り当てることです。例えば

if(userType="viewer")

する必要があります

if(userType == "viewer")

また、トレースステートメントはアプリケーションonStart()の前に実行されている可能性が高いため、実際、変数はその時点で未定義です。

クライアント側のコードでは、接続文字列の後にネット接続のconnect()関数の引数を渡す必要があるため、次のようになります。

nc.connect(fmsstring, username, userid, gender, userType, birthday);
于 2012-08-09T00:00:26.477 に答える