现在的位置: 首页 > 综合 > 正文

Instant Messaging java(第二章) 03

2013年02月14日 ⁄ 综合 ⁄ 共 2524字 ⁄ 字号 评论关闭

 

2.1.4Jabber包怎么路由
理解Jabber路由计划的关键是Im怎么实现用户之间,而非clientclient,机器到机器。换句话说,一个Im消息是发送到逻辑用户,不是网络上那个特别的机器。Im路由系统的重要职责是将包访送给指定用户,无论用户在什么网络环境下。
Im的一个重要特征是跨越空间和时间。Message跨越空间意味着Im路由系统使Packets穿越的网络,什么地方发送,什么地方接收。
IM穿越时空意味着接受和发送都是瞬间完成。理想的状态时实时的。然而Jabber系统不能保证用户一直在线接受数据。IM路由系统只有在接受方在线的情况下才能接受。
路由过程开始与JabberIDPackets是一个JabberID,这个jabberID的属性包含着一些信息。这些信息决定着告诉服务器应该路由到那个服务。回想第一章中描述,JabberID包含着客户的信息和服务器的信息。一个完整的JabberID是user@domain/resource。从软件的角度来说,就是解析JabberID。我们看一下java代码:
public class JabberID{
String user;
public String getUser() { return user; }
public void setUser(String name){ user = name; }
String domain;
public String getServer() { return domain; }
public void setServer(String name){ domain = name; }
public String getDomain() { return domain; }
public void setDomain(String name){ domain = name; }
String resource;
public String getResource() { return resource; }
public void setResource(String value){ resource = value; }
类的开始定义几个变量存储用户,域名,和JabberID资源。适当的Set/get方法使得可以访问。成员变量还被用到其他的更多的地方:
public boolean equalsDomain(String domain){
if ( this.domain == null ^ domain == null ) {
return false;
}
return this.domain.equalsIgnoreCase(domain);
}
public boolean equalsDomain(JabberID testJid){
return equalsDomain(testJid.domain);
}
public boolean equalsUser(String user){
if ( this.user == null ^ user == null ) {
return false;
}
return this.user.equalsIgnoreCase(user);
}
public boolean equalsUser(JabberID testJid){
return equalsUser(testJid.user);
}
public boolean equalsResource(JabberID test){
return equalsResource(test.resource);
}
public boolean equalsResource(String test){
if ( resource == null ^ test == null ) {
return false;
}
return resource.equalsIgnoreCase(test);
}
public boolean equalsUser(String user, String resource){
return equalsUser(user) && resource.equals(resource);
}
public boolean equals(JabberID jid){
return equalsUser(jid) && equalsDomain(jid) && equalsResource(jid);
}
public boolean equals(String jid){
return equals(new JabberID(jid));
}public void setJID(String jid){
if (jid == null){
user = null;
domain = null;
resource = null;
return;
}
int atLoc = jid.indexOf("@");
if (atLoc == -1){
user = null;
} else {
user = jid.substring(0, atLoc).toLowerCase();
jid = jid.substring(atLoc + 1);
}
atLoc = jid.indexOf("/");
if (atLoc == -1) {
resource = null;
domain = jid.toLowerCase();
} else {
domain = jid.substring(0, atLoc).toLowerCase();
resource = jid.substring(atLoc + 1).toLowerCase();
}
}public JabberID(String user, String domain, String resource){
setUser(user);
setDomain(domain);
setResource(resource);
}
public JabberID(String jid){
setJID(jid);
}
public String toString(){
StringBuffer jid = new StringBuffer();
if (user != null){ jid.append(user);
jid.append("@");
}
jid.append(domain);
if (resource != null){
jid.append("/");
jid.append(resource);
}
return jid.toString();
}
}

抱歉!评论已关闭.