Разбор XML-ответов веб-сокетов с помощью Strophe.js - PullRequest
0 голосов
/ 07 мая 2019

Я использую Strophe.js для подключения к XMPP-серверу через веб-сокеты. Вот пример ответа, который я получаю, когда подключенный пользователь получает сообщение:

<message xmlns='jabber:client' xml:lang='en' to='agent@chat.domain.com/6665193359253278721998' from='client@chat.domain.com/Mac' type='chat' id='purple42fccc5c'> 
  <archived by='agent@chat.domain.com' id='1557026681122740' xmlns='urn:xmpp:mam:tmp'/>
  <stanza-id by='agent@chat.domain.com' id='1557026681122740' xmlns='urn:xmpp:sid:0'/>
  <active xmlns='http://jabber.org/protocol/chatstates'/> 
  <body>
    1
  </body>
</message>

Проверил документы, но я не смог найти ничего полезного по этому вопросу. Есть ли у Strophe встроенный способ извлечения нужных мне данных из разных типов сообщений? Или мне нужно что-то еще?

1 Ответ

0 голосов
/ 17 мая 2019

После того, как соединение создано, вам нужно определить перехватчики для получения сообщения и возможности с ним взаимодействовать:

connection.addHandler(onMessage, null, 'message', 'chat');
connection.addHandler(onMessage, null, 'message', 'groupchat');

А затем вам просто нужно определить функцию onMessage.

onMessge: function(stanza) {
  $stanza = $(stanza);

  messageId = $stanza.attr('id') || null;
  to = $stanza.attr('to');
  from = $stanza.attr('from').toLowerCase();
  barejid = Strophe.getBareJidFromJid(from);

  type = $stanza.attr('type');
  bodies = $stanza.find('body');
  body = bodies.length ? Strophe.xmlunescape(Strophe.getText(bodies[0])) : '';
....

}

Надеюсь, это помогло.

...