Сигнал R: Как отправить сложный объект с помощью метода XmppClient.Send? - PullRequest
0 голосов
/ 07 мая 2018

Я использую сигнал R для отправки простых сообщений чата. Теперь у меня есть требование сдать сложный объект.

chatEventHubProxy.invoke('sendGroupMessage', jsonObject, recipients, message, chatType).done(function() {
  self.chatEventLog('Chat message send success to ' + recipients);
}).fail(function(error) {
  console.log('Chat message send failure reason ' + error);
})

Это обходной путь, который я использовал. Я использую объект в методе ниже только ради POC. Я бы изменил его на соответствующую модель.

От клиента к серверу,

 public void sendGroupMessage(object jsonObject, string msgTo, string msgBody, int chatCategory)
 {
      string[] recipients = msgTo.Split(',');
      foreach (string recipient in recipients)
      {
           XmppClient xmppClient = XmppClients[Context.ConnectionId];
           var msg = new Matrix.Xmpp.Client.Message(recipient, MessageType.Chat, body: msgBody, subject: jsonObject.ToString(), thread: chatCategory.ToString());
           xmppClient.Send(msg);
      }
  }

С сервера на клиент,

private void xmppClient_OnMessage(object sender, MessageEventArgs e)
{
     DisplayEvent("OnMessage");
     var message = new Message { From = e.Message.From, Body = e.Message.Body, Subject = e.Message.Subject, ChatCategory = e.Message.Thread };
     if (e.Message.XDelay != null)
     {
         message.Stamp = e.Message.XDelay.Stamp;
     }

     if (e.Message.Body != null)
     {
          Clients.Client(Context.ConnectionId).onMessage(message);
     }
}
  1. Я знаю, что это не правильный способ сделать. Это просто обходной путь. Но это работает в настоящее время в некоторой степени.

  2. Я хочу знать, есть ли способ передать пользовательский объект вместо отправки нового Matrix.Xmpp.Client.Message объекта в качестве параметра в xmppClient.Send () Или есть способ передать объект в Matrix.Xmpp.Client.Message (не в виде строки).

  3. Я зацикливаю получателей и отправляю сообщение для группового чата. Есть ли другой способ сделать? Я попытался передать имя группы и изменить тип сообщения как GroupChat. Но все равно это не сработало.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 25 мая 2018

Как клиент в XMPP вы отправляете только строфы типа или Протокол XMPP и MatriX являются расширяемыми. Поэтому можно добавить любой тип полезной нагрузки (пользовательский объект) и дочерние элементы к строфам верхнего уровня, о которых я упоминал выше.

msg.Add(myCustomType)

Пример XML:

<message to='foo@bar.com' type='chat'>
   <x xmlns='my-custom namespace'>
      <foo/>
   </x>
</message>

См. Также раздел Расширение MatriX в Учебном пособии.

...