附源码 vue3.0+.NET6实现聊天室(实时聊天SignalR)( 二 )


下图是我在渲染聊天列表时做的判断:
Q:如果好友不在线,获取不到对方的连接ID怎么办?
A:这个情况再去请求Hub接口是会报错的,因为对方的连接Id是空的 。我的做法是每次发送一条消息就会存进数据库里嘛,然后判断一下对方是否在线,不在线就获取他们之间的对话的最新一条消息,这里sql比较复杂,感兴趣的可以看看这个 。
看懂这个方法后,来看一下前端调用
基础使用
对前端感兴趣的可以看一下源码
群聊聊天思路详解:
/// /// 进入指定组/// /// /// 【附源码vue3.0+.NET6实现聊天室(实时聊天SignalR)】组的名称[HubMethodName(nameof(EnterRoom))]public void EnterRoom(string connectId, string roomName){Groups.AddToGroupAsync(connectId, roomName);}/// /// 群聊天(发送信息)/// /// public async Task SendGroupChat(string roomName, string groupGuId, string selfConnectionId, string senderId, string receiver, string message){var guid = senderId.ParseToLong();var groupguid = groupGuId.ParseToLong();var sender = _ChatLoginService.FindUserByGuid(guid).Result;await Clients.Group(roomName).SendAsync("groupMessages", new { roomName, sender, receiver, message });_GroupUserService.Update(s => s.GroupGuId == groupguid,f => new GroupUser{IsRead = false});//await Clients.Client(selfConnectionId).SendAsync("groupMessages", new { sender, receiver, message });}}
我们继续手撕源码,先看这个方法的参数 一共有6个
参数说明:-> 在中组名,如果没有这个组名则添加并进入列表,有则加入组
后面统称 "组"
1、 -> 组名
2、 -> 群聊的GUID
3、 -> 自己的连接ID
4、 -> 发送者的用户GUID
5、-> 接收者的GUID(这里指群聊的GUID)
6、 -> 发送的消息
Clients.Group(roomName).SendAsync("接受方法名",发送的消息)
首先要 进入到房间内:
把自己的连接ID放进去,以及群聊名称
Groups.AddToGroupAsync(connectId, roomName);
在群聊发送消息,需要做到:
1、通过发送消息到这个房间
2、通过来修改用户是否已读
3、通过 来判断是否自己发的,不是则展示群成员发的头像和所发的消息
4、通过 来判断这个群聊是否为指定的群