SessionManager负责在xmppconnection 连接会话处理。比如处理连接错误和添加会议监听和检索用户连接,等。
SessionManager实现了接口ConnectionListener,ConnectionListener的定义:
public interface ConnectionListener {
public void connectionClosed();
public void connectionClosedOnError(Exception e);
public void reconnectingIn(int seconds);
public void reconnectionSuccessful();
public void reconnectionFailed(Exception e);
}
可以看出,ConnectionListener定义了关闭、重连、失败等操作。
SessionManager的session初始化,
/** * Initializes session. * * @param connection the XMPPConnection used in this session. * @param username the agents username. * @param password the agents password. */ public void initializeSession(XMPPConnection connection, String username, String password) { this.connection = connection; this.username = username; this.password = password; this.userBareAddress = StringUtils.parseBareAddress(connection.getUser()); // create workgroup session personalDataManager = new PrivateDataManager(getConnection()); // Discover items discoverItems(); ProviderManager.getInstance().addExtensionProvider("event", "http://jabber.org/protocol/disco#info", new Features.Provider()); }
设置discoverItems ,DiscoverItems 是一个IQ包,它用于请求和接受相关 XMPP 实体,另外,它能被寻址查询,比如通过JID,或者节点名。
/** * Does the initial service discovery. */ private void discoverItems() { ServiceDiscoveryManager disco = ServiceDiscoveryManager.getInstanceFor(SparkManager.getConnection()); try { discoverItems = disco.discoverItems(SparkManager.getConnection().getServiceName()); } catch (XMPPException e) { Log.error(e); discoverItems = new DiscoverItems(); } }