Как получить чей-то аватар / фото с agsXmpp - PullRequest
1 голос
/ 19 июня 2011

это то, что у меня есть:

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 ]

4 голосов
/ 20 июня 2011

Вам необходимо обработать события 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();
        }
    }

Выше приведен пример решения miniclient из загрузки 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.

0 голосов
/ 25 сентября 2012

Вы можете перейти по ссылке: http://forum.ag -software.de / thread / 192-How-to-save-vcard-data

...