c# - 带有私人聊天的SignlaR不同选项卡
问题描述
在这种情况下,我有 3 个私人聊天室
chatroom_ID 3 = woodycheung && Sifu,
chatroom_ID 4 = woodycheung && Sifu2
如果 sifu2 发送 msg 到 woodycheung 有问题
woodycheung 将在 chatroom3 和 chatroom4 中收到消息,
反之亦然。
这是我的代码,我在 Connect to Hub 上获得用户 ClaimTypes
public class CustomProvider : IUserIdProvider
{
public virtual string GetUserId(HubConnectionContext connection)
{
return connection.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
}
}
并在启动时注册signleton和signlar
services.AddSignalR();
services.AddSingleton<IUserIdProvider, CustomProvider>();
最后是sendmsg函数
public async Task SendMessageToUser(MsgRecord msg)
{
if (msg != null)
{
msg.Created_Date = System.DateTime.Now;
await _sqlDBContext.msgRecords.AddAsync(msg);
await _sqlDBContext.SaveChangesAsync();
await Clients.Users(msg.Sender,msg.Receiver).SendAsync("ReceiveMessage", msg);
}
}
我认为因为connectionList中有两个woodycheung
并且 Clients.Users(user1,user2).SendAsync() 方法会将 msg 发送给它找到的第一个用户,
我该如何避免这种情况。谢谢
解决方案
推荐阅读
- r - 为什么 R 的 strftime 会返回上个月的午夜?
- netezza - Netezza 外部表修剪 0 后的小数
- php - 单元测试应该有多详细和具体?
- powerbi - Power BI DAX - 评估正确的成本值
- php - 在数据库表 Laravel 中存储多个复选框值
- c++ - (C++)不应该这个 dynamic_cast 检索派生类
- javascript - 在应用程序中包含 Polyfill 包
- c# - 为什么我需要一个“虚拟”代码行才能加载 PresentationFramework?
- python - Scipy LDL分解返回意外结果
- c++ - 在 Eclipse 中调试 C/C++ 代码时如何查看全局变量?