對(duì)Xabber源碼解析的過(guò)程(3)connection

首先看ConnectionItem類,類的注釋是"抽象connection"我們是不是可以認(rèn)為它是在connection的層面上又抽象了一層,屬于connection的封裝,也就是說(shuō)這里還不是直接試用Smack的XMPPconnection的地方

ConnectionItem的幾個(gè)私有成員變量

private final ConnectionSettings connectionSettings;//Connection options.

private Connection ThreadconnectionThread;//XMPP connection.

private boolean isConnectionRequestedByUser;Connection was requested by user.

private Connection Statestate;//Current state.

private boolean disconnectionRequested;//Whether force reconnection is in progress.

private boolean registerNewAccount;Need to register account on XMPP server.

公有的構(gòu)造器傳入了很多參數(shù),可以看出來(lái)是XMPP連接服務(wù)器的配置參數(shù),

并且初始化成員變量ConnectionSetting,參數(shù)傳了進(jìn)去,講成員變量初始化了

下面有一些獲取成員變量值的方法,

然后下面發(fā)現(xiàn)一個(gè)很重要的方法:

/**

* Connect or disconnect from server depending on internal flags.

*

*@paramuserRequestaction was requested by user.

*@returnWhether state has been changed.

*/

public booleanupdateConnection(booleanuserRequest)

這個(gè)方法主要代碼如果網(wǎng)絡(luò)不行就執(zhí)行自己的disconnect()和onClose()方法,否則初始化ConnectionThread成員變量調(diào)用它的start()方法;

這里可以知道連接服務(wù)器可能就寫在ConnectionThread的start()方法里

往下面看disconnect()方法里面直接調(diào)用了ConnectionThread.getConnection().disconnect()方法是斷開與XMPP連接的,

就這樣,我們找到頭緒了,所以直奔ConnectionThread的start()方法

然后在start()方法里面找到了私有方法新開一個(gè)線程運(yùn)行createConnection(fqdn,port,useSRVLookup);

createConnection方法里初始化了一個(gè)XmppConnectionConfiguration.builder對(duì)象,設(shè)置了一些連接服務(wù)器的參數(shù),并傳入onReady執(zhí)行

onReady(builder)除了初始化一些SSL屬性之外 使用了一個(gè)第三方項(xiàng)目MemorizingTrustManager

然后

xmppConnection=newXMPPTCPConnection(builder.build());

xmppConnection.addAsyncStanzaListener(this,ACCEPT_ALL);

xmppConnection.addConnectionListener(this);

然后注冊(cè)了一個(gè)AccountRosterListener一定是RosterListener咯~用來(lái)監(jiān)聽(tīng)聯(lián)系人狀態(tài)的

和一個(gè)PingFailedListener,到這里- -就找到了建立XMPP連接的代碼,

之后的分析可以在看了ConnectionThread的基礎(chǔ)上繼續(xù)分析,可以利用alt+F7來(lái)查看在那些地方用到了這個(gè)類,以至于發(fā)現(xiàn)在那些地方發(fā)生了建立連接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,823評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評(píng)論 19 139
  • 關(guān)于XMPP最權(quán)威的講解:http://www.jabbercn.org/RFC3920(這個(gè)才是最權(quán)威的,下面文...
    隨風(fēng)飄蕩的小逗逼閱讀 1,643評(píng)論 1 5
  • (照片)感覺(jué)這鸚鵡顏色鮮艷應(yīng)該挺好畫的,于是開始挑戰(zhàn)這只鸚鵡。最后很滿意,超過(guò)自己的預(yù)期,作為一個(gè)0基礎(chǔ)的菜鳥,要...
    一個(gè)人的煙火Amber閱讀 219評(píng)論 0 0
  • 1、2017年下半年輕松賺到20萬(wàn)給父親買一輛車,給父母買一個(gè)最好的按摩椅,年底帶父母姥姥出去旅游。愿我現(xiàn)在及過(guò)去...
    ActorsagentXiao閱讀 139評(píng)論 0 0

友情鏈接更多精彩內(nèi)容