From d3caf711fb62e3f361790feef04cbbeb08d12e5d Mon Sep 17 00:00:00 2001 From: youngq Date: Fri, 16 Aug 2024 16:29:04 +0800 Subject: [PATCH] 1 --- WGShare.API/Controllers/AuthController.cs | 5 + .../Controllers/Backend/UserController.cs | 2 +- .../Controllers/Basic/BasicController.cs | 13 ++- .../Controllers/Frontend/RoomController.cs | 109 ++++++++++++------ .../Controllers/Frontend/UserController.cs | 4 +- WGShare.API/Helpers/JwtHelper.cs | 2 +- WGShare.API/Hubs/IMessageClient.cs | 13 ++- WGShare.API/Hubs/SessionManageHub.cs | 83 ++++--------- .../ServiceConfigs/AuthonizationFilter.cs | 3 +- WGShare.API/WGShare.API.xml | 29 +++-- WGShare.API/appsettings.Development.json | 30 ++--- 11 files changed, 154 insertions(+), 139 deletions(-) diff --git a/WGShare.API/Controllers/AuthController.cs b/WGShare.API/Controllers/AuthController.cs index 58b8cae..ef84431 100644 --- a/WGShare.API/Controllers/AuthController.cs +++ b/WGShare.API/Controllers/AuthController.cs @@ -119,6 +119,11 @@ namespace WGShare.API.Controllers if (!string.IsNullOrWhiteSpace(connectId)) { _logger.LogInformation($"账号已在其他地方登录,强制下线!account:{user.Account} connectId:{connectId}"); + var roomNum = RedisHelper.Instance.Get(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(user.Id)); + if (!string.IsNullOrWhiteSpace(roomNum)) + { + await _hubContext.Clients.Group(roomNum).UserLeave(user.Id); + } await _hubContext.Clients.Client(connectId).ForceLogout("账号已在其他地方登录,您被迫下线!"); } diff --git a/WGShare.API/Controllers/Backend/UserController.cs b/WGShare.API/Controllers/Backend/UserController.cs index 903081e..3dbba68 100644 --- a/WGShare.API/Controllers/Backend/UserController.cs +++ b/WGShare.API/Controllers/Backend/UserController.cs @@ -89,7 +89,7 @@ namespace WGShare.API.Controllers.Backend } return await _sqlSugar.Updateable(entity) - .IgnoreColumns(x => new { x.Pwd, x.ScreenShareId }).ExecuteCommandAsync() > 0; + .UpdateColumns(x => new { x.UserName, x.Account, x.RoleId, x.TenantId }).ExecuteCommandAsync() > 0; } [HttpPut("pwd")] diff --git a/WGShare.API/Controllers/Basic/BasicController.cs b/WGShare.API/Controllers/Basic/BasicController.cs index 87c23cb..c1f609c 100644 --- a/WGShare.API/Controllers/Basic/BasicController.cs +++ b/WGShare.API/Controllers/Basic/BasicController.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SqlSugar.Extensions; +using System.Security.Claims; using WGShare.API.Helpers; using WGShare.Domain.Constant; using WGShare.Domain.FriendlyException; @@ -15,7 +16,7 @@ namespace WGShare.API.Controllers.Basic { get { - var uid = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "uid").Value; + var uid = HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier).Value; if (string.IsNullOrWhiteSpace(uid)) { throw Oops.Oh("用户信息有误,请重新登录"); @@ -90,16 +91,20 @@ namespace WGShare.API.Controllers.Basic } } + private string connectionId; public string ConnectionId { get { - var connectid = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), UId); - if (string.IsNullOrWhiteSpace(connectid)) + if (!string.IsNullOrWhiteSpace(connectionId)) + return connectionId; + + connectionId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), UId); + if (string.IsNullOrWhiteSpace(connectionId)) { throw Oops.Oh("用户信息有误,请重新登录"); } - return connectid; + return connectionId; } } diff --git a/WGShare.API/Controllers/Frontend/RoomController.cs b/WGShare.API/Controllers/Frontend/RoomController.cs index 3f7e788..07a3c0b 100644 --- a/WGShare.API/Controllers/Frontend/RoomController.cs +++ b/WGShare.API/Controllers/Frontend/RoomController.cs @@ -214,10 +214,13 @@ namespace WGShare.API.Controllers.Frontend { var room = await _sqlSugar.Queryable().FirstAsync(x => x.Id == roomId); - var connectIds = RedisHelper.Instance.HMGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), inviteeUids); - connectIds.RemoveWhere(x => string.IsNullOrWhiteSpace(x)); + //var connectIds = RedisHelper.Instance.HMGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), inviteeUids); + //connectIds.RemoveWhere(x => string.IsNullOrWhiteSpace(x)); - await _hubContext.Clients.Clients(connectIds).Invitation(room.RoomNum, room.RoomName, UserName); + //await _hubContext.Clients.Clients(connectIds).Invitation(room.RoomNum, room.RoomName, UserName); + + + await _hubContext.Clients.Users(inviteeUids).Invitation(room.RoomNum, room.RoomName, UserName); } /// @@ -227,11 +230,7 @@ namespace WGShare.API.Controllers.Frontend [HttpGet("kickout")] public async Task KickOut([FromQuery] string roomNum, [FromQuery] string kickUid) { - var connectId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), kickUid); - if (!string.IsNullOrWhiteSpace(connectId)) - { - await _hubContext.Clients.Client(connectId).ForceExitRoom(roomNum); - } + await _hubContext.Clients.User(kickUid).ForceExitRoom(roomNum); } /// @@ -257,10 +256,9 @@ namespace WGShare.API.Controllers.Frontend }); RedisHelper.Instance.HMSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), allUsers); // 通知其他人 - await _hubContext.Clients.Group(roomNum).OperAllMicr(enableMicr); + await _hubContext.Clients.Group(roomNum).OperAllMicr(enableMicr, UId); } - /// /// 单用户开闭麦 /// @@ -301,20 +299,20 @@ namespace WGShare.API.Controllers.Frontend userInfo.EnableCamera = enableCamera; RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), uid, userInfo); - // 通知所有人该用户麦克风状态 + // 通知所有人该用户摄像头状态 await _hubContext.Clients.Group(roomNum).OperCamera(userInfo); } - /// - /// 同步视图 - /// - /// - /// - [HttpGet("sync-view")] - public async Task ChangeView([FromQuery] string roomNum, [FromQuery] string type) - { - await _hubContext.Clients.Groups(roomNum).RefreshView(type); - } + ///// + ///// 同步视图 + ///// + ///// + ///// + //[HttpGet("sync-view")] + //public async Task ChangeView([FromQuery] string roomNum, [FromQuery] string type) + //{ + // await _hubContext.Clients.Groups(roomNum).RefreshView(type); + //} /// /// 全员观看 @@ -323,13 +321,6 @@ namespace WGShare.API.Controllers.Frontend [HttpGet("show-user")] public async Task GetShowUser([FromQuery] string roomNum) { - // 获取全部用户 - var channelUsers = RedisHelper.Instance.HGetAll(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)); - if (channelUsers.IsNullOrEmpty()) - { - throw Oops.Oh("无效会议号!"); - } - // 获取全员观看用户 var showUserId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum); if (!string.IsNullOrWhiteSpace(showUserId)) @@ -337,7 +328,14 @@ namespace WGShare.API.Controllers.Frontend return showUserId; } - return channelUsers.FirstOrDefault().Value.UID; + // 获取全部用户 + var uids = RedisHelper.Instance.HKeys(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)); + if (uids.IsNullOrEmpty()) + { + throw Oops.Oh("无效会议号!"); + } + + return uids.FirstOrDefault(); } /// @@ -350,11 +348,13 @@ namespace WGShare.API.Controllers.Frontend // 设置房间全员观看用户 RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum, uid); - var connectId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), UId); - if (!string.IsNullOrWhiteSpace(connectId)) - { - await _hubContext.Clients.GroupExcept(roomNum, connectId).ShowUser(); - } + //var connectId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), UId); + //if (!string.IsNullOrWhiteSpace(connectId)) + //{ + // await _hubContext.Clients.GroupExcept(roomNum, connectId).ShowUser(); + //} + + await _hubContext.Clients.Group(roomNum).ShowUser(); } /// @@ -387,13 +387,16 @@ 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); - pipe.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), UId, userInfo.ToJsonString()); - pipe.HSet(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(UId), roomNum, 1); + // 记录频道得用户信息 + pipe.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), UId, userInfo); + // 记录用户已参与频道 + pipe.Set(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(UId), roomNum); pipe.EndPipe(); } await _hubContext.Groups.AddToGroupAsync(ConnectionId, roomNum); @@ -401,7 +404,7 @@ namespace WGShare.API.Controllers.Frontend } /// - /// 离开频道 + /// 单用户离开频道 /// /// /// @@ -410,14 +413,17 @@ namespace WGShare.API.Controllers.Frontend { using (var pipe = RedisHelper.Instance.StartPipe()) { + // 判断,如果有全员看ta,则删除 var script = $@"local value = redis.call('HGET', KEYS[1], ARGV[1]) if value == ARGV[2] or value == ARGV[3] then return redis.call('HDEL', KEYS[1], ARGV[1]) else return -1 end"; // 执行 eval 命令 pipe.Eval(script, [RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId)], roomNum, UId, ScreenShareId); + // 删除频道中得该用户 pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), UId); - pipe.HDel(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(UId), roomNum); + // 删除用户已参与频道 + pipe.Del(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(UId)); pipe.EndPipe(); } @@ -425,6 +431,33 @@ namespace WGShare.API.Controllers.Frontend await _hubContext.Groups.RemoveFromGroupAsync(ConnectionId, roomNum); } + /// + /// 全部离开频道 + /// + /// + /// + [HttpGet("leave-all")] + public async Task AllLevelChannel([FromQuery] string roomNum) + { + var uids = RedisHelper.Instance.HKeys(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)).ToList(); + using (var pipe = RedisHelper.Instance.StartPipe()) + { + // 删除大家都看ta + pipe.HDel(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum); + // 删除频道里得用户 + pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)); + if (!uids.IsNullOrEmpty()) + { + var keys = uids.ConvertAll(uid => RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid)); + pipe.Del(keys.ToArray()); + } + + pipe.EndPipe(); + } + + await _hubContext.Clients.Group(roomNum).AllLeave(); + } + #region 文件分享 /// /// 分享上传文件 diff --git a/WGShare.API/Controllers/Frontend/UserController.cs b/WGShare.API/Controllers/Frontend/UserController.cs index dfcbbd9..9fc2035 100644 --- a/WGShare.API/Controllers/Frontend/UserController.cs +++ b/WGShare.API/Controllers/Frontend/UserController.cs @@ -74,7 +74,7 @@ namespace WGShare.API.Controllers.Frontend { var user = inputDTO.Adapt(); //user.Id = YitIdHelper.NextId().ToString(); - user.TenantId = TenantId; + user.TenantId = TenantId; user.ScreenShareId = UserShareIdHelper.GenerateUnique8DigitNumber(); if (await _sqlSugar.Queryable().AnyAsync(x => x.Account == user.Account)) @@ -101,7 +101,7 @@ namespace WGShare.API.Controllers.Frontend } return await _sqlSugar.Updateable(entity) - .IgnoreColumns(x => new { x.Pwd, x.TenantId, x.ScreenShareId }).ExecuteCommandAsync() > 0; + .UpdateColumns(x => new { x.Account, x.UserName, x.RoleId }).ExecuteCommandAsync() > 0; } /// diff --git a/WGShare.API/Helpers/JwtHelper.cs b/WGShare.API/Helpers/JwtHelper.cs index 6565f2a..89309e2 100644 --- a/WGShare.API/Helpers/JwtHelper.cs +++ b/WGShare.API/Helpers/JwtHelper.cs @@ -22,7 +22,7 @@ namespace WGShare.API.Helpers claims.AddRange(new List { new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), - new Claim("uid", uid), + new Claim(ClaimTypes.NameIdentifier, uid), }); // 2. 从 appsettings.json 中读取SecretKey diff --git a/WGShare.API/Hubs/IMessageClient.cs b/WGShare.API/Hubs/IMessageClient.cs index 46f0f9c..0861b74 100644 --- a/WGShare.API/Hubs/IMessageClient.cs +++ b/WGShare.API/Hubs/IMessageClient.cs @@ -27,7 +27,7 @@ namespace WGShare.API.Hubs Task Invitation(string roomNum, string roomName, string InviterName); /// - /// 强制退出房间 + /// 单用户踢出房间 /// /// 会议号 /// @@ -70,12 +70,19 @@ namespace WGShare.API.Hubs /// Task UserLeave(string uid); + /// + /// 所有用户退出频道 + /// + /// + Task AllLeave(); + /// /// 所有用户开闭麦 /// /// + /// 操作人UID /// - Task OperAllMicr(bool enableMicr); + Task OperAllMicr(bool enableMicr,string operUid); /// /// 用户关闭开启麦克风 @@ -99,7 +106,7 @@ namespace WGShare.API.Hubs Task ManagerRefresh(ChannelUserInfo user); /// - /// 强制退出 + /// 强制登出 /// /// Task ForceLogout(string msg); diff --git a/WGShare.API/Hubs/SessionManageHub.cs b/WGShare.API/Hubs/SessionManageHub.cs index 06ccb3b..a334766 100644 --- a/WGShare.API/Hubs/SessionManageHub.cs +++ b/WGShare.API/Hubs/SessionManageHub.cs @@ -3,6 +3,8 @@ using Masuit.Tools.Maths; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; using SqlSugar; +using System; +using System.Security.Claims; using System.Text; using WGShare.API.Helpers; using WGShare.Domain.Constant; @@ -24,14 +26,11 @@ namespace WGShare.API.Hubs public async override Task OnConnectedAsync() { var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value; - var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value; + var uid = Context.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value; var account = Context.User?.Claims.FirstOrDefault(x => x.Type == "account")?.Value; var ssid = Context.User?.Claims.FirstOrDefault(x => x.Type == "ssid")?.Value; - Console.WriteLine($"{DateTime.Now}连接成功 当前租户:" + tenant); - Console.WriteLine($"{DateTime.Now} 连接成功 account:" + account); - Console.WriteLine($"{DateTime.Now} 连接成功 uid:" + uid); - Console.WriteLine($"{DateTime.Now}连接成功 connectId:" + Context.ConnectionId); + Console.WriteLine($"{DateTime.Now}连接成功 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId}"); await ClearUserChannel(uid, tenant, account, ssid); // 存储在线信息 @@ -41,14 +40,12 @@ namespace WGShare.API.Hubs public async override Task OnDisconnectedAsync(Exception? exception) { var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value; - var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value; + var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value; var account = Context.User?.Claims.FirstOrDefault(x => x.Type == "account")?.Value; var ssid = Context.User?.Claims.FirstOrDefault(x => x.Type == "ssid")?.Value; - Console.WriteLine($"{DateTime.Now}断开连接 当前租户:" + tenant); - Console.WriteLine($"{DateTime.Now}断开连接 account:" + account); - Console.WriteLine($"{DateTime.Now}断开连接 uid:" + uid); - Console.WriteLine($"{DateTime.Now}断开连接 connectId:" + Context.ConnectionId); + + Console.WriteLine($"{DateTime.Now}断开连接 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId} exception:{exception?.Message} "); if (Context.ConnectionId == RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(tenant), uid)) { @@ -64,24 +61,22 @@ namespace WGShare.API.Hubs { Console.WriteLine($"{DateTime.Now} 执行删除开始"); // 获取用户参加得频道 - var roomNums = RedisHelper.Instance.HKeys(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid)); + var roomNum = RedisHelper.Instance.Get(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid)); using (var pipe = RedisHelper.Instance.StartPipe()) { - Console.WriteLine($@"{DateTime.Now} account:{account} 退出以下频道:{string.Join(',', roomNums)}"); - if (!roomNums.IsNullOrEmpty()) + Console.WriteLine($@"{DateTime.Now} account:{account} 退出以下频道:{string.Join(',', roomNum)}"); + if (!string.IsNullOrEmpty(roomNum)) { // 所有房间移除该用户 - roomNums.ForEach(roomNum => - { - pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid); + pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid); - var script = $@"local value = redis.call('HGET', KEYS[1], ARGV[1]) + // 判断是否全员看他,是则移除 + var script = $@"local value = redis.call('HGET', KEYS[1], ARGV[1]) if value == ARGV[2] or value == ARGV[3] then return redis.call('HDEL', KEYS[1], ARGV[1]) else return -1 end"; - // 执行 eval 命令 - pipe.Eval(script, [RedisKeyConstant.SessionManage.GetChannelShowUserKey(tenant)], roomNum, uid, ssid); - }); + // 执行 eval 命令 + pipe.Eval(script, [RedisKeyConstant.SessionManage.GetChannelShowUserKey(tenant)], roomNum, uid, ssid); } // 删除用户在线状态 @@ -106,7 +101,7 @@ namespace WGShare.API.Hubs public async Task JoinChannel(string roomNum, bool enableMicr = true, bool enableCamera = true) { var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value; - var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value; + var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value; var account = Context.User?.Claims.FirstOrDefault(x => x.Type == "account")?.Value; var ssid = Context.User?.Claims.FirstOrDefault(x => x.Type == "ssid")?.Value; var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value; @@ -116,29 +111,6 @@ namespace WGShare.API.Hubs Console.WriteLine($"{DateTime.Now}加入频道 会议号:" + roomNum); Console.WriteLine($"{DateTime.Now}加入频道 account:" + account); Console.WriteLine($"{DateTime.Now}加入频道 tenant:" + tenant); - - //using (var pipe = RedisHelper.Instance.StartPipe()) - //{ - // var userInfo = new ChannelUserInfo(uid, Context.ConnectionId, enableMicr, enableCamera, account, ssid); - // pipe.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid, userInfo.ToJsonString()); - // //pipe.HIncrBy(RedisKeyConstant.SessionManage.GetChannelUserCountKey(tenant), roomNum, 1); - // pipe.HSet(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid), roomNum, 1); - // pipe.EndPipe(); - //} - - //await Groups.AddToGroupAsync(Context.ConnectionId, roomNum); - //await Clients.GroupExcept(roomNum, Context.ConnectionId).UserJoined(new Domain.DTOs.User.UserOutputDTO - //{ - // Id = uid, - // UserName = uname, - // Account = account, - // RoleId = roleId, - // RoleName = ((RoleEnums)roleId.ToInt32()).GetDescription(), - // EnableCamera = enableCamera, - // EnableMicr = enableMicr, - // ScreenShareId = ssid, - // IsOnline = true, - //}); } /// @@ -149,7 +121,7 @@ namespace WGShare.API.Hubs public async Task LevelChannel(string roomNum) { var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value; - var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value; + var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value; var account = Context.User?.Claims.FirstOrDefault(x => x.Type == "account")?.Value; var ssid = Context.User?.Claims.FirstOrDefault(x => x.Type == "ssid")?.Value; var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value; @@ -159,22 +131,6 @@ namespace WGShare.API.Hubs Console.WriteLine($" {DateTime.Now}离开频道 会议号:" + roomNum); Console.WriteLine($" {DateTime.Now}离开频道 account:" + account); Console.WriteLine($" {DateTime.Now}离开频道 tenant:" + tenant); - - //using (var pipe = RedisHelper.Instance.StartPipe()) - //{ - // var script = $@"local value = redis.call('HGET', KEYS[1], ARGV[1]) - // if value == ARGV[2] or value == ARGV[3] then - // return redis.call('HDEL', KEYS[1], ARGV[1]) - // else return -1 end"; - // // 执行 eval 命令 - // pipe.Eval(script, [RedisKeyConstant.SessionManage.GetChannelShowUserKey(tenant)], roomNum, uid, ssid); - // pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid); - // pipe.HDel(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid), roomNum); - // pipe.EndPipe(); - //} - - //await Clients.GroupExcept(roomNum, Context.ConnectionId).UserLeave(uid); - //await Groups.RemoveFromGroupAsync(Context.ConnectionId, roomNum); } /// @@ -186,13 +142,14 @@ namespace WGShare.API.Hubs public async Task SenMessage(string rooNum, string msg) { var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value; - var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value; + var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value; Console.WriteLine($" {DateTime.Now}发送消息 uname:" + uname); Console.WriteLine($" {DateTime.Now}发送消息 roomNum:" + rooNum); Console.WriteLine($" {DateTime.Now}发送消息 msg:" + msg); - await Clients.GroupExcept(rooNum, Context.ConnectionId).ReceiveMessage(uid, uname, msg); + await Clients.OthersInGroup(rooNum).ReceiveMessage(uid, uname, msg); + //await Clients.GroupExcept(rooNum, Context.ConnectionId).ReceiveMessage(uid, uname, msg); } /// diff --git a/WGShare.API/ServiceConfigs/AuthonizationFilter.cs b/WGShare.API/ServiceConfigs/AuthonizationFilter.cs index 9459fe3..478b2f0 100644 --- a/WGShare.API/ServiceConfigs/AuthonizationFilter.cs +++ b/WGShare.API/ServiceConfigs/AuthonizationFilter.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.SignalR; +using System.Security.Claims; using WGShare.API.Helpers; using WGShare.API.Hubs; using WGShare.Domain.Constant; @@ -15,7 +16,7 @@ namespace WGShare.API.ServiceConfigs if (context.HttpContext.User.Identity.IsAuthenticated && !context.HttpContext.GetEndpoint().Metadata.Any(x => x is Microsoft.AspNetCore.Authorization.AllowAnonymousAttribute)) { - var uid = context.HttpContext.User.Claims.FirstOrDefault(x => x.Type == "uid")?.Value; + var uid = context.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value; if (string.IsNullOrWhiteSpace(uid)) { context.Result = new Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult(new { message = "身份认证有误,请重新登录!" }); diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml index 4706093..ca05577 100644 --- a/WGShare.API/WGShare.API.xml +++ b/WGShare.API/WGShare.API.xml @@ -163,13 +163,6 @@ - - - 同步视图 - - - - 全员观看 @@ -193,7 +186,14 @@ - 离开频道 + 单用户离开频道 + + + + + + + 全部离开频道 @@ -375,7 +375,7 @@ - 强制退出房间 + 单用户踢出房间 会议号 @@ -417,11 +417,18 @@ - + + + 所有用户退出频道 + + + + 所有用户开闭麦 + 操作人UID @@ -447,7 +454,7 @@ - 强制退出 + 强制登出 diff --git a/WGShare.API/appsettings.Development.json b/WGShare.API/appsettings.Development.json index afb98eb..6211bc7 100644 --- a/WGShare.API/appsettings.Development.json +++ b/WGShare.API/appsettings.Development.json @@ -5,22 +5,22 @@ "Microsoft.AspNetCore": "Warning" }, "Console": { - //"LogLevel": { - // "Default": "Information", - // "Microsoft": "Warning", - //}, - "FormatterName": "CustomTimePrefixingFormatter", - "FormatterOptions": { - "CustomPrefix": "|-<[", - "CustomSuffix": "]>-|", - "SingleLine": true, - "IncludeScopes": true, - "TimestampFormat": "HH:mm:ss.ffff ", - "UseUtcTimestamp": true, - "JsonWriterOptions": { - "Indented": true - } + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", } + //"FormatterName": "CustomTimePrefixingFormatter", + //"FormatterOptions": { + // "CustomPrefix": "|-<[", + // "CustomSuffix": "]>-|", + // "SingleLine": true, + // "IncludeScopes": true, + // "TimestampFormat": "HH:mm:ss.ffff ", + // "UseUtcTimestamp": true, + // "JsonWriterOptions": { + // "Indented": true + // } + //} } }, "ConnectionStrings": {