日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Flash/Flex学习笔记(53):利用FMS快速创建一个文本聊天室

發布時間:2025/4/16 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flash/Flex学习笔记(53):利用FMS快速创建一个文本聊天室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先來看客戶端fla的構成:

第一幀:登錄界面

第一幀的代碼:

show sourceview source print?
01import flash.events.MouseEvent;
02import com.adobe.utils.StringUtil;
03import utils.Alert;
04??
05stop();
06??
07var userName:String="";
08??
09Alert.init(stage);
10??
11btnLogin.addEventListener(MouseEvent.CLICK,btnLoginClick);
12??
13function 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);
18????}
19????else{
20????????gotoAndPlay(2);
21????}???
22}

第二幀:聊天的主界面

代碼:

show sourceview source print?
01import flash.net.NetConnection;
02import flash.events.MouseEvent;
03import flash.events.NetStatusEvent;
04import flash.events.KeyboardEvent;
05import utils.Alert;
06import flash.ui.Keyboard;
07??
08stop();
09??
10var nc:NetConnection;
11??
12function init():void {
13????nc = new NetConnection();
14????nc.client=new Object();
15????//定義供服務端廣播消息時需要的客戶端函數(結合main.asc查看)
16????nc.client.showmsg = function (str:String):void
17????{
18????txtMsg.appendText(str + "\n");
19????};
20??
21????nc.addEventListener(NetStatusEvent.NET_STATUS,connHandler);
22????nc.connect("rtmp://localhost/chat",userName);//注:這里的userName是在第一幀定義的
23????updateMsg("正在連接服務器...");
24????btnSend.addEventListener(MouseEvent.CLICK,btnSendClick);
25??
26????txtSend.addEventListener(KeyboardEvent.KEY_DOWN,txtSendKeyDown);
27??
28}
29??
30function txtSendKeyDown(e:KeyboardEvent):void {
31????if (e.keyCode == Keyboard.ENTER) {
32????????btnSendClick(null);
33????}
34}
35??
36function 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 = "";
41????}
42????else {
43????????Alert.show("請輸入要發送的內容!",null,0xefefef,0x000000);
44????}
45}
46??
47function connHandler(e:NetStatusEvent) {
48????switch (e.info.code) {
49????????case "NetConnection.Connect.Closed" :
50????????????updateMsg("成功關閉連接!");
51????????????break;
52????????case "NetConnection.Connect.Failed" :
53????????????updateMsg("連接嘗試失敗!");
54????????????break;
55????????case "NetConnection.Connect.Success" :
56????????????updateMsg("服務器連接成功!");
57????????????break;
58????????case "NetConnection.Connect.Rejected" :
59????????????updateMsg("連接嘗試沒有訪問應用程序的權限!");
60????????????break;
61????????default :
62????????????txtMsg.appendText(e.info.code + "\n");
63????????????break;
64????}
65}
66??
67function updateMsg(msg:String):void {
68????txtMsg.appendText(msg + "\n");
69}
70??
71init();

服務端main.asc的處理(注:main.asc保存時,貌似只能選擇為utf-8編碼,否則運動時客戶端一直連接不上)

show sourceview source print?
01application.onAppStart = function() {
02????trace("onAppStart");
03};
04??
05//新客戶端連接時觸發
06application.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函數)
12??????
13????//定義服務端的sendmsg方法,以便客戶端能調用
14????client.sendmsg = function(msg) {
15????????mesg = client.UserName+": "+msg;
16????????//每次client調用本方法后,服務器同步廣播到所有client
17????????application.broadcastMsg("showmsg",mesg)
18????};
19??????
20};
21??
22//有客戶端斷開連接時觸發
23application.onDisconnect = function(client) {
24????trace("onDisconnect ="+client.UserName);????
25????hellomsg="系統信息:"+client.UserName+" 離開聊天室";
26????application.broadcastMsg("showmsg",hellomsg)
27};
28application.onAppStop = function() {
29????trace("onAppStop");
30};

運行中的樣子:

注:艾睿論壇上曾有一篇教程利用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快速创建一个文本聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。