XMPPFramework源码分析<二> - JID
XMPP的地址叫做JabberID(简写为JID),用来标示XMPP网络中的各个XMPP实体。JID有三个属性:domain,node identifier和resource,其中domain是必不可少的部分。(注意:domain和user部分是不分大小写的,但是resource区分大小写。)
属性
user
通常表示一个向服务器或网关请求和使用网络服务的实体(比如一个客户端),当然它也能够表示其他的实体(比如在多用户聊天系统中的一个房间)。
domain
通常指网络中的网关或者服务器。
resource
通常表示一个特定的会话(与某个设备),连接(与某个地址),或者一个附属于某个节点ID实体相关实体的对象(比如多用户聊天室中的一个参加者)。
方法
+ (XMPPJID *)jidWithString:(NSString *)jidStr
根据JID的组成规则,从JID字符串中生成JID模型。
+ (BOOL)parse:(NSString *)jidStr outUser:(NSString **)user outDomain:(NSString **)domain outResource:(NSString **)resource
从字符串中分割出user、domain与resource。
JID字符串的规则为[node”@”]domain[“/“resource],所以查找”@”与”/“的
NSRange
获得user、domain、resource,小写转换
判断domain不包含”@””,resource不再包含”/“
copy
- (BOOL)isEqualToJID:(XMPPJID *)aJID options:(XMPPJIDCompareOptions)mask
该方法判断两个JID是否相同,mask限定比较的范围。比常用的
isEqual:
方法要快(isEqual:
是NSObject的方法,比较的是hash返回的值)。三个属性分别进行字符串内容比较
isEqualToString :
题外话:XMPPJID实现了
- (NSUInteger)hash
,利用MurmurHash2库,将3个属性字符串的hash值合并。所以JID可以直接进行isEqual:
比较。