优化发言人设置
This commit is contained in:
parent
6106f06f8a
commit
40bf8cc5ba
|
|
@ -63,10 +63,11 @@ namespace WGShare.API.Controllers.Frontend
|
||||||
[HttpPost("manager")]
|
[HttpPost("manager")]
|
||||||
public async Task SetRoomManager([FromBody] RoomManagerInputDTO inputDTO)
|
public async Task SetRoomManager([FromBody] RoomManagerInputDTO inputDTO)
|
||||||
{
|
{
|
||||||
|
inputDTO.SettingUserId = UId;
|
||||||
var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum));
|
var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum));
|
||||||
if (users.Count(x => x.IsRoomManager || x.RoleId == ((int)RoleEnums.Admin).ToString() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()) >= 32)
|
if (users.Count(x => x.IsRoomManager || x.RoleId == ((int)RoleEnums.Admin).ToString() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()) >= 20)
|
||||||
{
|
{
|
||||||
throw Oops.Oh("房间已达到32个发言人限制。请移除一位发言人");
|
throw Oops.Oh("当前房间已达最大发言人数!");
|
||||||
}
|
}
|
||||||
var user = users.FirstOrDefault(x => x.UID == inputDTO.UserId);
|
var user = users.FirstOrDefault(x => x.UID == inputDTO.UserId);
|
||||||
if (user == null)
|
if (user == null)
|
||||||
|
|
@ -74,11 +75,13 @@ namespace WGShare.API.Controllers.Frontend
|
||||||
throw Oops.Oh("用户已不在房间内!");
|
throw Oops.Oh("用户已不在房间内!");
|
||||||
}
|
}
|
||||||
|
|
||||||
user.IsRoomManager = true;
|
await _hubContext.Clients.User(inputDTO.UserId).SetSpeaker(inputDTO);
|
||||||
|
|
||||||
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum), inputDTO.UserId, user);
|
//user.IsRoomManager = true;
|
||||||
|
|
||||||
await _hubContext.Clients.Group(inputDTO.RoomNum).ManagerRefresh(user, UId);
|
//RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum), inputDTO.UserId, user);
|
||||||
|
|
||||||
|
//await _hubContext.Clients.Group(inputDTO.RoomNum).ManagerRefresh(user, UId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -636,7 +639,7 @@ namespace WGShare.API.Controllers.Frontend
|
||||||
public async Task<string> GetSharedScreen([FromQuery] string roomNum)
|
public async Task<string> GetSharedScreen([FromQuery] string roomNum)
|
||||||
{
|
{
|
||||||
var showUserId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum);
|
var showUserId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum);
|
||||||
if (showUserId.Length == 9)
|
if (!string.IsNullOrWhiteSpace(showUserId) && showUserId.Length == 9)
|
||||||
{
|
{
|
||||||
// 全员观看userid =9 表示共享屏幕
|
// 全员观看userid =9 表示共享屏幕
|
||||||
return showUserId;
|
return showUserId;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using SignalRSwaggerGen.Attributes;
|
using SignalRSwaggerGen.Attributes;
|
||||||
|
using WGShare.Domain.DTOs.Room;
|
||||||
using WGShare.Domain.DTOs.User;
|
using WGShare.Domain.DTOs.User;
|
||||||
using WGShare.Domain.Entities;
|
using WGShare.Domain.Entities;
|
||||||
|
|
||||||
|
|
@ -165,5 +166,11 @@ namespace WGShare.API.Hubs
|
||||||
/// 加入频道回调
|
/// 加入频道回调
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Task JoinChannelCallback(bool isSuccess);
|
Task JoinChannelCallback(bool isSuccess);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送设置发言人指令
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task SetSpeaker(RoomManagerInputDTO inputDTO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
using Masuit.Tools.DateTimeExt;
|
using Masuit.Tools.DateTimeExt;
|
||||||
using Masuit.Tools.Maths;
|
using Masuit.Tools.Maths;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Components.Forms;
|
||||||
using Microsoft.AspNetCore.SignalR;
|
using Microsoft.AspNetCore.SignalR;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
using SqlSugar.Extensions;
|
using SqlSugar.Extensions;
|
||||||
|
|
@ -9,9 +10,11 @@ using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using WGShare.API.Helpers;
|
using WGShare.API.Helpers;
|
||||||
using WGShare.Domain.Constant;
|
using WGShare.Domain.Constant;
|
||||||
|
using WGShare.Domain.DTOs.Room;
|
||||||
using WGShare.Domain.Entities;
|
using WGShare.Domain.Entities;
|
||||||
using WGShare.Domain.Enums;
|
using WGShare.Domain.Enums;
|
||||||
using WGShare.Domain.FriendlyException;
|
using WGShare.Domain.FriendlyException;
|
||||||
|
|
@ -45,7 +48,7 @@ namespace WGShare.API.Hubs
|
||||||
Context.Items.Add("uname", uname);
|
Context.Items.Add("uname", uname);
|
||||||
Context.Items.Add("roleid", roleId);
|
Context.Items.Add("roleid", roleId);
|
||||||
|
|
||||||
Console.WriteLine($"{DateTime.Now}连接成功 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId}");
|
_logger.LogInformation($"{DateTime.Now}连接成功 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId}");
|
||||||
|
|
||||||
//await ClearUserChannel(uid, tenant, account, ssid, false);
|
//await ClearUserChannel(uid, tenant, account, ssid, false);
|
||||||
// 存储在线信息
|
// 存储在线信息
|
||||||
|
|
@ -60,11 +63,11 @@ namespace WGShare.API.Hubs
|
||||||
var ssid = Context.User?.Claims.FirstOrDefault(x => x.Type == "ssid")?.Value;
|
var ssid = Context.User?.Claims.FirstOrDefault(x => x.Type == "ssid")?.Value;
|
||||||
|
|
||||||
|
|
||||||
Console.WriteLine($"{DateTime.Now}断开连接 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId} exception:{exception?.Message} ");
|
_logger.LogInformation($"{DateTime.Now}断开连接 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId} exception:{exception?.Message} ");
|
||||||
|
|
||||||
if (Context.ConnectionId == RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(tenant), uid))
|
if (Context.ConnectionId == RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(tenant), uid))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"{DateTime.Now}断开连接 未重连,开始删除用户频道信息");
|
_logger.LogInformation($"{DateTime.Now}断开连接 未重连,开始删除用户频道信息");
|
||||||
// 断开后未重连则清退频道
|
// 断开后未重连则清退频道
|
||||||
await ClearUserChannel(uid, tenant, account, ssid, true);
|
await ClearUserChannel(uid, tenant, account, ssid, true);
|
||||||
|
|
||||||
|
|
@ -74,12 +77,12 @@ namespace WGShare.API.Hubs
|
||||||
|
|
||||||
private async Task ClearUserChannel(string uid, string tenant, string account, string ssid, bool isclose)
|
private async Task ClearUserChannel(string uid, string tenant, string account, string ssid, bool isclose)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"{DateTime.Now} 执行删除开始");
|
_logger.LogInformation($"{DateTime.Now} 执行删除开始");
|
||||||
// 获取用户参加得频道
|
// 获取用户参加得频道
|
||||||
var roomNum = RedisHelper.Instance.Get(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid));
|
var roomNum = RedisHelper.Instance.Get(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid));
|
||||||
using (var pipe = RedisHelper.Instance.StartPipe())
|
using (var pipe = RedisHelper.Instance.StartPipe())
|
||||||
{
|
{
|
||||||
Console.WriteLine($@"{DateTime.Now} account:{account} 退出以下频道:{string.Join(',', roomNum)}");
|
_logger.LogInformation($@"{DateTime.Now} account:{account} 退出以下频道:{string.Join(',', roomNum)}");
|
||||||
if (!string.IsNullOrEmpty(roomNum))
|
if (!string.IsNullOrEmpty(roomNum))
|
||||||
{
|
{
|
||||||
// 所有房间移除该用户
|
// 所有房间移除该用户
|
||||||
|
|
@ -107,7 +110,7 @@ namespace WGShare.API.Hubs
|
||||||
// 通知房间其他用户,该用户退出
|
// 通知房间其他用户,该用户退出
|
||||||
await Clients.Group(roomNum).UserLeave(uid);
|
await Clients.Group(roomNum).UserLeave(uid);
|
||||||
|
|
||||||
Console.WriteLine($"{DateTime.Now} 执行删除完成");
|
_logger.LogInformation($"{DateTime.Now} 执行删除完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -127,9 +130,9 @@ namespace WGShare.API.Hubs
|
||||||
var roleId = Context.User?.Claims.FirstOrDefault(x => x.Type == "roleid")?.Value;
|
var roleId = Context.User?.Claims.FirstOrDefault(x => x.Type == "roleid")?.Value;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.WriteLine($"{DateTime.Now}加入频道 会议号:" + roomNum);
|
_logger.LogInformation($"{DateTime.Now}加入频道 会议号:" + roomNum);
|
||||||
Console.WriteLine($"{DateTime.Now}加入频道 account:" + account);
|
_logger.LogInformation($"{DateTime.Now}加入频道 account:" + account);
|
||||||
Console.WriteLine($"{DateTime.Now}加入频道 tenant:" + tenant);
|
_logger.LogInformation($"{DateTime.Now}加入频道 tenant:" + tenant);
|
||||||
|
|
||||||
var userInfo = new ChannelUserInfo
|
var userInfo = new ChannelUserInfo
|
||||||
{
|
{
|
||||||
|
|
@ -203,9 +206,9 @@ namespace WGShare.API.Hubs
|
||||||
var roleId = Context.User?.Claims.FirstOrDefault(x => x.Type == "roleid")?.Value;
|
var roleId = Context.User?.Claims.FirstOrDefault(x => x.Type == "roleid")?.Value;
|
||||||
|
|
||||||
|
|
||||||
Console.WriteLine($" {DateTime.Now}离开频道 会议号:" + roomNum);
|
_logger.LogInformation($" {DateTime.Now}离开频道 会议号:" + roomNum);
|
||||||
Console.WriteLine($" {DateTime.Now}离开频道 account:" + account);
|
_logger.LogInformation($" {DateTime.Now}离开频道 account:" + account);
|
||||||
Console.WriteLine($" {DateTime.Now}离开频道 tenant:" + tenant);
|
_logger.LogInformation($" {DateTime.Now}离开频道 tenant:" + tenant);
|
||||||
|
|
||||||
using (var pipe = RedisHelper.Instance.StartPipe())
|
using (var pipe = RedisHelper.Instance.StartPipe())
|
||||||
{
|
{
|
||||||
|
|
@ -249,9 +252,9 @@ namespace WGShare.API.Hubs
|
||||||
var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value;
|
var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value;
|
||||||
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value;
|
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value;
|
||||||
|
|
||||||
Console.WriteLine($" {DateTime.Now}发送消息 uname:" + uname);
|
_logger.LogInformation($" {DateTime.Now}发送消息 uname:" + uname);
|
||||||
Console.WriteLine($" {DateTime.Now}发送消息 roomNum:" + rooNum);
|
_logger.LogInformation($" {DateTime.Now}发送消息 roomNum:" + rooNum);
|
||||||
Console.WriteLine($" {DateTime.Now}发送消息 msg:" + msg);
|
_logger.LogInformation($" {DateTime.Now}发送消息 msg:" + msg);
|
||||||
|
|
||||||
await Clients.OthersInGroup(rooNum).ReceiveMessage(uid, uname, msg, DateTime.Now.GetTotalMilliseconds()); //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);
|
||||||
}
|
}
|
||||||
|
|
@ -301,5 +304,32 @@ namespace WGShare.API.Hubs
|
||||||
{
|
{
|
||||||
await Clients.User(uid).SaveDriver(driversJsonString);
|
await Clients.User(uid).SaveDriver(driversJsonString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发言人设置成功回调
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inputDTO"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HubMethodName("setSpeakerCallback")]
|
||||||
|
public async Task SetSpeakerCallback(RoomManagerInputDTO inputDTO)
|
||||||
|
{
|
||||||
|
var tenantId = Context.Items["tenant"].ToString();
|
||||||
|
|
||||||
|
var users = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(tenantId, inputDTO.RoomNum));
|
||||||
|
//if (users.Count(x => x.IsRoomManager || x.RoleId == ((int)RoleEnums.Admin).ToString() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()) >= 20)
|
||||||
|
//{
|
||||||
|
// throw Oops.Oh("房间已达到20个发言人限制。请移除一位发言人");
|
||||||
|
//}
|
||||||
|
var user = users.FirstOrDefault(x => x.UID == inputDTO.UserId);
|
||||||
|
if (user == null)
|
||||||
|
{
|
||||||
|
throw Oops.Oh("用户已不在房间内!");
|
||||||
|
}
|
||||||
|
user.IsRoomManager = true;
|
||||||
|
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(tenantId, inputDTO.RoomNum), inputDTO.UserId, user);
|
||||||
|
|
||||||
|
await Clients.Group(inputDTO.RoomNum).ManagerRefresh(user, inputDTO.SettingUserId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -725,6 +725,12 @@
|
||||||
加入频道回调
|
加入频道回调
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:WGShare.API.Hubs.IMessageClient.SetSpeaker(WGShare.Domain.DTOs.Room.RoomManagerInputDTO)">
|
||||||
|
<summary>
|
||||||
|
发送设置发言人指令
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:WGShare.API.Hubs.SessionManageHub.JoinChannel(System.String,System.Boolean,System.Boolean,System.Boolean)">
|
<member name="M:WGShare.API.Hubs.SessionManageHub.JoinChannel(System.String,System.Boolean,System.Boolean,System.Boolean)">
|
||||||
<summary>
|
<summary>
|
||||||
加入频道
|
加入频道
|
||||||
|
|
@ -774,6 +780,13 @@
|
||||||
<param name="driversJsonString"></param>
|
<param name="driversJsonString"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:WGShare.API.Hubs.SessionManageHub.SetSpeakerCallback(WGShare.Domain.DTOs.Room.RoomManagerInputDTO)">
|
||||||
|
<summary>
|
||||||
|
发言人设置成功回调
|
||||||
|
</summary>
|
||||||
|
<param name="inputDTO"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:WGShare.API.Program.ResetRedisKey">
|
<member name="M:WGShare.API.Program.ResetRedisKey">
|
||||||
<summary>
|
<summary>
|
||||||
程序启动前,删除redis中得数据
|
程序启动前,删除redis中得数据
|
||||||
|
|
|
||||||
|
|
@ -12,5 +12,9 @@ namespace WGShare.Domain.DTOs.Room
|
||||||
public string RoomId { get; set; }
|
public string RoomId { get; set; }
|
||||||
public string RoomNum { get; set; }
|
public string RoomNum { get; set; }
|
||||||
public string UserId { get; set; }
|
public string UserId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 设置人Id
|
||||||
|
/// </summary>
|
||||||
|
public string SettingUserId { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue