XMPP4r - невозможно получить автономные сообщения

Я пытаюсь получить историю чата многопользовательской группы openfire, используя библиотеку ruby ​​xmpp4r с сервером openfire. Я могу сформировать запрос, но не получаю ответа от сервера. Ниже приведен запрос на обнаружение

iqr = Iq.new(:get,"example.com")
iqr.add_namespace("http://jabber.org/protocol/disco#info")
client.send(iqr)

и это запрос, который оформлен

<iq to='example.com' type='get' xmlns='http://jabber.org/protocol/disco#info'/>

но я не получаю ответа от сервера. Я следил за XEP-0160 и XEP-0013.

Что мне здесь не хватает?


Предоставляет ли openfire историю чата комнаты? Есть ли для этого API?

Любая помощь приветствуется. И я плохо разбираюсь в openfire, поэтому приветствую любую информацию о нем.


person bapu    schedule 26.12.2012    source источник


Ответы (1)


Насколько я знаю, вы можете получить историю чата из комнаты, только если эта комната была настроена на постоянное хранение и настроена на регистрировать беседы. Также существует ограничение на то, сколько дней назад сервер возвращает историю. Раньше ограничение составляло 2 дня, но было длительное обсуждение и несколько исправлений для исправить это ограничение.

Согласно другому вопросу здесь, на SO, невозможно получить история через прямой HTTP-запрос без предварительного проксирования истории через отдельный сервер XMMP, это то, что вы пытаетесь сделать, или вы разговариваете с сервером Openfire?

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

Поэтому, в зависимости от того, относится ли это к сервису, который вы запускаете, или если вы пытаетесь заархивировать чужой сервер, ваш пробег может насторожить. Если вы настроите сервер, это будет возможно, даже если не с помощью специального вызова API. Однако, если служба находится вне вашего контроля, вам может не повезти, так как истории может просто не быть ...

Надеюсь, это вам немного помогло, даже если я не могу дать конкретное решение.

Обнаружение службы

Согласно документации по обнаружению службы, ваш запрос не завершен:

<iq type='get'
    from='[email protected]/orchard'
    to='plays.shakespeare.lit'
    id='info1'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>

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

person Jonas Schubert Erlandsson    schedule 03.02.2013
comment
Я использую ruby ​​xmpp4r add_message_callback на MUCClient, чтобы получать сообщения группового чата, но он работает асинхронно. как изменить это поведение на синхронное ?? как вернуть эти сообщения из обратного вызова ?? - person bapu; 04.02.2013
comment
Согласно коду (github.com/ln/xmpp4r /blob/master/lib/xmpp4r/stream.rb#L351) вы можете дать методу send() блок, чтобы он ждал ответа и его синтаксического анализа. И похоже, что вы могли бы сделать то же самое с add_message_callback(). - person Jonas Schubert Erlandsson; 04.02.2013
comment
Я создал структуру раздела xml, используя xmpp4r, и его успешно проанализировали, но мой основной вопрос заключается в том, как получить соответствующий ответ в любую переменную ?? - person bapu; 04.02.2013
comment
Возможно, вам стоит прочитать примеры, которые они предоставляют с гемом (github. com / ln / xmpp4r / tree / master / data / doc / xmpp4r / examples) или, если это вам не помогает, расширьте свой вопрос, включив соответствующий код. Трудно помочь с проблемой, которая сейчас выходит за рамки того, что вы указали в исходном вопросе. - person Jonas Schubert Erlandsson; 04.02.2013
comment
Я использую (stackoverflow.com / questions / 11397172 /), чтобы получить историю группового чата, но во время синтаксического анализа этот сервер строфы xmpp не отправляет никакого ответа. Есть ли другой способ получить историю чата многопользовательской группы ?? - person bapu; 05.02.2013