Название: [РЕШЕНО]Список комнат (сервисов) на Jabber-сервере (QXMPP) Отправлено: Vitto74 от Декабрь 15, 2010, 10:06 Собственно основательно порывшись в http://qxmpp.googlecode.com/svn/tags/qxmpp-0.2.0/doc/html/index.html
не нашел как получить список комнат на своем сервере. Можно ли это сделать средствами QXMPP или придется читать XEP-0045 и допиливать самому? Название: Re: Список комнат на Jabber-сервере (QXMPP) Отправлено: Vitto74 от Декабрь 15, 2010, 15:20 Исследование протокола показало, что для получения списка комнат нужно отправить на сервер вот это
Код: <iq type='get' to='conference.sudouser.ru' id='purpledisco96444dcd'> Код: <iq from='conference.sudouser.ru' to='vitto74@sudouser.ru/Home' id='purpledisco96444dcd' type='result'> QXmppClient::discoveryIqReceived(const QXmppDiscoveryIq &) Но как отправить запрос на этот список я так и не нашел. Неужели вручную придется? Название: Re: Список комнат на Jabber-сервере (QXMPP) Отправлено: Vitto74 от Декабрь 20, 2010, 23:05 В QXMPP нет возможности посмотреть список комнат, поэтому сделал вручную.
Для начала нужно подготовится к принятию ответа на запрос т.к. придти он может быстрее, чем программа приготовится. Код: connect(Client, SIGNAL(discoveryIqReceived (const QXmppDiscoveryIq &)), this, SLOT(discoveryIqReceived (const QXmppDiscoveryIq &))); Затем нужно подготовить и отправить запрос на предоставляемые сервисы. Можно получить как все сервисы (например ICQ, MRIM транспорты или конференции) Так и сразу запросить список комнат, который с точки зрения протокола, выглядит как список сервисов предоставляемых conference.<host>. Отправляется запрос так Код: QXmppIq mes(QXmppIq::Get); //Мы хотим получить данные В результате отправится сообщение вида Код: <iq type='get' to='conference.<host>' id='random'> Теперь сервер пришлет нам ответ, который выглядит так Код: <iq from='conference.sudouser.ru' to='<user>@<host>/Home' id='тот самый random' type='result'> Сообщение ловится сигналом, который уже связан с нужным нам слотом. Сейчас запихаем этот список в QListWidget Код: if (iq.getId() != id){//Собственно это то сообщение, которого мы ждем? |