This commit is contained in:
youngq 2024-08-21 19:01:56 +08:00
parent 9fcab57b4b
commit 0d51178455
6 changed files with 86 additions and 27 deletions

View File

@ -295,7 +295,7 @@ namespace WGShare.API.Controllers.Frontend
_logger.LogInformation($@"开闭麦克分,推送一次,roomNum:{roomNum},enableMicr:{enableMicr},uid:{uid}");
// 通知所有人该用户麦克风状态
await _hubContext.Clients.Group(roomNum).OperMicr(userInfo);
await _hubContext.Clients.Group(roomNum).OperMicr(userInfo, UId);
}
/// <summary>
@ -316,7 +316,7 @@ namespace WGShare.API.Controllers.Frontend
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), uid, userInfo);
// 通知所有人该用户摄像头状态
await _hubContext.Clients.Group(roomNum).OperCamera(userInfo);
await _hubContext.Clients.Group(roomNum).OperCamera(userInfo, UId);
}
///// <summary>
@ -359,7 +359,7 @@ namespace WGShare.API.Controllers.Frontend
/// </summary>
/// <returns></returns>
[HttpPost("show-user")]
public async Task SetShowUser([FromQuery] string roomNum, [FromQuery] string? uid)
public async Task SetShowUser([FromQuery] string roomNum, [FromQuery] string uid, [FromQuery] string uname)
{
// 设置房间全员观看用户
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum, uid);
@ -370,7 +370,7 @@ namespace WGShare.API.Controllers.Frontend
// await _hubContext.Clients.GroupExcept(roomNum, connectId).ShowUser();
//}
await _hubContext.Clients.Group(roomNum).ShowUser();
await _hubContext.Clients.Group(roomNum).ShowUser(uid, uname, UId, UserName);
}
/// <summary>
@ -403,11 +403,11 @@ namespace WGShare.API.Controllers.Frontend
};
using (var pipe = RedisHelper.Instance.StartPipe())
{
// 进房第一人,则设置全员看ta
var script = $@"local exists = redis.call('HLEN', KEYS[1])
if exists == 0 then redis.call('HSET', KEYS[2], ARGV[1], ARGV[2]) end
return exists";
pipe.Eval(script, [RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId)], roomNum, UId);
//// 进房第一人,则设置全员看ta
//var script = $@"local exists = redis.call('HLEN', KEYS[1])
// if exists == 0 then redis.call('HSET', KEYS[2], ARGV[1], ARGV[2]) end
// return exists";
//pipe.Eval(script, [RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId)], roomNum, UId);
// 记录频道得用户信息
pipe.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), UId, userInfo);
@ -474,6 +474,43 @@ namespace WGShare.API.Controllers.Frontend
await _hubContext.Clients.Group(roomNum).AllLeave();
}
/// <summary>
/// 获取监控的轮询用户
/// </summary>
/// <returns></returns>
[HttpGet("polling")]
public async Task<IEnumerable<ChannelUserInfo>> GetPollingUser([FromQuery] string roomNum, [FromQuery] int count)
{
// 获取当前房间所有人id
var channelUserInfos = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
var polledUserIds = RedisHelper.Instance.SMembers(RedisKeyConstant.Data.GetPolledUserId(TenantId, roomNum));
// 排除已轮询的用户
var userInfos = channelUserInfos.Where(x => !polledUserIds.Contains(x.UID)).Take(count).ToList();
if (userInfos.Count < count)
{
// 数量不足,则从全部用户中取足
var takeCount = count - userInfos.Count < 0 ? 0 : count - userInfos.Count;
userInfos.AddRange(channelUserInfos.Take(takeCount));
// 删除记录,重新记录
RedisHelper.Instance.Del(RedisKeyConstant.Data.GetPolledUserId(TenantId, roomNum));
}
RedisHelper.Instance.SAdd(RedisKeyConstant.Data.GetPolledUserId(TenantId, roomNum), userInfos.Select(x => x.UID).ToArray());
return userInfos;
}
/// <summary>
/// 申请发言
/// </summary>
/// <returns></returns>
[HttpGet("apply-speak")]
public async Task ApplyToSpeak([FromQuery] string roomNum)
{
}
#region
/// <summary>
/// 分享上传文件

View File

@ -14,7 +14,7 @@ namespace WGShare.API.Hubs
/// <param name="userName"></param>
/// <param name="message"></param>
/// <returns></returns>
Task ReceiveMessage(string uid, string userName, string message);
Task ReceiveMessage(string uid, string userName, string message,long timestamp);
/// <summary>
@ -56,7 +56,7 @@ namespace WGShare.API.Hubs
/// 全员观看
/// </summary>
/// <returns></returns>
Task ShowUser();
Task ShowUser(string uid, string uname,string operUid, string operUserName);
/// <summary>
/// 用户加入频道回调
@ -68,7 +68,7 @@ namespace WGShare.API.Hubs
/// 用户退出频道回调
/// </summary>
/// <returns></returns>
Task UserLeave(string uid);
Task UserLeave(string uid);
/// <summary>
/// 所有用户退出频道
@ -82,21 +82,21 @@ namespace WGShare.API.Hubs
/// <param name="enableMicr"></param>
/// <param name="operUid">操作人UID</param>
/// <returns></returns>
Task OperAllMicr(bool enableMicr,string operUid);
Task OperAllMicr(bool enableMicr, string operUid);
/// <summary>
/// 用户关闭开启麦克风
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
Task OperMicr(ChannelUserInfo user);
Task OperMicr(ChannelUserInfo user, string operUid);
/// <summary>
/// 用户开启关闭摄像头
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
Task OperCamera(ChannelUserInfo user);
Task OperCamera(ChannelUserInfo user,string operUid);
/// <summary>
/// 管理员用户信息刷新

View File

@ -1,9 +1,11 @@
using Masuit.Tools;
using Masuit.Tools.DateTimeExt;
using Masuit.Tools.Maths;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using SqlSugar;
using System;
using System.Globalization;
using System.Security.Claims;
using System.Text;
using WGShare.API.Helpers;
@ -148,8 +150,7 @@ namespace WGShare.API.Hubs
Console.WriteLine($" {DateTime.Now}发送消息 roomNum" + rooNum);
Console.WriteLine($" {DateTime.Now}发送消息 msg" + msg);
await Clients.OthersInGroup(rooNum).ReceiveMessage(uid, uname, msg);
//await Clients.GroupExcept(rooNum, Context.ConnectionId).ReceiveMessage(uid, uname, msg);
await Clients.OthersInGroup(rooNum).ReceiveMessage(uid, uname, msg, DateTime.Now.GetTotalMilliseconds()); //await Clients.GroupExcept(rooNum, Context.ConnectionId).ReceiveMessage(uid, uname, msg);
}
/// <summary>

View File

@ -113,7 +113,7 @@ namespace WGShare.API
app.MapHub<SessionManageHub>("/session-manage").RequireCors(q => q.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
app.Run();
}
}
/// <summary>
/// 程序启动前删除redis中得数据

View File

@ -117,7 +117,7 @@
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.GetUser(System.String,System.String)">
<summary>
查询房间中所有用户信息
查询房间中的单个用户信息
</summary>
<returns></returns>
</member>
@ -175,7 +175,7 @@
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.SetShowUser(System.String,System.String)">
<member name="M:WGShare.API.Controllers.Frontend.RoomController.SetShowUser(System.String,System.String,System.String)">
<summary>
设置全员观看
</summary>
@ -204,6 +204,18 @@
<param name="roomNum"></param>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.GetPollingUser(System.String,System.Int32)">
<summary>
获取监控的轮询用户
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.ApplyToSpeak(System.String)">
<summary>
申请发言
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.AddFile(WGShare.Domain.DTOs.File.ShareFileInputDTO)">
<summary>
分享上传文件
@ -362,7 +374,7 @@
客户端消息
</summary>
</member>
<member name="M:WGShare.API.Hubs.IMessageClient.ReceiveMessage(System.String,System.String,System.String)">
<member name="M:WGShare.API.Hubs.IMessageClient.ReceiveMessage(System.String,System.String,System.String,System.Int64)">
<summary>
接受频道消息
</summary>
@ -405,7 +417,7 @@
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Hubs.IMessageClient.ShowUser">
<member name="M:WGShare.API.Hubs.IMessageClient.ShowUser(System.String,System.String,System.String,System.String)">
<summary>
全员观看
</summary>
@ -437,14 +449,14 @@
<param name="operUid">操作人UID</param>
<returns></returns>
</member>
<member name="M:WGShare.API.Hubs.IMessageClient.OperMicr(WGShare.Domain.Entities.ChannelUserInfo)">
<member name="M:WGShare.API.Hubs.IMessageClient.OperMicr(WGShare.Domain.Entities.ChannelUserInfo,System.String)">
<summary>
用户关闭开启麦克风
</summary>
<param name="user"></param>
<returns></returns>
</member>
<member name="M:WGShare.API.Hubs.IMessageClient.OperCamera(WGShare.Domain.Entities.ChannelUserInfo)">
<member name="M:WGShare.API.Hubs.IMessageClient.OperCamera(WGShare.Domain.Entities.ChannelUserInfo,System.String)">
<summary>
用户开启关闭摄像头
</summary>

View File

@ -52,21 +52,30 @@ namespace WGShare.Domain.Constant
/// </summary>
public class Data
{
private static string _prefix = "data:";
/// <summary>
/// 获取token
/// </summary>
/// <param name="refreshToken"></param>
/// <returns></returns>
public static string GetRefreshTokenKey(string refreshToken) => $@"data:refresh_tk:{refreshToken}";
public static string GetRefreshTokenKey(string refreshToken) => $@"{_prefix}refresh_tk:{refreshToken}";
public static string GetScreenShareIdKey => $@"data:screen_share_id";
public static string GetScreenShareIdKey => $@"{_prefix}screen_share_id";
/// <summary>
/// 获取Accesstoken Redis Key
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
public static string GetAccessTokenKey(string uid) => $@"data:access_tk:{uid}";
public static string GetAccessTokenKey(string uid) => $@"{_prefix}access_tk:{uid}";
/// <summary>
/// 获取已轮询过的用户
/// </summary>
/// <param name="tenantId"></param>
/// <param name="roomNum"></param>
/// <returns></returns>
public static string GetPolledUserId(string tenantId, string roomNum) => $@"{_prefix}polled_uid:te_{tenantId}ch_{roomNum}";
}