简介:

xmppFramework是一个基于RFC-3920的实现。支持多线程和线程保护(用了GCD),同时通用于所有的ios开发设备的通信框架。

介绍:

该框架主要分为两部分----The xmpp core和The extensions (roster, XEP's,etc)

xmppcore是RFC-3920的实现。

xmppcore介绍:

这部分中包含:

XMPPStream

XMPPParser

XMPPJID

XMPPElement

XMPPIQ

XMPPMessage

XMPPPresence

XMPPModule

XMPPLogging

XMPPInternal

这些类。

xmppstream类是开发者主要打交道的类,这个中包含了连接服务器,用户跟服务器的通信。

XMPPParser这个是一个内部类。主要用于解析。

XMPPJID这个用来标记用户。其中包含用户名和域名。

XMPPElement是XMPPIQ,XMPPMessage&XMPPPresence的基类。数据返回以后的处理。主要扩展实现了NSXMLElement,因此能查询到所有xml的元素。

XMPPModule提供了可插拔的扩展。


Elements: IQ, Message, & Presence

这个是XMPPElement的扩展:

XMPPIQ -> XMPPElement -> NSXMLElement -> NSXMLNode -> NSObject

XMPPMessage -> XMPPElement -> NSXMLElement -> NSXMLNode -> NSObject

XMPPPresence -> XMPPElement -> NSXMLElement -> NSXMLNode -> NSObject

另外NSXMLElement+XMPP提供了一些策略方法,方便对这些信息进行处理,如提取消息中得某变量:[elementattributeIntValueForName:@"age"];

XMPPStream 的配置

配置连接(以google邮件为例):

第一步:配置用户的JID:

xmppStream.myJID=[XMPPJIDjidWithString:@"user@gmail.com"];

第二步:配置需要连接的服务器:

xmppStream.hostName=@"myCompany.com";也可以是ip地址:

xmppStream.hostName=@"192.168.2.27";xmpp会设置一个默认端口。(这步要是没

有,xmpp自动 连接myjid的域名)。

添加代理:

xmpp使用的是多播代理:

添加代理:[xmppStreamaddDelegate:selfdelegateQueue:dispatch_get_main_queue()];

删除代理:[xmppStreamremoveDelegate:self];

添加模式

这个实现了插拔扩展。如连接断了以后重连模式:

xmppReconnect=[[XMPPReconnect alloc]init];

[xmppReconnect activate:xmppStream];

xmppReconnectaddDelegate:selfdelegateQueue:dispatch_get_main_queue()];

网络连接

NSError*error=nil;

if(![xmppStreamconnect:&error])

{

NSLog(@"Oops, I probably forgot something: %@",error);

}

认证

-(void)xmppStreamDidConnect:(XMPPStream*)sender

{

[xmppStreamauthenticateWithPassword:passworderror:NULL];

}