9.gloox 之 Client

Client 類,實現了一個基本的Jabber客戶端,派生自 ClientBase類安全

詳細說明:
此類實現了一個基本的Jabber客戶端
它支持SASL Authentication (SASL驗證)以及TLS(加密),都是分別自動切換 "啓用或關閉" 狀態的。
若是服務器支持,它們就會被自動地啓用。服務器

使用方法:建立一個Client類對象,傳入鏈接驗證信息(Jid,密碼),驗證信息在構造時傳入或以後Set進去都是能夠的。
而後你應該爲實現各自的接口註冊對應的處理器。
(ConnectionListener,PresenceHandler,MessageHandler,IqHandler,SubscriptionHandler等處理器)
調用connect()鏈接到服務器。
注意:
   雖然MessageHandler接口仍然有效(在之後的版本中也有效),可是建議在嚴肅的消息傳送上使用新類MessageSession。
簡單示例:
 using namespace gloox;函數

 void TestProg::doIt()
 {
   Client* j = new Client( "user@server/resource", "password" );
   j->registerPresenceHandler( this );                     //能夠看出TestProg類,繼承了PresenceHandler類或它的派生類
   j->disco()->setVersion( "TestProg", "1.0" );
   j->disco()->setIdentity( "client", "bot" );
   j->connect();
 }this


 virtual void TestProg::handlePresence( Stanza *stanza )
 {
   // handle incoming presence packets here
 }加密

然而,若是你啓用了RosterManager,你能夠跳過出席處理的步驟。
默認狀況,gloox庫爲了應用程序的考慮,會處理幾個IQ名空間裏節(從服務器發來),這些包括:
一、jabber:iq:roster  默認狀況,服務器端的花名冊被取出和處理。利用rosterManager()函數和RosterManager類對Roster進行操做。
二、XEP-0092(軟件版本):若是沒有明確指定版本號,那麼就以字符串「based on gloox」爲gloox庫的當前版本發佈出去。
三、XEP-0030(服務發現):全部被支持或有效的服務被髮布。沒有任何返回事項。
注意:
    一、gloox 0.9版,默認狀況,延承初始出席的優先權,是0.
    二、gloox 0.9版,初始出席被自動發送。即 出席:有效,優選權值:0。欲使初始出度無效,則在鏈接以前調用setPresence(),並傳入
       值爲PresenceUnavailable的參數,便可。
SASL Authentication (SASL驗證)
另外,相對於簡單的基於IQ的驗證(XEP-0078),gloox提供幾種SASL驗證機制。
一、DIGEST-MD5:若是賬號和密碼都在Client對象中提供了,這種機制是首選,即便沒有TLS加密也是安全的。
二、PLAIN:若是DIGEST-MD5無效,就使用此種機制。在沒有TLS加密時是不安全的。
三、ANONYMOUS:此種機制在沒有提供賬號和密碼時使用。服務器將隨機產生臨時賬號和資源,提供限制的有效服務。
四、EXTERNAL:此種機制目前只對客戶端提供了證書和保密關鍵字(private key)而有效,服務器試圖經過外部計算出客戶端。舉例來講,使用提供spa

的證書或IP地址。(在未來將提升證書/關鍵字有效性的限制)
固然,這些機制都不可靠,除非服務器提供它們。.net

Client (const std::string &server)
構造一個只能用來註冊新賬戶的Client對象。SASL 和 TLS 默認下己經開啓,經過查找服務記錄端口將被限制。
做爲替代,你也能夠顯示調用setPort來指定端口。
參數:server 將要鏈接到的服務器指針

Client (const JID &   jid,
 const std::string &   password,
 int     port = -1
 ) 
構造一個Client對象。SASL 和 TLS 己經開啓(默認)。此構造函數會被多數客戶端看成默認構造函數使用。服務器地址將在提供的JID中獲得。
實際主機將經過服務記錄肯定。JID的域名部分在沒有找到服務記錄時被用做後備,或者你能夠調用setServer()函數另外設置服務器地址。
參數:
     username  JID賬號服務器以前的部分.
     resource  JID的資源.
     password  賬號認證的密碼
     server          JID的服務器部分或將要鏈接到的主機名。若是它們不相同,將使用第二個
     port          將要鏈接到服務器端口,默認-1,意思是通過DNS服務查找。server


void addPresenceExtension ( StanzaExtension * se)
使用此函數你能夠添加一個隨每一個任何出席節一塊兒發送的StanzaExtension類對象(即擴展節)。用例包含如下,簽名的出席(GPGSigned,XEP-0027對象

),VCard是通告的具體實現(VCardUpdate XEP-0153),和其它(參閱StanzaExtension的派生類)
參數:
   se   加入的StanzaExtension 對象。Client對象成爲傳入的StanzaExtension的宿主。
注意:
   目前沒有辦法選擇地刪除一個擴展。調用removePresenceExtensions() 將刪除所有的擴展。

void bindResource ( )
在程序調用ConnectionListener::onResourceBindError(),通知你程序綁定資源錯誤時,你能夠調用此函數被將從新試圖綁定一個資源。
你也許(或應該)在發生這種事情以前在程序的某個地方調用setResource()函數。

void disableRoster()
此函數使花名冊的自動管理無效。以後,若是你想擁有一個花名冊,不得不本身追蹤每一個到達的出席信息。

void disconnect()
斷開與服務器的鏈接

bool login()
初始化一個登陸嘗試(目前 不支持 SASL擴展)。這對於註冊一個新賬號以後比較有用(方便)。

簡簡單單地調用setUserName()和setPassword()而後調用 login()。

(個人理解,在客戶端程序中,註冊一個新賬號後,不用退出程序,直接調用login()直接實現登陸)。
返回值:
   true  說明登陸嘗試被成功開啓,不然返回false。返回值不能代表登陸成功,只是代表登陸嘗試被成功發起。

void nonSaslLogin() [ protected 成員函數]
初始化 非SASL登陸

Presence presence() const
返回當前的出席

int priority()const
返回當前優先權

void removePresenceExtensions()
刪除由addPresenceExtension()函數添加的全部擴展

const std::string& resource() const
返回當前己準備的資源

RoserManager* rosterManager()
此函數返回一個指向RosterManager對象的指針。

GLOOX_DEPRECATED void setForceNonSasl(bool force=true)
這是一個暫時強制使用非SASL登陸(Non-SASL login )的方法。你不須要使用它
參數:
   force   肯定是否強制Non-SASL驗證。默認值爲true。
反對:請更改服務器適當地支持SASL鏈接做爲代替

void setPresence(Presence              presence,
                 int                   priority = 0,
                 const std::string &   msg=""
)
用來設置實體的出席。若是在創建鏈接以前調用,那麼設定值就會與初始出席一塊兒發送。若是鏈接創建以後調用,出席會馬上被髮送出去。
參數:
   presence   設定的Presence值
   priority   (可選)一個可選的優先值。正當值爲: -128<=priority<=127
   msg        (可選)出席狀態的描述信息
從0.9 版本支持

void setResource (const std::string& resouce)
設定用於鏈接到XMPP服務器的資源
參數:
   resource   用來登陸進服務器的資源

void setUsername( const std::string& username)
設定用於鏈接到XMPP服務器的賬號
參數:
   username  用來進行身份驗證的用戶賬號

const std::string& status()const
返回當前狀態信息

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/night_cat/archive/2009/05/31/4226508.aspx

相關文章
相關標籤/搜索