Instant Messaging java(第二章) 03

 

2.1.4Jabber 包怎么路由
理解 Jabber 路由计划的关键是 Im 怎么实现用户之间,而非 client client ,机器到机器。换句话说,一个 Im 消息是发送到逻辑用户,不是网络上那个特别的机器。 Im 路由系统的重要职责是将包访送给指定用户,无论用户在什么网络环境下。
Im 的一个重要特征是跨越空间和时间。 Message 跨越空间意味着 Im 路由系统使 Packets 穿越的网络,什么地方发送,什么地方接收。
IM 穿越时空意味着接受和发送都是瞬间完成。理想的状态时实时的。然而 Jabber 系统不能保证用户一直在线接受数据。 IM 路由系统只有在接受方在线的情况下才能接受。
路由过程开始与 JabberID Packets 是一个 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();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值