2010-11-23 4 views
5

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

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

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

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

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

ответ

0

Попробуйте покинуть комнату muc, когда страница выгружается и повторно отправляет присутствие в muc при повторной загрузке страницы.

+0

«без фактического воссоединения с MUC» был важным, что вы пропустили там. Если я покину комнату на перезагрузке страницы, каждый пользователь будет уведомлен как таковой, а затем снова будет уведомлен, когда пользователь присоединится. Это несколько поражает момент повторного подключения к той же сессии. – 2010-12-09 17:29:26

1

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

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

<history maxstanzas=20 /> 

Reference to XEP-0045 scheme

1

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

<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>