GLOOX 1.0 API ----架構__架構

來源:互聯網
上載者:User

改定履曆:

2011-08-19-------------------建立文字文件

2011-08-25--------------------增加XMPP官網連結

2011-09-02-------------------新增對GLOOX1.0API文檔Main Page頁翻譯

        

        個人研究XMPP已經有大約一個星期的時間了,基本過程是先看了三天的RFC,包括RFC3290,RFC3291兩個主要協議,然後就是研究GLOOX1.0了。XMPP除了這兩個核心協議之外還有很多的XEP擴充協議。另外比較成熟的XMPP協議棧是GLOOX1.0版。前文已經貼出了RFC文檔,從這篇文章開始詳細介紹GLOOX,由於本人也是邊學邊記錄,有高手飄過時請不吝賜教。

        先貼出一下XMPP一些相關資源:

XMPP官網

gloox官方網站---這裡可以瞭解gloox的官方資訊,開發文檔等

gloox1.0API文檔---個人將官方的API文檔整站下載下來打包,方便本地查看,強烈建議大家詳細看一下文檔的Main Page頁,以對整個gloox的設計有一個大的層面上的理解

RFC3920------XMPP核心協議

RFC3921------立即訊息和出席資訊

xmpp協議PPT----XMPP PPT文檔

        先這些吧,以後隨時補充

---------------------------------------------------------------------------------------------------------------------

GLOOX協議棧是基於所謂“觀察者”設計模式設計的,如果你熟悉“觀察者”設計模式或者不熟悉但是在去深入瞭解GLOOX之前能去看一下“觀察者”模式會對學習GLOOX很有好處。其主要思想就是將觀察者“註冊”到“被觀察者”那裡,“被觀察者”有什麼風吹草動,觀察者都會知道,而進一步的處理就是在你的程式裡實現“觀察者”的若干虛函數。

環境搭建的話,本人用的是vs2008,下載下來gloox1.0,建立一個工程把gloox下src目錄裡所有的.h和.cpp全部載入,再添加一個工程用於對gloox進行測試,將兩個工程的組建目錄及依賴設定好即可。

----------------------------------------------------------------------------------------------------------------------

補充:博主近日學習GLOOX,重讀了API Main Page頁,覺得Main Page頁對於新手從較高層面上把握GLOOX有很大協助,且這裡往往是新手容易忽略的最直接的一手資料資訊來源,於是決定花時間翻譯出來。限於本人英文水平,大家可參照原英文文檔查看:


Introduction:

GLOOX的設計遵循了所謂的觀察者設計模式,含義是一切都是基於事件驅動的。使用GLOOX不如Jabber/XMPP網路有兩種方式------做為用戶端或組件。C++ XMPP伺服器庫請參考<http://camaya.net/glooxd>.

Note:

XMPP詳細規格說明書(RFC 3290)的11.5小節要求,線路上交換的資料只能是UTF-8編碼方式,由於GLOOX不知道輸入的資料是哪種編碼,所以GLOOX要求輸入資料必須是有效UTF-8編碼。

Event Handlers:

GLOOX裡最重要的工具就是事件處理器(event hanbdlers),當前,除了有為RFC中定義的基本協議服務的4種事件處理器,還有為XEP實現裡的事件和附加功能服務的其它許多事件處理器。另外,一個Tlog器、一個一般標籤處理器和一個串連事件處理器都是有效。

通常這些處理器都是虛介面,你可以繼承它們派生出一個類,並且實現一些這些虛函數。然後你可以註冊這樣的一個子類對象到各自的協議實現裡。下面是一個簡單的例子: [cpp]  view plain copy class MyClass : public PresenceHandler  {     public:       // reimplemented from PresenceHandler       virtual void handlePresence(const Presence& presence );       [...]  };    void MyClass::handlePresence( const Presence& presence )  {     // extract further information from the Presence object  } 
在某個地方你可以像下面這樣做: [cpp]  view plain copy OtherClass::doSomething()  {    Client* client = new Client( ... );    [...]    MyClass* handler = new MyClass( ... );    client->registerPresenceHandler( handler );  }  然後你可以使用Stanza類提供的眾多getters(即get首碼的成員函數)進一步提取節中的資料
現在,每次接收到一個presence節(非subscription節)時,handlePresence都會被調用,參數是當前節。然後你可以使用Stanza類提供的眾多getters(一般來講是get首碼的方法,此處理解為擷取stanza各資料的方法)進一步提取節中的資料以進一步處理。

幾乎所以的事件處理器的工作方式都是與這個例子相似的,接下來以使用串連事件處理器(class ConnectionListener)為例,再舉一例: [cpp]  view plain copy class MyClass : public ConnectionListener  {     public:       virtual void onConnect();         virtual bool onTLSConnect( ... );  };    void MyClass::onConnect()  {     // do something when the connection is established  }    bool MyClass::onTLSConnect( const CertInfo& info )  {     // decide whether you trust the certificate, examine the CertInfo structure     return true; // if you trust it, otherwise return false  } 
Note:

ConnectionListener是一個比較奇特的介面。你必須重新實現ConnectionListener::onTLSConnect()這個介面,如果你想成功串連一個啟用了TLS/SSL伺服器的話。儘管GLOOX試圖檢查伺服器的認證,但不會自動的信任該伺服器。必須由用戶端程式員或使用者來決定是否信任此伺服器。是否信任就由onTLSConnect()的傳回值來表示,FLASE意味著你不信任該伺服器,結果就是與伺服器的串連中斷。

先去吃飯了,回來待續……

Components

Jabber/XMPP網路中的一個組件是載入到伺服器上的,它運行在實際的服務軟體之外,但它有相似的許可權,組件使用XEP-0114中描述的協議去串連和驗證一個伺服器.類Component 支援該協議並且可以用於建立一個新的Jabber component.簡單的例子如下:
[cpp]  view plain

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.