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>
|
/// <summary>
|
||||||
/// 登出(暂未处理任何业务逻辑)
|
/// 登出(暂未处理任何业务逻辑)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ using SqlSugar.Extensions;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using WGShare.API.Helpers;
|
using WGShare.API.Helpers;
|
||||||
using WGShare.Domain.Constant;
|
using WGShare.Domain.Constant;
|
||||||
|
using WGShare.Domain.Entities;
|
||||||
|
using WGShare.Domain.Enums;
|
||||||
using WGShare.Domain.FriendlyException;
|
using WGShare.Domain.FriendlyException;
|
||||||
|
|
||||||
namespace WGShare.API.Controllers.Basic
|
namespace WGShare.API.Controllers.Basic
|
||||||
|
|
@ -52,16 +54,17 @@ namespace WGShare.API.Controllers.Basic
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public string RoleId
|
public RoleEnums RoleId
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var roleId = HttpContext.User.Claims.FirstOrDefault(x => x.Type == "roleid").Value;
|
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("用户信息有误,请重新登录");
|
throw Oops.Oh("用户信息有误,请重新登录");
|
||||||
}
|
}
|
||||||
return roleId;
|
|
||||||
|
return (RoleEnums)role;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -397,8 +397,8 @@ namespace WGShare.API.Controllers.Frontend
|
||||||
ConnectId = ConnectionId,
|
ConnectId = ConnectionId,
|
||||||
Account = Account,
|
Account = Account,
|
||||||
ScreenShareId = ScreenShareId,
|
ScreenShareId = ScreenShareId,
|
||||||
RoleId = RoleId,
|
RoleId = ((int)RoleId).ToString(),
|
||||||
RoleName = ((RoleEnums)RoleId.ToInt32()).GetDescription(),
|
RoleName = RoleId.GetDescription(),
|
||||||
IsRoomManager = false
|
IsRoomManager = false
|
||||||
};
|
};
|
||||||
using (var pipe = RedisHelper.Instance.StartPipe())
|
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 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)
|
if (userInfos.Count < count)
|
||||||
{
|
{
|
||||||
// 数量不足,则从全部用户中取足
|
// 数量不足,则从全部用户中取足
|
||||||
|
|
@ -496,7 +496,10 @@ namespace WGShare.API.Controllers.Frontend
|
||||||
RedisHelper.Instance.Del(RedisKeyConstant.Data.GetPolledUserId(TenantId, roomNum));
|
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;
|
return userInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -505,9 +508,19 @@ namespace WGShare.API.Controllers.Frontend
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("apply-speak")]
|
[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>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task ForceLogout(string msg);
|
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.Constant;
|
||||||
using WGShare.Domain.Entities;
|
using WGShare.Domain.Entities;
|
||||||
using WGShare.Domain.Enums;
|
using WGShare.Domain.Enums;
|
||||||
|
using ZstdSharp.Unsafe;
|
||||||
|
|
||||||
namespace WGShare.API.Hubs
|
namespace WGShare.API.Hubs
|
||||||
{
|
{
|
||||||
|
|
@ -34,7 +35,7 @@ namespace WGShare.API.Hubs
|
||||||
|
|
||||||
Console.WriteLine($"{DateTime.Now}连接成功 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId}");
|
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);
|
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetOnlineUserKey(tenant), uid, Context.ConnectionId);
|
||||||
}
|
}
|
||||||
|
|
@ -53,13 +54,13 @@ namespace WGShare.API.Hubs
|
||||||
{
|
{
|
||||||
Console.WriteLine($"{DateTime.Now}断开连接 未重连,开始删除用户频道信息");
|
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} 执行删除开始");
|
Console.WriteLine($"{DateTime.Now} 执行删除开始");
|
||||||
// 获取用户参加得频道
|
// 获取用户参加得频道
|
||||||
|
|
@ -90,6 +91,10 @@ namespace WGShare.API.Hubs
|
||||||
pipe.EndPipe();
|
pipe.EndPipe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(roomNum))
|
||||||
|
// 通知房间其他用户,该用户退出
|
||||||
|
await Clients.Group(roomNum).UserLeave(uid);
|
||||||
|
|
||||||
Console.WriteLine($"{DateTime.Now} 执行删除完成");
|
Console.WriteLine($"{DateTime.Now} 执行删除完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,6 @@
|
||||||
<param name="refreshToken"></param>
|
<param name="refreshToken"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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">
|
<member name="M:WGShare.API.Controllers.AuthController.Logout">
|
||||||
<summary>
|
<summary>
|
||||||
登出(暂未处理任何业务逻辑)
|
登出(暂未处理任何业务逻辑)
|
||||||
|
|
@ -210,7 +204,7 @@
|
||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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>
|
||||||
申请发言
|
申请发言
|
||||||
</summary>
|
</summary>
|
||||||
|
|
@ -476,6 +470,14 @@
|
||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:WGShare.API.Hubs.SessionManageHub.JoinChannel(System.String,System.Boolean,System.Boolean)">
|
||||||
<summary>
|
<summary>
|
||||||
加入频道
|
加入频道
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using WGShare.Domain.Enums;
|
||||||
|
|
||||||
namespace WGShare.Domain.Entities
|
namespace WGShare.Domain.Entities
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue