在SignalR中,你可以使用自定义的数据结构或字典来建立用户和房间之间的关联。
一种常用的方法是创建一个Dictionary<string, string>,其中键(即key)是用户的Connection ID,值(即value)是用户所在的房间名称。
在用户加入房间时,你可以将用户的Connection ID与房间名称进行关联,并将其添加到字典中。例如:
// 创建一个用于存储用户和房间关联关系的字典
Dictionary<string, string> userRoomMap = new Dictionary<string, string>();
// 当用户加入房间时调用的方法
public async Task JoinRoom(string roomName)
{
// 获取当前连接的Connection ID
string connectionId = Context.ConnectionId;
// 将Connection ID与房间名称进行关联,并添加到字典中
userRoomMap[connectionId] = roomName;
// 其他逻辑:根据业务需求处理用户加入房间的操作
}
与上对应,当用户断开连接时,你可以查找与断开连接的Connection ID相关联的房间,并执行相应的操作。例如:
// 当用户断开连接时调用的方法
public override async Task OnDisconnectedAsync(Exception? exception)
{
// 获取断开连接的Connection ID
string connectionId = Context.ConnectionId;
// 如果在字典中找到了与Connection ID相关联的房间名称
if (userRoomMap.TryGetValue(connectionId, out string roomName))
{
// 其他逻辑:根据业务需求处理用户离开房间的操作
}
// 其他逻辑:根据业务需求处理用户断开连接的操作
await base.OnDisconnectedAsync(exception);
}
|