2013-01-03 49 views
0

在FMS中,我希望使用Shared對象在聊天應用程序中發送消息,因爲它的實時性。 我的問題是...你如何使用共享對象在實時聊天應用程序中向用戶發送消息?這需要服務器端腳本,客戶端還是兩者?SharedObject發送方法

回答

2

您只需要在服務器端編寫一些代碼以獲取特定功能,例如安全功能(如果不是所有用戶都可以發送消息)。

在客戶端,您需要:

  • 連接到服務器;
  • 從服務器獲取共享對象。如果它在你請求時不存在,它就會被創建;
  • 加入一個聽衆SyncEvent

從那裏,每次客戶端添加,更新或使用setProperty()方法刪除共享對象的屬性,所有連接的客戶端將收到一個SyncEvent

package 
{ 
    import flash.events.Event; 
    import flash.events.EventDispatcher; 
    import flash.events.IEventDispatcher; 
    import flash.events.NetStatusEvent; 
    import flash.events.SyncEvent; 
    import flash.net.NetConnection; 
    import flash.net.SharedObject; 

    public class Chat extends EventDispatcher 
    { 
     public var messages:Array; 
     private var connection:NetConnection; 
     private var chat_so:SharedObject; 

     public function Chat() 
     { 
      super(); 
      connection = new NetConnection(); 
      connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
      messages = []; 
     } 

     public function connect(uri:String):void 
     { 
      connection.connect(uri); 
     } 

     public function addMessage(value:String):void 
     { 
      chat_so.setProperty(messages.length.toString(), value); 
     } 

     private function setUpSharedObject():void 
     { 
      chat_so = SharedObject.getRemote("chat", connection.uri); 
      chat_so.addEventListener(SyncEvent.SYNC, onSync); 
      chat_so.client = this; 
     } 

     private function onNetStatus(event:NetStatusEvent):void 
     { 
      if (event.info.code == "NetConnection.Connect.Success") 
      { 
       setUpSharedObject(); 
      } 
      else 
      { 
       trace(event.info.code + ": " + event.info.description); 
      } 
     } 

     private function onSync(event:SyncEvent):void 
     { 
      for (var i:int = 0; i < event.changeList.length; i++) 
      { 
       var code:String = event.changeList[i].code; 

       switch(code) 
       { 
        case "change": 
        case "success": 
        { 
         messages.push(); 
         dispatchEvent(new Event(Event.CHANGE)); 
         break; 
        } 
        case "clear": 
        { 
         messages = []; 
         break; 
        } 
        case "delete": 
        default: 
        { 
         break; 
        } 
       } 
      } 
     } 
    } 
}