2011-06-19 30 views
1

檢索有人的頭像/照片,這是我到目前爲止有:如何使用agsXmpp

void xmppConnection_OnReadXml(object sender, string xml) 
    { 
     if (xml.Contains(XmlTags.PhotoOpen)) 
     { 
      int startIndex = xml.IndexOf(XmlTags.PhotoOpen) + XmlTags.PhotoOpen.Length; 
      int length = xml.IndexOf(XmlTags.PhotoClose) - startIndex; 
      string photoHash = xml.Substring(startIndex, length); 
     } 
    } 

我想我不能撤消的哈希,但我想一開始一個人的頭像/照片。我如何實現這一目標?

回答

4

您需要處理來自XMPP連接的電子名片事件和響應:

 private void vcardToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     RosterNode node = rosterControl.SelectedItem(); 
     if (node != null) 
     { 
      frmVcard f = new frmVcard(node.RosterItem.Jid, XmppCon); 
      f.Show(); 
     } 
    } 

以上是從AGSXMPP下載miniclient解決方案的例子。請注意,它發生在用戶爲用戶請求VCARD時。不過,您可以隨時啓動該請求。

private void VcardResult(object sender, IQ iq, object data) 
    { 
     if (InvokeRequired) 
     { 
      // Windows Forms are not Thread Safe, we need to invoke this :(
      // We're not in the UI thread, so we need to call BeginInvoke    
      BeginInvoke(new IqCB(VcardResult), new object[] { sender, iq, data }); 
      return; 
     } 
     if (iq.Type == IqType.result) 
     { 
      Vcard vcard = iq.Vcard; 
      if (vcard!=null) 
      { 
       txtFullname.Text = vcard.Fullname; 
       txtNickname.Text = vcard.Nickname; 
       txtBirthday.Text = vcard.Birthday.ToString(); 
       txtDescription.Text = vcard.Description; 
       Photo photo = vcard.Photo; 
       if (photo != null) 
        picPhoto.Image  = vcard.Photo.Image; 
      } 


     } 
    } 

也就是說當有人從XMPP請求電子名片信息和IQ類型的正確數據匹配會發生什麼。您可以從thenpull的vcard.Photo照片。

您觸發與拉:

VcardIq viq = new VcardIq(IqType.get, new Jid(jid.Bare)); 
con.IqGrabber.SendIq(viq, new IqCB(VcardResult), null);  

第一行有請求到XMPP服務器,即電子名片的形式使用要求的用戶信息。

第二行有,建立另一個採集卡(各種各樣的回調),該表單使用等待信息到達,然後解析出必要的信息。在這種情況下,採集是一種新的形式,使主應用程序不必擔心解析這些信息。

您可以通過提取AGSXMPP zip文件到本地驅動器,並期待在Samples \ VS2008 \ miniclient文件夾看看整個源。

0

您可以點擊鏈接:http://forum.ag-software.de/thread/192-How-to-save-vcard-data

+0

對於窗口的方式使用此代碼:寫真照片= vcard.Photo ; 如果(照片!= NULL) picPhoto.Image = vcard.Photo.Image;所以,如果我使用WPF,我該怎麼辦? – ppp