生活随笔
收集整理的這篇文章主要介紹了
Flash/Flex学习笔记(53):利用FMS快速创建一个文本聊天室
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先來看客戶端fla的構成:
第一幀:登錄界面
第一幀的代碼:
show sourceview source print?
| 01 | import flash.events.MouseEvent; |
| 02 | import com.adobe.utils.StringUtil; |
| 07 | var userName:String=""; |
| 11 | btnLogin.addEventListener(MouseEvent.CLICK,btnLoginClick); |
| 13 | function btnLoginClick(e:MouseEvent):void{?? |
| 14 | ????txtUserName.text = StringUtil.trim(txtUserName.text); |
| 15 | ????this.userName = txtUserName.text; |
| 16 | ????if (this.userName.length<=0){ |
| 17 | ????????Alert.show("請輸入用戶名!",null,0xefefef,0x000000); |
| 20 | ????????gotoAndPlay(2); |
第二幀:聊天的主界面
代碼:
show sourceview source print?
| 01 | import flash.net.NetConnection; |
| 02 | import flash.events.MouseEvent; |
| 03 | import flash.events.NetStatusEvent; |
| 04 | import flash.events.KeyboardEvent; |
| 06 | import flash.ui.Keyboard; |
| 13 | ????nc = new NetConnection(); |
| 14 | ????nc.client=new Object(); |
| 15 | ????//定義供服務端廣播消息時需要的客戶端函數(結合main.asc查看) |
| 16 | ????nc.client.showmsg = function (str:String):void |
| 18 | ????txtMsg.appendText(str + "\n"); |
| 21 | ????nc.addEventListener(NetStatusEvent.NET_STATUS,connHandler); |
| 22 | ????nc.connect("rtmp://localhost/chat",userName);//注:這里的userName是在第一幀定義的 |
| 23 | ????updateMsg("正在連接服務器..."); |
| 24 | ????btnSend.addEventListener(MouseEvent.CLICK,btnSendClick); |
| 26 | ????txtSend.addEventListener(KeyboardEvent.KEY_DOWN,txtSendKeyDown); |
| 30 | function txtSendKeyDown(e:KeyboardEvent):void { |
| 31 | ????if (e.keyCode == Keyboard.ENTER) { |
| 32 | ????????btnSendClick(null); |
| 36 | function btnSendClick(e:MouseEvent):void { |
| 37 | ????txtSend.text = StringUtil.trim(txtSend.text); |
| 38 | ????if (txtSend.text != "") { |
| 39 | ????????nc.call("sendmsg",null,txtSend.text); |
| 40 | ????????txtSend.text = ""; |
| 43 | ????????Alert.show("請輸入要發送的內容!",null,0xefefef,0x000000); |
| 47 | function connHandler(e:NetStatusEvent) { |
| 48 | ????switch (e.info.code) { |
| 49 | ????????case "NetConnection.Connect.Closed" : |
| 50 | ????????????updateMsg("成功關閉連接!"); |
| 52 | ????????case "NetConnection.Connect.Failed" : |
| 53 | ????????????updateMsg("連接嘗試失敗!"); |
| 55 | ????????case "NetConnection.Connect.Success" : |
| 56 | ????????????updateMsg("服務器連接成功!"); |
| 58 | ????????case "NetConnection.Connect.Rejected" : |
| 59 | ????????????updateMsg("連接嘗試沒有訪問應用程序的權限!"); |
| 62 | ????????????txtMsg.appendText(e.info.code + "\n"); |
| 67 | function updateMsg(msg:String):void { |
| 68 | ????txtMsg.appendText(msg + "\n"); |
服務端main.asc的處理(注:main.asc保存時,貌似只能選擇為utf-8編碼,否則運動時客戶端一直連接不上)
show sourceview source print?
| 01 | application.onAppStart = function() { |
| 02 | ????trace("onAppStart"); |
| 06 | application.onConnect = function(client, uName) { |
| 07 | ????trace("onConnect = "+uName); |
| 08 | ????client.UserName = uName; |
| 09 | ????application.acceptConnection(client);//允許客戶登錄,如果要對客戶身份做驗證,在此擴展即可???? |
| 10 | ????hellomsg="系統信息:"+client.UserName+" 進入聊天室"; |
| 11 | ????application.broadcastMsg("showmsg",hellomsg);//調用所有client的showmsg方法,并傳遞參數hellomsg(客戶端的代碼中,必須有對應的showmsg函數) |
| 13 | ????//定義服務端的sendmsg方法,以便客戶端能調用 |
| 14 | ????client.sendmsg = function(msg) { |
| 15 | ????????mesg = client.UserName+": "+msg; |
| 16 | ????????//每次client調用本方法后,服務器同步廣播到所有client |
| 17 | ????????application.broadcastMsg("showmsg",mesg) |
| 23 | application.onDisconnect = function(client) { |
| 24 | ????trace("onDisconnect ="+client.UserName);???? |
| 25 | ????hellomsg="系統信息:"+client.UserName+" 離開聊天室"; |
| 26 | ????application.broadcastMsg("showmsg",hellomsg) |
| 28 | application.onAppStop = function() { |
| 29 | ????trace("onAppStop"); |
運行中的樣子:
注:艾睿論壇上曾有一篇教程利用FMS的遠程共享對象來創建聊天室,遠程對象在編碼上也許更簡單,不過個人感覺性能不太理想(因為對于共享對象的廣播是FMS自動的,完全不受控制,不管客戶端想不想接收消息,都會被動接收消息),本文演示的是另一種常見做法(服務端可以有選擇性的僅向某些Client發送消息),而且網上也有很多相關文章,只不過要么是收費的,要么是基于AS2.0的,今天用AS3.0整理出來,于已方便、與人方便。
源代碼下載:http://cid-2959920b8267aaca.skydrive.live.com/self.aspx/Flash/FMSTxtChatBasicDemo.rar
?
后話:這個跟silverlight做的聊天室(基于scoket或wcf雙工通訊)有什么不同呢? 答:silverlight做聊天室應用,往往需要開發者自己做一個(scoket) server端,而adobe的fms正好充當了這個角色,省去了這一步之后,程序員只需要把注意力集中在客戶端和業務邏輯上即可,開發量大大縮減。
轉載于:https://www.cnblogs.com/happysky97/archive/2010/11/22/1884640.html
總結
以上是生活随笔為你收集整理的Flash/Flex学习笔记(53):利用FMS快速创建一个文本聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。