Как получить чей-то аватар / фото с 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);
        }
    }

Я думаю, я не могу отменить хэш, но я хочу получить аватар / фотографию человека. Как мне этого добиться?

2 ответа

Решение

Вам нужно обработать события VCard и ответы от 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. Обратите внимание, это происходит, когда пользователь запрашивает 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;
            }


        }
    }

Это то, что происходит, когда кто-то запрашивает информацию VCARD из XMPP, а тип IQ совпадает с правильными данными. Затем вы можете вытянуть фото из vcard.Photo,

Вы запускаете тягу с помощью:

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

Первая строка - это запрос к XMPP-серверу, который форма VCARD использует для запроса информации о пользователе.

Во второй строке указывается другой граббер (своего рода обратный вызов), который используется формой для ожидания поступления информации, а затем для анализа необходимой информации. В этом случае граббер находится в новой форме, так что основному приложению не нужно беспокоиться о разборе этой информации.

Вы можете просмотреть весь исходный код, распаковав zip-файл AGSXMPP на свой локальный диск и просмотрев папку Samples\VS2008\miniclient.

Вы можете нажать на ссылку:http://forum.ag-software.de/thread/192-How-to-save-vcard-data

Другие вопросы по тегам