1

これは私がこれまでに持っているものです:

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

2 に答える 2

4

XMPP接続からのVCardイベントと応答を処理する必要があります。

        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ダウンロードのミニクライアントソリューションの例からのものです。これは、ユーザーがユーザーの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にVCARD情報を要求し、IQタイプが適切なデータと一致した場合に発生します。次に、から写真をプルできますvcard.Photo

次の方法でプルをトリガーします。

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

最初の行は、VCARDフォームがユーザー情報を要求するために使用するXMPPサーバーへの要求です。

そこでの2行目は、フォームが情報の到着を待機し、必要な情報を解析するために使用する別のグラバー(ある種のコールバック)を設定します。この場合、グラバーは新しい形式であるため、メインアプリケーションはその情報の解析について心配する必要はありません。

AGSXMPP zipファイルをローカルドライブに抽出し、Samples \ VS2008 \ miniclientフォルダーを確認することで、ソース全体を確認できます。

于 2011-06-20T17:25:51.933 に答える
0

リンクをクリックできます:http://forum.ag-software.de/thread/192-How-to-save-vcard-data

于 2012-09-25T11:01:42.517 に答える