[FMS]一步一步學Flash Media Server(四)

來源:互聯網
上載者:User

今天我們講一個非常簡單的多人聊天功能,同樣我們也沒有服務端代碼,今天要用到一個新東西----SharedObject

先看一段代碼,更改一下上一節中的代碼:

 

package net.smilecn.chat{
    
    import flash.display.Sprite;
    import flash.net.NetConnection;
    import flash.net.SharedObject;
    import flash.events.NetStatusEvent;
    import flash.events.SyncEvent;
    import flash.events.MouseEvent;
    import fl.controls.TextArea;
    import fl.controls.Button;
    import fl.controls.TextInput;

    
    public class Chat extends Sprite{
        
        private var nc:NetConnection;
        private var rtmpUrl:String = "rtmp://localhost/chat";
        private var button:Button;
        private var textArea:TextArea;
        private var textInput:TextInput;
        private var chatMsg_so:SharedObject;
        private var userName:String = "user001";
    
        public function Chat():void{
            textArea=new TextArea();
            textArea.setSize (200,300);
            textArea.move (20,20);
            addChild (textArea);

            textInput=new TextInput();
            textInput.width = 140;
            textInput.move (20,330);
            addChild (textInput);

            button=new Button();
            button.width=50;
            button.label="發送";
            button.move (170,330);
            addChild(button);
            button.addEventListener (MouseEvent.CLICK,sendMsg);
            
            
            nc=new NetConnection();
            nc.addEventListener (NetStatusEvent.NET_STATUS,netStatusHandler);
            nc.connect (rtmpUrl);
        }
        
        private function netStatusHandler(event:NetStatusEvent):void{
            if(event.info.code == "NetConnection.Connect.Success"){
                chatMsg_so=SharedObject.getRemote("chatMsg",nc.uri,false);
                chatMsg_so.connect (nc);
                chatMsg_so.addEventListener (SyncEvent.SYNC,checkSO);
            }
        }
        
        private function checkSO (event:SyncEvent):void{
             for (var i:uint; i<event.changeList.length; i++)
             {
                    switch (event.changeList[i].code)
                    {
                        case "clear" :
                            trace("clear");
                            break;
                        case "success" :
                             trace (chatMsg_so.data.msg);
                             break;

                        case "change" :
                             textArea.appendText (chatMsg_so.data.msg + " ");
                             break;
                   }
             }
        }
        
        private function sendMsg (e:MouseEvent):void{
             chatMsg_so.setProperty ("msg",userName + ":" + textInput.text);
             textArea.appendText (userName + ":" + textInput.text + " ");
             textInput.text = "";
        }

    }
    
}

要看到效果,我們先了布一份EXE的檔案,相當一個用戶端,然後把userName改一個名字,前一個是user001,這個我們就改成user002,將那個EXE開啟,再將FLASH裡的這個發布,試著打上文字點發布,看看是不是達到了聊天的效果.

接下來來講解一下代碼:

在串連成功之後,有這樣一句代碼:chatMsg_so=SharedObject.getRemote("chatMsg",nc.uri,false);

chatMsg_so是我們定義的一個SharedObject執行個體,SharedObject--共用對象,官方的解釋是這樣的:

SharedObject 類用於在使用者電腦或伺服器上讀取和儲存有限的資料量。 使用共用對象,可在永久貯存在本機電腦或遠程伺服器上的多個用戶端 SWF 檔案和對象之間實現即時資料共用。 本地共用對象類似於瀏覽器 Cookie,遠程共用對象類似於即時資料傳輸裝置。

SharedObject可以用來儲存資料,這裡我們用到它是儲存我們的聊天資料.

getRemote方法是得到一個遠程共用對象,就是FMS上的一個共用對象,名字叫chatMsg,地址是nc.uri,最後一個參數是是否以檔案的形式儲存下來,false表示不儲存,當伺服器上有這樣一個名為chatMsg的共用對象時,這個方法就會得到這個共用對象,如果沒有這相共用對象,就會建立一個名為chatMsg的共用對象.

我們的代碼中,第一個客戶連進去後會建立一個共用對象,其它使用者再進去,就是得到這個共用對象.

chatMsg_so.addEventListener (SyncEvent.SYNC,checkSO);

這句代碼是偵聽共用對象的狀態

event.changeList[i].code就是狀態,這裡我們用了三個狀態----clear,success,change

clear是清除資料時(我們的代碼中第一個人進去時會觸發)
success是成功(我們的代碼中自己發訊息時會觸發)
change是改變(我們的代碼中別人發訊息時會觸發)

我們實現這個聊天功能實際是每個人去改變這個共用對象,然後共用對象改變了就會通知所有的用戶端,其它人就會收到這個訊息(注意自己不會收到change訊息).

這個聊天在實際中用處不大,這裡只是介紹共用對象的一個使用方式,而且這種聊天還有很多功能都沒有實現.(本人不喜歡用共用對象)

在後面我們會講解怎麼寫服務端代碼,這兩節都沒有寫服務端代碼.下節繼續.

轉載:http://blog.csdn.net/arrowyoung/article/details/2421965

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.