Spark研究笔记6:重要的工厂类SessionManager(原创) CVT

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定义了关闭、重连、失败等操作。

SessionManagersession初始化,

/**
     * 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();
        }
    }

 

原文地址:https://www.cnblogs.com/openfire/p/3047614.html