Спецификация Закладок использует протокол Personal Eventing Protocol. Предположение, которое мы сделали для PEP в ejabberd с конфигурацией по умолчанию, - это количество сохраненных элементов на этих специальных узлах PubSub - «1».
Вы можете проверить это, отправив следующий запрос конфигурации узла:
<iq type='get'
id='config1'>
<pubsub xmlns='http://jabber.org/protocol/pubsub#owner'>
<configure node='storage:bookmarks'/>
</pubsub>
</iq>
Вы увидите, что ответ показывает, что максимальное количество элементов является «1»:
<iq from="[email protected]" type="result" to="[email protected]/MacBook-Pro-de-Mickael" id="config1">
<pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
<configure node="storage:bookmarks">
<x xmlns="jabber:x:data" type="form">
...
<field type="text-single" label="Max # of items to persist" var="pubsub#max_items">
<value>1</value>
</field>
...
</x>
</configure>
</pubsub>
</iq>
Это означает, что на самом деле что вы должны иметь только один набор закладок. Однако, это не мешает вам хранить несколько закладок в одном наборе, как последовать за:
<iq type='set' id='pip1'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<publish node='storage:bookmarks'>
<item id='current'>
<storage xmlns='storage:bookmarks'>
<conference name='Bookmark1'
autojoin='false'
jid='[email protected]'>
<nick>Mynick1</nick>
</conference>
<conference name='Bookmark2'
autojoin='true'
jid='[email protected]'>
<nick>Mynick2</nick>
</conference>
</storage>
</item>
</publish>
<publish-options>
<x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE' type='hidden'>
<value>http://jabber.org/protocol/pubsub#publish-options</value>
</field>
<field var='pubsub#persist_items'>
<value>true</value>
</field>
<field var='pubsub#access_model'>
<value>whitelist</value>
</field>
</x>
</publish-options>
</pubsub>
</iq>
ejabberd ответит с успехом:
<iq from="[email protected]" type="result" to="[email protected]/MacBook-Pro-de-Mickael" id="pip1">
<pubsub xmlns="http://jabber.org/protocol/pubsub">
<publish node="storage:bookmarks">
<item id="current"/>
</publish>
</pubsub>
</iq>
Вы можете запросить закладку, и проверить, что у вас есть две закладки в этой закладки набор:
<iq type='get' id='retrieve1'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<items node='storage:bookmarks'/>
</pubsub>
</iq>
и ответ является:
<iq from="[email protected]" type="result" to="[email protected]/MacBook-Pro-de-Mickael" id="retrieve1">
<pubsub xmlns="http://jabber.org/protocol/pubsub">
<items node="storage:bookmarks">
<item id="current">
<storage xmlns="storage:bookmarks">
<conference name="Bookmark1" autojoin="false" jid="[email protected]">
<nick>Mynick1</nick>
</conference>
<conference name="Bookmark2" autojoin="true" jid="[email protected]">
<nick>Mynick2</nick>
</conference>
</storage>
</item>
</items>
</pubsub>
</iq>
Вы можете сохранить несколько закладок в одном наборе. Просто загрузите все из них сразу. Итак, чтобы обновить набор закладок, вы должны сначала его прочитать, а затем сохранить обновленную версию, а не отправлять инкрементные изменения.
Тем не менее, я несколько раз читал спецификацию (XEP-0048 Bookmarks и XEP-0163 PEP). Я не вижу примера или ссылки на количество элементов на узле PEP. Все примеры показывают только один элемент. Цель PEP - трансляция обновлений состояния. Предположение в большинстве спецификаций состоит в том, что имеется только один элемент (один аватар, один геолокатор и т. Д.). Тем не менее, мы будем рады пересмотреть наше предположение, если мы сможем найти явный элемент в спецификации о количестве элементов, которые могут быть использованы.
Не могли бы вы рассказать нам, какую версию ejabberd вы используете, и как настроить pubsub? –
версия 15.06, и я просто обновил вопрос с конфигурацией pubsub. Имейте в виду, что pubsub работает отлично. Проблема в том, что я могу хранить только одну конференцию. Интересно, есть ли что-нибудь, что мне нужно изменить по каждому запросу, чтобы добавить конференцию? – nhenrique