This commit is contained in:
parent
0d51178455
commit
b6aab652a8
|
|
@ -194,52 +194,6 @@ namespace WGShare.API.Controllers
|
|||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 匿名登录,直接进入会议室
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("anon-login"), Obsolete]
|
||||
public async Task<IActionResult> Login([FromBody] AnonymousLoginDTO loginDTO)
|
||||
{
|
||||
|
||||
var room = await _sqlSugar.Queryable<Room>().FirstAsync(x => x.Id == loginDTO.RoomId);
|
||||
if (room == null)
|
||||
{
|
||||
throw Oops.Oh("会议号无效");
|
||||
}
|
||||
var anonRoleId = "2";
|
||||
|
||||
// 匿名登录使用普通用户身份
|
||||
var perms = await _sqlSugar.Queryable<Permission>()
|
||||
.InnerJoin<RolePrem>((m, rm) => m.Id == rm.PermId)
|
||||
.Where((m, rm) => rm.RoleId == anonRoleId)
|
||||
.Distinct()
|
||||
.ToListAsync();
|
||||
|
||||
var tenant = await _sqlSugar.Queryable<Tenant>().FirstAsync(x => x.Id == room.TenantId);
|
||||
if (tenant == null || tenant.IsDelete == true)
|
||||
{
|
||||
throw Oops.Oh("该区域账号已停用,请联系管理员");
|
||||
}
|
||||
|
||||
|
||||
var btnAutn = new List<Claim>();
|
||||
btnAutn.Add(new Claim("perm", perms.Sum(x => x.PermValue).ToString()));
|
||||
btnAutn.Add(new Claim("roleid", anonRoleId));
|
||||
btnAutn.Add(new Claim("tenant", room.TenantId));
|
||||
btnAutn.Add(new Claim("mac", loginDTO.Mac));
|
||||
btnAutn.Add(new Claim("machine", loginDTO.MachineName));
|
||||
btnAutn.Add(new Claim("nickName", loginDTO.NickName));
|
||||
|
||||
return Ok(new
|
||||
{
|
||||
perms = perms.Sum(x => x.PermValue),
|
||||
token = _jwtHelper.CreateToken("0", btnAutn),
|
||||
roleId = anonRoleId,
|
||||
userName = loginDTO.NickName,
|
||||
tenantName = tenant.TenantName
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 登出(暂未处理任何业务逻辑)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ using SqlSugar.Extensions;
|
|||
using System.Security.Claims;
|
||||
using WGShare.API.Helpers;
|
||||
using WGShare.Domain.Constant;
|
||||
using WGShare.Domain.Entities;
|
||||
using WGShare.Domain.Enums;
|
||||
using WGShare.Domain.FriendlyException;
|
||||
|
||||
namespace WGShare.API.Controllers.Basic
|
||||
|
|
@ -52,16 +54,17 @@ namespace WGShare.API.Controllers.Basic
|
|||
}
|
||||
|
||||
|
||||
public string RoleId
|
||||
public RoleEnums RoleId
|
||||
{
|
||||
get
|
||||
{
|
||||
var roleId = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "roleid").Value;
|
||||
if (string.IsNullOrWhiteSpace(roleId))
|
||||
if (string.IsNullOrWhiteSpace(roleId) || !int.TryParse(roleId, out int role) || role == 0)
|
||||
{
|
||||
throw Oops.Oh("用户信息有误,请重新登录");
|
||||
}
|
||||
return roleId;
|
||||
|
||||
return (RoleEnums)role;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -397,8 +397,8 @@ namespace WGShare.API.Controllers.Frontend
|
|||
ConnectId = ConnectionId,
|
||||
Account = Account,
|
||||
ScreenShareId = ScreenShareId,
|
||||
RoleId = RoleId,
|
||||
RoleName = ((RoleEnums)RoleId.ToInt32()).GetDescription(),
|
||||
RoleId = ((int)RoleId).ToString(),
|
||||
RoleName = RoleId.GetDescription(),
|
||||
IsRoomManager = false
|
||||
};
|
||||
using (var pipe = RedisHelper.Instance.StartPipe())
|
||||
|
|
@ -486,7 +486,7 @@ namespace WGShare.API.Controllers.Frontend
|
|||
var polledUserIds = RedisHelper.Instance.SMembers(RedisKeyConstant.Data.GetPolledUserId(TenantId, roomNum));
|
||||
|
||||
// 排除已轮询的用户
|
||||
var userInfos = channelUserInfos.Where(x => !polledUserIds.Contains(x.UID)).Take(count).ToList();
|
||||
var userInfos = channelUserInfos.Where(x => !polledUserIds.Contains(x.UID) && x.RoleId != ((int)RoleEnums.Admin).ToString()).Take(count).ToList();
|
||||
if (userInfos.Count < count)
|
||||
{
|
||||
// 数量不足,则从全部用户中取足
|
||||
|
|
@ -496,7 +496,10 @@ namespace WGShare.API.Controllers.Frontend
|
|||
RedisHelper.Instance.Del(RedisKeyConstant.Data.GetPolledUserId(TenantId, roomNum));
|
||||
}
|
||||
|
||||
RedisHelper.Instance.SAdd(RedisKeyConstant.Data.GetPolledUserId(TenantId, roomNum), userInfos.Select(x => x.UID).ToArray());
|
||||
var watchUids = userInfos.Select(x => x.UID).ToArray();
|
||||
RedisHelper.Instance.SAdd(RedisKeyConstant.Data.GetPolledUserId(TenantId, roomNum), watchUids);
|
||||
_hubContext.Clients.Group(roomNum).Watch(watchUids);
|
||||
|
||||
return userInfos;
|
||||
}
|
||||
|
||||
|
|
@ -505,9 +508,19 @@ namespace WGShare.API.Controllers.Frontend
|
|||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("apply-speak")]
|
||||
public async Task ApplyToSpeak([FromQuery] string roomNum)
|
||||
public async Task ApplySpeak([FromQuery] string roomNum)
|
||||
{
|
||||
var channelUsers = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
|
||||
if (channelUsers.IsNullOrEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
var connectionIds = channelUsers.Where(x => x.RoleId == ((int)RoleEnums.Admin).ToString()).Select(x => x.ConnectId);
|
||||
|
||||
if (connectionIds.Any())
|
||||
{
|
||||
await _hubContext.Clients.Clients(connectionIds).ApplyToSpeak(UId, UserName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -110,5 +110,19 @@ namespace WGShare.API.Hubs
|
|||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task ForceLogout(string msg);
|
||||
|
||||
/// <summary>
|
||||
/// 用户申请发言
|
||||
/// </summary>
|
||||
/// <param name="uid"></param>
|
||||
/// <param name="uname"></param>
|
||||
/// <returns></returns>
|
||||
Task ApplyToSpeak(string uid, string uname);
|
||||
|
||||
/// <summary>
|
||||
/// 接受监控用户
|
||||
/// </summary>
|
||||
/// <param name="watchUids"></param>
|
||||
void Watch(string[] watchUids);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ using WGShare.API.Helpers;
|
|||
using WGShare.Domain.Constant;
|
||||
using WGShare.Domain.Entities;
|
||||
using WGShare.Domain.Enums;
|
||||
using ZstdSharp.Unsafe;
|
||||
|
||||
namespace WGShare.API.Hubs
|
||||
{
|
||||
|
|
@ -34,7 +35,7 @@ namespace WGShare.API.Hubs
|
|||
|
||||
Console.WriteLine($"{DateTime.Now}连接成功 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId}");
|
||||
|
||||
await ClearUserChannel(uid, tenant, account, ssid);
|
||||
await ClearUserChannel(uid, tenant, account, ssid, false);
|
||||
// 存储在线信息
|
||||
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetOnlineUserKey(tenant), uid, Context.ConnectionId);
|
||||
}
|
||||
|
|
@ -53,13 +54,13 @@ namespace WGShare.API.Hubs
|
|||
{
|
||||
Console.WriteLine($"{DateTime.Now}断开连接 未重连,开始删除用户频道信息");
|
||||
// 断开后未重连则清退频道
|
||||
await ClearUserChannel(uid, tenant, account, ssid);
|
||||
await ClearUserChannel(uid, tenant, account, ssid, true);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async Task ClearUserChannel(string uid, string tenant, string account, string ssid)
|
||||
private async Task ClearUserChannel(string uid, string tenant, string account, string ssid, bool isclose)
|
||||
{
|
||||
Console.WriteLine($"{DateTime.Now} 执行删除开始");
|
||||
// 获取用户参加得频道
|
||||
|
|
@ -90,6 +91,10 @@ namespace WGShare.API.Hubs
|
|||
pipe.EndPipe();
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(roomNum))
|
||||
// 通知房间其他用户,该用户退出
|
||||
await Clients.Group(roomNum).UserLeave(uid);
|
||||
|
||||
Console.WriteLine($"{DateTime.Now} 执行删除完成");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,12 +24,6 @@
|
|||
<param name="refreshToken"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WGShare.API.Controllers.AuthController.Login(WGShare.Domain.DTOs.Login.AnonymousLoginDTO)">
|
||||
<summary>
|
||||
匿名登录,直接进入会议室
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WGShare.API.Controllers.AuthController.Logout">
|
||||
<summary>
|
||||
登出(暂未处理任何业务逻辑)
|
||||
|
|
@ -210,7 +204,7 @@
|
|||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WGShare.API.Controllers.Frontend.RoomController.ApplyToSpeak(System.String)">
|
||||
<member name="M:WGShare.API.Controllers.Frontend.RoomController.ApplySpeak(System.String)">
|
||||
<summary>
|
||||
申请发言
|
||||
</summary>
|
||||
|
|
@ -476,6 +470,14 @@
|
|||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WGShare.API.Hubs.IMessageClient.ApplyToSpeak(System.String,System.String)">
|
||||
<summary>
|
||||
用户申请发言
|
||||
</summary>
|
||||
<param name="uid"></param>
|
||||
<param name="uname"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WGShare.API.Hubs.SessionManageHub.JoinChannel(System.String,System.Boolean,System.Boolean)">
|
||||
<summary>
|
||||
加入频道
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WGShare.Domain.Enums;
|
||||
|
||||
namespace WGShare.Domain.Entities
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue