Flex2基于XMPP的chat程序 (一)

系统 1839 0

先解释几个名词
XMPP : (eXtensible Messaging and Presence Protocol) XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:IMPP、PRIM、SIP(SIMPLE)。

XIFF : XMPP Implementation For Flash. (一个ActionScript的XMPP类库)

Openfire : (原名Wildfire) 基于Java的开源实时协作(RTC)服务器,使用XMPP(Jabber)协议。

Google推出的Google Talk就是基于XMPP的IM软件。所以我想使用Flex也开发一个基于XMPP的聊天程序。现在已经有了很好的开源服务器Openfire http://www.igniterealtime.org/projects/openfire/index.jsp 支持中文哦。
另外还有一套XIFF API,专为flash开发XMPP应用,但现在XIFF2.0是用AS2写的,而Flex2是基于AS3的,幸运的是有人已经写了一个基于AS3的实现。 http://svn.igniterealtime.org/svn/repos/xiff/branches/xiff_as3_flexlib_beta1/

要开发Flex + Openfire的系统,首先要安装Openfire服务器,安装很简单,具体看安装手册 http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/install-guide.html

安装在本机的Openfire启动后,可以通过 http://localhost:9090  管理

好,现在开始开发Flex客户端。因为现在XIFF_AS3的文档几乎没有,所以只能通过XIFF2的例子,和Smack API(for java的)来学习。XIFF的核心是XMPPConnection,它基本是围绕flash.net.XMLSocket写的。首先创建一个Flex项目并引入 XIFF.swc

登录服务器比较简单
var connection : XMPPConnection = new XMPPConnection();
connection.server = 服务器名
connection.port = 服务器端口号
connection.username = 用户名
connection.password = 密码
connection.connect("flash");

下面是一个简单的小例子

xml 代码
  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2. < mx:Application   xmlns:mx = "http://www.adobe.com/2006/mxml"   layout = "absolute"   
  3.      creationComplete = "initApp()" >   
  4.   
  5.      < mx:Script >   
  6.         [CDATA[   
  7.             import org.igniterealtime.xiff.events.RoomEvent;   
  8.             import mx.controls.Alert;   
  9.             import org.igniterealtime.xiff.events.MessageEvent;   
  10.             import org.igniterealtime.xiff.core.XMPPConnection;   
  11.             import org.igniterealtime.xiff.conference.Room;   
  12.             import org.igniterealtime.xiff.events.LoginEvent;   
  13.             import org.igniterealtime.xiff.data.*;   
  14.                
  15.             public const SERVER_NAME :  String  =  "wangcheng" ;   
  16.             public const CHATROOM :  String  =  "chatRoom1" ;   
  17.                
  18.             private var chatRoom : Room;   
  19.             private var connection : XMPPConnection;   
  20.                
  21.             private function initApp():void {   
  22.                  connection  =  new  XMPPConnection();   
  23.                 connection.addEventListener(LoginEvent.LOGIN, onLogin);   
  24.             }   
  25.                
  26.             private function doLogin():void {   
  27.                 if (!connection.isLoggedIn()) {   
  28.                      connection.username  = username.text;   
  29.                      connection.password  = password.text;   
  30.                      connection.server  =  SERVER_NAME ;   
  31.                      connection.port  =  5222 ;   
  32.                     connection.connect("flash");   
  33.                     if(connection.isLoggedIn()){   
  34.                         chatContent.htmlText += "Welcome " + username.text + " < br /> ";   
  35.                     }   
  36.                 } else {   
  37.                     connection.disconnect();   
  38.                 }   
  39.             }   
  40.                
  41.             private function onLogin(event):void {   
  42.                  inputMsg.enabled  =  true ;   
  43.                  sendBtn.enabled  =  true ;   
  44.   
  45.                  chatRoom  =  new  Room( connection );   
  46.                 chatRoom.setRoomJID(connection.getJID());   
  47.                  chatRoom.roomName  =  CHATROOM ;   
  48.                  chatRoom.nickname  =  connection .username;   
  49.                  chatRoom.conferenceServer  =  "conference."  + SERVER_NAME;   
  50.                    
  51.                 chatRoom.join();   
  52.                 chatRoom.addEventListener(RoomEvent.GROUP_MESSAGE, groupMessage);   
  53.             }   
  54.                
  55.             private function groupMessage(event):void {   
  56.                 displayUserMessage(getNickName(event.data.from) , event.data.body );   
  57.             }   
  58.   
  59.             private function getNickName(jid : String) : String {   
  60.                 var  name  =  jid .split("/")[1];   
  61.                 if ( name  == null) {   
  62.                      name  =  "Message" ;   
  63.                 }   
  64.                 return name;   
  65.             }   
  66.                
  67.             private function displayUserMessage(user:String, message:String) : void {   
  68.   
  69.                 var fontColor :  String  =  "#002bd2" ;   
  70.                 if ( user  == chatRoom.nickname) {   
  71.                      fontColor  =  "#8e2800" ;   
  72.                 }   
  73.   
  74.                 chatContent.htmlText += " < font   color = '" + fontColor + "' > < b > " + user + ": </ b >  " + message + " </ font > < br   /> ";   
  75.             }   
  76.                
  77.             private function sendMsg():void {   
  78.                 if (inputMsg.text != "") {   
  79.                     chatRoom.sendMessage(inputMsg.text);   
  80.                      inputMsg.text = "" ;   
  81.                 }   
  82.             }   
  83.   
  84.         ]]   
  85.      </ mx:Script >   
  86.   
  87.   
  88.      < mx:Label   x = "10"   y = "10"   text = "UserName" />   
  89.      < mx:TextInput   id = "username"   x = "80"   y = "8"   width = "92" />   
  90.      < mx:Label   x = "180"   y = "10"   text = "Password" />   
  91.      < mx:TextInput   id = "password"   x = "244"   y = "8"   width = "99"   displayAsPassword = "true" />   
  92.      < mx:Button   x = "351"   y = "8"   label = "Login"   click = "doLogin()" />   
  93.      < mx:TextArea   id = "chatContent"   x = "10"   y = "36"   width = "397"   height = "171" />   
  94.      < mx:TextInput   id = "inputMsg"   enabled = "false"   x = "12"   y = "215"   width = "333"   enter = "sendMsg()"   />   
  95.      < mx:Button   id = "sendBtn"   enabled = "false"   x = "353"   y = "215"   label = "Send"   click = "sendMsg()"   />   
  96. </ mx:Application >   

 

参考

http://www.dgrigg.com/post.cfm/09/05/2006/XIFF-Actionscript-3-for-Flex-2

Flex2基于XMPP的chat程序 (一)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论