Signalr:如何使用 Xmpp Client.Send 方法发送复杂对象?

Posted

技术标签:

【中文标题】Signalr:如何使用 Xmpp Client.Send 方法发送复杂对象?【英文标题】:Signal R: How to send a complex object with XmppClient.Send Method? 【发布时间】:2018-05-07 10:11:30 【问题描述】:

我一直在使用信号 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);
     

    我知道这不是正确的做法。这只是一种解决方法。但这在某种程度上是有效的。

    我想知道是否有任何方法可以传递自定义对象,而不是发送新的 Matrix.Xmpp.Client.Message 对象作为 xmppClient.Send() 中的参数 或者有什么方法可以在 Matrix.Xmpp.Client.Message 中传递对象(不是字符串)。

    我正在循环收件人并发送群聊消息。还有其他办法吗?我尝试通过传递组名并将消息类型更改为 GroupChat。但是还是不行。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

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

msg.Add(myCustomType)

Xml 样本:

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

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

【讨论】:

您能告诉我如何向群组发送消息吗?截至目前,我只是从 CSV 循环每个收件人并发送消息。这是一种解决方法。但我需要一个直截了当的解决方案。 学习矩阵代码示例,你需要的都有

以上是关于Signalr:如何使用 Xmpp Client.Send 方法发送复杂对象?的主要内容,如果未能解决你的问题,请参考以下文章

UWP 和 Microsoft.AspNetCore.SignalR.Client Release 配置问题

如何进行多平台部署Client和Server详细讲解

在 4.6.2 Framework 中部署 .NET Standard 程序集 (Microsoft.AspNetCore.SignalR.Client)

SignalR:服务器如何建立与客户端的连接?

signalR client属性中的大致方法

python-xmpp 收到消息