FLEX提高篇---------FMS两种方式实现简易聊天室

 

 

一:利用ShareObject的同步事件来将消息广播到所有客户端:

 

 

Java代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" layout="vertical" initialize="BasicPracticeSO();">   
  3.     <mx:Script>   
  4.         <![CDATA[   
  5.             private var nc:NetConnection;   
  6.             private var shareObject:SharedObject;   
  7.             private var monthDay:Date;   
  8.             private var isConnectSuccess:Boolean;   
  9.             private static const RTMP_URL:String="rtmp://localhost/BasicSO";   
  10.                
  11.                
  12.             private function BasicPracticeSO():void{   
  13.                 nc=new NetConnection;   
  14.                 nc.connect(RTMP_URL);   
  15.                 nc.addEventListener(NetStatusEvent.NET_STATUS,operateShareObject);   
  16.             }   
  17.                
  18.             private function operateShareObject(evt:NetStatusEvent):void{   
  19.                 isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");   
  20.                 if(isConnectSuccess){   
  21.                     shareObject=SharedObject.getRemote("userInfo",nc.uri,false);   
  22.                     monthDay=new Date();   
  23.                     shareObject.connect(nc);   
  24.                     shareObject.addEventListener(SyncEvent.SYNC,detectSO);   
  25.                 }   
  26.             }   
  27.                
  28.             private function detectSO(e:SyncEvent):void{   
  29.                 for(var chng:uint;chng<e.changeList.length;chng++){   
  30.                 switch(e.changeList[chng].code){   
  31.                     case "change":   
  32.                         updateAllClientMsg();   
  33.                         break;   
  34.                     case "clear":   
  35.                         break;   
  36.                     case "success":   
  37.                         break;   
  38.                     default:   
  39.                         break;   
  40.                     }   
  41.                 }   
  42.             }   
  43.                
  44.             private function updateAllClientMsg():void{   
  45.                 soList.text+=shareObject.data.msg+"\n";   
  46.             }   
  47.            
  48.                
  49.             private function addDataToShareObject():void{   
  50.                 shareObject.setProperty("msg",msgText.text);   
  51.                 soList.text+=msgText.text+"\n";   
  52.                 msgText.text="";   
  53.             }   
  54.         ]]>   
  55.     </mx:Script>   
  56.     <mx:Label text="ShareObject data:"/>   
  57.     <mx:TextArea id="soList" width="300" height="120">   
  58.            
  59.     </mx:TextArea>   
  60.     <mx:Form>   
  61.         <mx:FormHeading label="add data to ShareObject:"/>   
  62.         <mx:FormItem label="msg:">   
  63.             <mx:TextInput id="msgText"/>   
  64.         </mx:FormItem>   
  65.         <mx:FormItem>   
  66.             <mx:Button label="send Msg" click="addDataToShareObject();"/>   
  67.         </mx:FormItem>   
  68.     </mx:Form>   
  69. </mx:Application>  

 

 

二:在FMS服务端通过编码方试广播消息到所有客户端:

 

     1.客户端代码:

     

     

Java代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white" layout="vertical" initialize="initAppSO();">   
  3.     <mx:Script>   
  4.         <![CDATA[   
  5.             import com.client.ClientObj;   
  6.             private var nc:NetConnection;   
  7.             private var shareObject:SharedObject;   
  8.             private var monthDay:Date;   
  9.             private var isConnectSuccess:Boolean;   
  10.             private static const RTMP_URL:String="rtmp://localhost/BasicSO/chat";   
  11.                
  12.                
  13.             private function initAppSO():void{   
  14.                 nc=new NetConnection;   
  15.                 nc.connect(RTMP_URL);   
  16.                 var clientObj:ClientObj=new ClientObj(soList);   
  17.                 nc.client=clientObj;   
  18.                 nc.addEventListener(NetStatusEvent.NET_STATUS,checkStatus);   
  19.             }   
  20.                
  21.             private function checkStatus(evt:NetStatusEvent):void{   
  22.                 isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");   
  23.                 if(isConnectSuccess){   
  24.                     soList.text+="connect success"+"\n";   
  25.                 }   
  26.             }   
  27.                
  28.                
  29.             private function addDataToShareObject():void{   
  30.                 var msg:String=msgText.text;   
  31.                 var responder:Responder=new Responder(callback);   
  32.                 nc.call("writeFile",responder,msg);   
  33.                 msgText.text="";   
  34.             }   
  35.                
  36.             private function callback(str:String):void{   
  37.                 // ToDo something   
  38.             }   
  39.                
  40.         ]]>   
  41.     </mx:Script>   
  42.     <mx:Label text="chating list data:"/>   
  43.     <mx:TextArea id="soList" width="300" height="220">   
  44.     </mx:TextArea>   
  45.     <mx:HBox>   
  46.         <mx:Label text="msgText:"/>   
  47.         <mx:TextInput id="msgText"/>   
  48.         <mx:Button label="send Msg" click="addDataToShareObject();"/>   
  49.     </mx:HBox>   
  50. </mx:Application>  

 

 

2.FMS服务器端代码:

 

这里我把聊天记录写到了服务器端的一个文件里.其实写不写都无所谓.

 

Java代码 复制代码
  1. application.onAppStart=function(){   
  2.     trace("app is started");   
  3. };   
  4.   
  5. application.onConnect=function(client,name){   
  6.     client.id=name;   
  7.     application.acceptConnection(client);   
  8.     var file=new File("chatfile.text");   
  9.        
  10.     client.writeFile=function(msg){   
  11.         file.open("text","append");   
  12.         if(file.isOpen){   
  13.             msg=client.id+":"+client.ip+":say:\n"+msg;   
  14.             trace(msg);   
  15.             file.write(msg);   
  16.             file.close();   
  17.         }   
  18.         //client.call("serverToClient",null,msg);   
  19.         for(var i=0;i<application.clients.length;i++){   
  20.             application.clients[i].call("serverToClient",null,msg);   
  21.         }   
  22.     }   
  23. };   
  24.   
  25.   
  26. application.onDisconnect=function(client){   
  27.        
  28.     for(var i=0;i<application.clients.length;i++){   
  29.         msg=application.clients[i].id+"  left!";   
  30.         application.clients[i].call("serverToClient",null,msg);   
  31.     }   
  32. }  

你可能感兴趣的:(Flex)