2013-11-03 41 views
0

我書面方式Windows 8的聊天程序與PaulFreunds XMPP庫 - PaulFreund/XMPPPaulFreund/XMPP接收標籤訂購

我有兩個問題:一是 - 我需要手工綁定我的資源。我不知道把代碼中的資源標籤放在哪裏。當客戶端連接時它需要發送,但我不能去那個地方。客戶端連接後發送標籤couses我錯誤。標籤:

 public void bindResource() 
    { 
     var iq = new XMPP.tags.jabber.client.iq(); 
     iq.type = XMPP.tags.jabber.client.iq.typeEnum.set; 
     var bind = new XMPP.tags.xmpp_bind.bind(); 
     var resource = new XMPP.tags.xmpp_bind.resource(); 
     resource.Add("myresource"); 
     bind.Add(resource); 
     iq.Add(bind); 
     Client.Send(iq); 
    } 

第二個也是有序棘手。我想用我的要求得到我的朋友列表:

 public void getFriends() 
    { 
     var iq = new XMPP.tags.jabber.iq.roster.query(); 
     var tag = new XMPP.tags.jabber.client.iq(); 
     tag.type = XMPP.tags.jabber.client.iq.typeEnum.get; 
     tag.Add(iq); 
     Client.Send(tag); 
    } 

它工作正常。但是在我從服務器獲得關於狀態的存在之後,我也想要用這個方法處理這個問題。 (讓我們稱之爲服務器,因爲我們都知道它來自我們名單上的每一個朋友)這是因爲我在我的聯繫人列表中設置在線值。我可以像現在這樣做:第一個狀態第二個朋友列表,但我需要做一些緩存文件,我不想做。我試着把它放在OnConnected事件中,但是在這個列表的早些時候我的朋友們也來了。

回答

0

該庫實現了一個狀態機,並且在您開始連接後到達BindingState後,應自動向服務器發送綁定請求,請參閱States。當資源綁定成功時,您將通過OnReceive事件接收結果。

對於你的第二個問題,雖然它可能在技術上是可能的,但它並不打算。 XMPP的存在可以在發佈者訂閱者模型上工作,假冒訂閱者的客戶端無法控制發佈者何時發送新的信息。即使服務器在連接時不會發布當前的聯繫人在線狀態,聯繫人也可能在此時連接,客戶端將收到狀態通知。 名冊管理是一項可選功能,不能代替您從狀態收集的信息(例如,名冊不會告訴您聯繫人的狀態)。

爲了提供有關用戶聯繫人的所有信息,您需要創建一個數據結構,該數據結構既包含附加的名單信息,也包含聯繫人的狀態。

作爲一個參考,你可以看看我實施的Windows 8信使Chat它,即使它並不完美應該給你如何管理你的XMPP連接的想法