openfire 下好友获取我们从源码进行分析:
1:登陆加载:
通过打印日志可以看出mpp:
<iq id="aL7s0-2" type="get"><query xmlns="jabber:iq:roster"></query></iq>
2.IQRouter.java:
IQRouter.java只是个IQ路由,它将请求转接到IQRosterHandler.java
private IQHandler getHandler(String namespace) {
IQHandler handler = namespace2Handlers.get(namespace);
if (handler == null) {
for (IQHandler handlerCandidate : iqHandlers) {
IQHandlerInfo handlerInfo = handlerCandidate.getInfo();
if (handlerInfo != null && namespace.equalsIgnoreCase(handlerInfo.getNamespace())) {
handler = handlerCandidate;
namespace2Handlers.put(namespace, handler);
break;
}
}
}
return handler;
}
3.IQRosterHandler.java
通过handleIQ方法:
if (recipientJID == null || recipientJID.getNode() == null ||
!UserManager.getInstance().isRegisteredUser(recipientJID.getNode())) {
returnPacket = manageRoster(roster);
}
进入到manageRoster方法:
Roster cachedRoster = userManager.getUser(sender.getNode()).getRoster();
4:获取好友信息UserManager.java:
从缓存中获取
public User getUser(String username) throws UserNotFoundException {
if (username == null) {
throw new UserNotFoundException("Username cannot be null");
}
// Make sure that the username is valid.
username = username.trim().toLowerCase();
User user = userCache.get(username);
if (user == null) {
synchronized (username.intern()) {
user = userCache.get(username);
if (user == null) {
user = provider.loadUser(username);
userCache.put(username, user);
}
}
}
return user;
}