2016-11-05 5 views
0

Я использую XMPPFramework для iOS для реализации группового чата (MUC) с базовыми данными по умолчанию (XMPPMessageArchivingCoreDataStorage).XMPPMessageArchivingCoreDataStorage duplicate entry - XMPP MUC

Я могу отправлять и получать сообщения между двумя устройствами.

self.xmppRoom = //Get room instance; 
[message addAttributeWithName:@"id" stringValue:[self.xmppStream generateUUID]]; 
[self.xmppRoom sendMessage:message]; 

XML Формат:

<message><request xmlns="urn:xmpp:receipts"></request><body>{ 
    "mediaItem" : "0", 
    "body" : "Sending Message 1" 
}</body><thread>2012C10A-6CAD-4C29-86BD-D93334FA74C8</thread></message> 

когда я отправить сообщение, в базе данных XMPPMessageArchiving.sqlite, я могу видеть две записи одного и того же сообщения (исходящие 1 - и исходящими 0).

Outgoing Message

Как видно выше, идентификатор потока является то же самое и исходящие равно 0 и 1 указывают на входной (принимаемый) и исходящих (отправлено) сообщение.

Вопрос 1: Является ли это ожидаемым поведением данных ядра XMPPMessageArchiving для сохранения как входящего, так и исходящего сообщения?

Если да, то я думаю, что мне нужно извлечь только исходящее сообщение (ZOUTGOING = 1) из этой базы данных и отобразить на экране. Это верно?


Всякий раз, когда я бросить курить и повторно открыть приложение или восстановить соединение (XMPPStream) и войти в комнату ([self.xmppRoom joinRoomUsingNickname:[self.myJID user] history:nil];), я получаю такое же сообщение, что я послал ранее, с поступающим значением в 0. Это происходят каждый раз, когда я устанавливаю соединение. Как это можно избежать.

Duplication

Если я получаю сообщение от другого пользователя, он будет добавлен в этой базе данных с исходящее как «0». Как я могу фильтровать входящее сообщение, которое отправляется другим пользователем и моим отправленным сообщением (рис. 1).

строфа Сообщение:

<message id="5CF46E24-BF92-48AC-B13D-A1D7B4B45942" to="[email protected]" type="groupchat"><request xmlns="urn:xmpp:receipts"/><body>{ 
    "mediaItem" : "0", 
    "body" : "Sending Message 1" 
}</body><thread>2012C10A-6CAD-4C29-86BD-D93334FA74C8</thread></message> 

Любая помощь приветствуется.

ответ

1

Во-первых, для дублирующих сообщений MUC. Вы должны пойти за XMPPRoomCoreDataStorage, но не XMPPMessageArchiving. Лично мне не нравится поведение, которое XMPPMessageArchiving также обрабатывает сообщения MUC.

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

+0

Спасибо. Теперь я использую хранилище XMPPRoom, чтобы получить сообщение комнаты. Но вот некоторое время (один раз) я получил дублирующее сообщение. –

Смежные вопросы