信号R:如何使用XmppClient.Send方法发送复杂对象?

时间:2018-05-07 10:11:31

标签: javascript c# signalr xmpp signalr-hub

我一直使用信号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. 我想知道是否有任何方法可以传递自定义对象,而不是在 xmppClient.Send()中发送新的 Matrix.Xmpp.Client.Message 对象作为参数或者有没有办法在 Matrix.Xmpp.Client.Message (而不是字符串)中传递对象。

  3. 我正在循环接收者并发送群聊的消息。还有其他办法吗?我试过传递groupname并将消息类型更改为GroupChat。但它仍然没有用。

  4. 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

作为XMPP中的客户端,您只发送类型或类型的节 XMPP协议和MatriX是可扩展的。所以可以将任何类型的有效负载(自定义对象)和子代添加到我上面提到的顶级节类型中。

msg.Add(myCustomType)

Xml样本:

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

另请参阅教程中的扩展MatriX 部分。