Как повторно запросить список комнат и историю у muc в ejabberd

Когда пользователь присоединяется к ejabberd MUC, сервер отправляет пользователю полный список комнат и историю чата.

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

ATM Я работаю над этим, сериализуя список и историю комнат в json и сохраняя их в файле cookie. Однако это действительно плохая идея (tm), так как я могу очень быстро превысить общий лимит файлов cookie в 4 КБ для комнат с большим количеством пользователей.

Итак, вопрос: Как я могу повторно запросить информацию, которую сервер отправляет пользователю при присоединении, без фактического повторного присоединения к MUC?

Одним из подходов к спискам может быть отправка запроса iq с пространством имен «http://jabber.org/protocol/disco#items», но это неполно, поскольку не предоставляет информацию о присутствии или какую-либо расширенную информацию (например, реальные джиды для неанонимных комнат)


person Ollie Edwards    schedule 23.11.2010    source источник


Ответы (3)


При выгрузке страницы вам нужно отправить «присутствие недоступно»

При загрузке страницы (повторное присоединение к комнате) отправьте запрос «присутствие доступно» плюс «история». Например,

<history maxstanzas=20 />

Ссылка на схему XEP-0045

person Andrejs Pankins    schedule 01.03.2011

Хм. У меня нет решения для реестра, но для истории вы пробовали это?

<iq to="[email protected]" type="get">
  <history xmlns="http://www.jabber.com/protocol/muc#history" start="1970-01-01T00:00:00Z" direction="forward" count="100" />
</iq>
person DashK    schedule 18.05.2011

Попробуйте выйти из комнаты muc при выгрузке страницы и повторно отправить сообщение о присутствии в muc при перезагрузке страницы.

person pincopallo    schedule 07.12.2010
comment
без фактического воссоединения с MUC было важным моментом, который вы упустили. Если я выйду из комнаты при перезагрузке страницы, каждый пользователь будет уведомлен как таковой, а затем снова уведомлен, когда пользователь снова присоединится. Это несколько лишает смысла повторное присоединение к тому же сеансу. - person Ollie Edwards; 09.12.2010
comment
Да, ты прав! Это был быстрый способ добиться желаемого. Вероятно, единственным правильным решением является модификация ejabberd для повторной отправки истории и списка после каждого присутствия пользователя на Muc. Наслаждаться! - person pincopallo; 28.01.2011