Smack 開發總結(一)管理連線

傻小孩b發表於2019-03-04

《Smack 開發總結(一)管理連線》
轉載請註明來自 傻小孩bgold.xitu.io/user/57e089…喜歡的可以關注我,不定期總結文章!您的支援是我的動力哈!

對於最新的Smack 4.1.8版本,本質上變化還是蠻大的。包括管理連線,好友管理,會話管理等。筆者最近和朋友一起整理最新版的smack應用,並且也準備記錄下開發總結,開發學習路上,共勉~

##管理連線

4.1.8版本的Smack,變化比較大的其中之一就是管理者連線,從官方文件裡面我們可以看出,管理連線變成了構建者模式去構建一個連線配置。主要在體現在類org.jivesoftware.smack.XMPPConnection
管理你的XMPP伺服器的連線,預設實現類為org.jivesoftware.smack.XMPPTCPConnection

程式碼如下所示:

(一) 構建連線 XMPPTCPConnection

        XMPPTCPConnectionConfiguration connectionConfiguration = XMPPTCPConnectionConfiguration.builder()
                .setHost(this.server)
                .setPort(this.port)
                .setServiceName(this.server)
                .setSendPresence(true)// support presence
                .setConnectTimeout(1000 * 10)
                .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)//越過證照
                .build();

        XMPPTCPConnection mConnection = new (connectionConfiguration);複製程式碼

####(二) 啟動連線、進行回撥監聽

mConnection.addConnectionListener(new ConnectionListener() {

            @Override
            public void connected(XMPPConnection connection) {
                LogTool.d("connected ,isExcuLogin :" + isExcuLogin);
                mConnection = (AbstractXMPPConnection) connection; 
                //連線成功回撥
            }

            @Override
            public void authenticated(XMPPConnection connection, boolean resumed) {
                LogTool.d("authenticated");
                // 登入鑑權回撥
            }

            @Override
            public void connectionClosed() {
                LogTool.d("connectionClosed");
                //連線被關閉回撥
            }

            @Override
            public void connectionClosedOnError(Exception e) {
                //連線被關閉出現異常回撥
            }

            @Override

            public void reconnectionSuccessful() {
                LogTool.d("reconnectionSuccessful");
                // 重新連線成功回撥
            }

            @Override

            public void reconnectingIn(int seconds) {
                LogTool.d("reconnectingIn");
                // 重新登入成功回撥
            }

            @Override
            public void reconnectionFailed(Exception e) {
                LogTool.d("reconnectionFailed " + e.getMessage().toString());
                // 重新連線失敗回撥
            }

        });複製程式碼

(三)管理登入

登入操作入口有兩種方式:1、在構建XMPPTCPConnection 的時候先傳入賬號密碼,當連線成功的時候會自動進行授權登入 2、連線成功的前提,可以直接通過呼叫XMPPTCPConnection的login()方法進行登入
1、構建時,自動登入

   XMPPTCPConnectionConfiguration connectionConfiguration = XMPPTCPConnectionConfiguration.builder()
                .setHost(this.server)
                .setPort(this.port)
                .setServiceName(this.server)
                .setSendPresence(true)// support presence
                .setUsernameAndPassword("賬號","密碼") // 只要構建的時候傳入即可
                .setConnectTimeout(1000 * 10)
                .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)//越過證照
                .build();複製程式碼

2、呼叫Login()進行登入

     try {
             this.mConnection.login(account,password);
        } catch (Exception e) {     
            getmLetterListener().sendHandlerLetter(SnakeServiceManager.HANDLER_CODE_LOGIN_FAILED,e);     
        }複製程式碼

預設情況的時候,我們會呼叫`ConnectionConfigurationd例項的setReconnectionAllowed(boolean)
會方法,這將會在連線斷開失敗的時候,進行重新連線。當然你手動進行連線也是可以的,呼叫AbstractXMPPConnection 例項的connect()方法將嘗試建立一個新的連線。

傻小孩b mark共勉,寫給在成長路上奮鬥的你

相關文章