首页 > 解决方案 > 带有私人聊天的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 发送给它找到的第一个用户,

我该如何避免这种情况。谢谢

标签: c#

解决方案


推荐阅读