修复全员看他bug
This commit is contained in:
parent
7c6219ca75
commit
58376482bf
|
|
@ -10,6 +10,7 @@ using WGShare.API.Helpers;
|
|||
using WGShare.Domain.DTOs.Login;
|
||||
using WGShare.Domain.Entities;
|
||||
using WGShare.Domain.FriendlyException;
|
||||
using WGShare.Domain.FriendlyException.Exceptions;
|
||||
|
||||
namespace WGShare.API.Controllers
|
||||
{
|
||||
|
|
@ -80,6 +81,7 @@ namespace WGShare.API.Controllers
|
|||
btnAutn.Add(new Claim("tenant", user.TenantId));
|
||||
btnAutn.Add(new Claim("account", user.Account));
|
||||
btnAutn.Add(new Claim("uname", user.UserName));
|
||||
btnAutn.Add(new Claim("ssid", user.ScreenShareId));
|
||||
|
||||
var refreshToken = Guid.NewGuid().ToString();
|
||||
RedisHelper.Instance.Set($@"refresh:{refreshToken}", user, TimeSpan.FromDays(30).TotalSeconds.ToInt32());
|
||||
|
|
@ -94,7 +96,8 @@ namespace WGShare.API.Controllers
|
|||
tenantName = tenant.TenantName,
|
||||
expire = _configuration["Jwt:Expires"].ToInt32(),
|
||||
account = user.Account,
|
||||
uid = user.Id
|
||||
uid = user.Id,
|
||||
screenShareId = user.ScreenShareId
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -109,7 +112,7 @@ namespace WGShare.API.Controllers
|
|||
var user = RedisHelper.Instance.Get<User>($@"refresh:{refreshToken}");
|
||||
if (user == null || string.IsNullOrWhiteSpace(user.Id))
|
||||
{
|
||||
throw Oops.Oh("登录已失效,请重新登录");
|
||||
throw new FriendlyInternalException("登录已失效,请重新登录", null, 1403);
|
||||
}
|
||||
|
||||
var btnAutn = new List<Claim>();
|
||||
|
|
@ -118,6 +121,7 @@ namespace WGShare.API.Controllers
|
|||
btnAutn.Add(new Claim("tenant", user.TenantId));
|
||||
btnAutn.Add(new Claim("account", user.Account));
|
||||
btnAutn.Add(new Claim("uname", user.UserName));
|
||||
btnAutn.Add(new Claim("ssid", user.ScreenShareId));
|
||||
|
||||
|
||||
var refreshTokenNew = Guid.NewGuid().ToString();
|
||||
|
|
@ -134,7 +138,8 @@ namespace WGShare.API.Controllers
|
|||
tenantName = user.TenantName,
|
||||
expire = _configuration["Jwt:Expires"].ToInt32(),
|
||||
account = user.Account,
|
||||
uid = user.Id
|
||||
uid = user.Id,
|
||||
screenShareId = user.ScreenShareId
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -142,7 +147,7 @@ namespace WGShare.API.Controllers
|
|||
/// 匿名登录,直接进入会议室
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("anon-login")]
|
||||
[HttpPost("anon-login"),Obsolete]
|
||||
public async Task<IActionResult> Login([FromBody] AnonymousLoginDTO loginDTO)
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,14 @@ namespace WGShare.API.Controllers.Backend
|
|||
public async Task<bool> Add([FromBody] UserInputDTO userInput)
|
||||
{
|
||||
var entity = userInput.Adapt<User>();
|
||||
entity.Id = YitIdHelper.NextId().ToString();
|
||||
|
||||
// 获取当前时间的Unix时间戳(以毫秒为单位)
|
||||
long unixTimeMilliseconds = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||
// 将Unix时间戳转换为字符串并截取最后7位
|
||||
string last7Digits = unixTimeMilliseconds.ToString().Substring(unixTimeMilliseconds.ToString().Length - 7);
|
||||
|
||||
entity.ScreenShareId = $@"{last7Digits}{new Random().Next(10, 100)}";
|
||||
|
||||
if (await _sqlSugar.Queryable<User>().AnyAsync(x => x.Account == entity.Account))
|
||||
{
|
||||
throw Oops.Oh("账号已存在!");
|
||||
|
|
@ -77,7 +84,7 @@ namespace WGShare.API.Controllers.Backend
|
|||
}
|
||||
|
||||
return await _sqlSugar.Updateable(entity)
|
||||
.IgnoreColumns(x => new { x.Pwd }).ExecuteCommandAsync() > 0;
|
||||
.IgnoreColumns(x => new { x.Pwd, x.ScreenShareId }).ExecuteCommandAsync() > 0;
|
||||
}
|
||||
|
||||
[HttpPut("pwd")]
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using Microsoft.AspNetCore.SignalR;
|
|||
using Microsoft.IdentityModel.Tokens;
|
||||
using SqlSugar;
|
||||
using SqlSugar.Extensions;
|
||||
using System.Security.Principal;
|
||||
using WGShare.API.Controllers.Basic;
|
||||
using WGShare.API.Helpers;
|
||||
using WGShare.API.Hubs;
|
||||
|
|
@ -207,7 +208,7 @@ namespace WGShare.API.Controllers.Frontend
|
|||
_configuration["Agora:appId"],
|
||||
_configuration["Agora:appSecret"],
|
||||
roomNum,
|
||||
Account,
|
||||
"*",
|
||||
RtcTokenBuilder2.Role.ROLE_PUBLISHER,
|
||||
_configuration["Agora:tokenExpireTimeInSecond"].ToInt32(),
|
||||
_configuration["Agora:tokenExpireTimeInSecond"].ToInt32());
|
||||
|
|
@ -349,14 +350,32 @@ namespace WGShare.API.Controllers.Frontend
|
|||
[HttpGet("show-user")]
|
||||
public async Task<string> GetShowUser([FromQuery] string roomNum)
|
||||
{
|
||||
var channelUsers = RedisHelper.HGetAll<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
|
||||
|
||||
// 获取全部用户
|
||||
var channelUsers = RedisHelper.Instance.HGetAll<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
|
||||
if (channelUsers.IsNullOrEmpty())
|
||||
{
|
||||
throw Oops.Oh("无效会议号!");
|
||||
}
|
||||
|
||||
return channelUsers.FirstOrDefault().Key;
|
||||
// 获取全员观看用户
|
||||
var showUserId = RedisHelper.Instance.HGet(RedisKeyConstant.RoomManager.GetChannelShowUserKey(TenantId), roomNum);
|
||||
if (!string.IsNullOrWhiteSpace(showUserId) && channelUsers.Any(x => x.Value.UID == showUserId))
|
||||
{
|
||||
return showUserId;
|
||||
}
|
||||
|
||||
return channelUsers.FirstOrDefault().Value.UID;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置全员观看
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("show-user")]
|
||||
public async Task SetShowUser([FromQuery] string roomNum, [FromQuery] string uid)
|
||||
{
|
||||
// 设置房间全员观看用户
|
||||
RedisHelper.Instance.HSet(RedisKeyConstant.RoomManager.GetChannelShowUserKey(TenantId), roomNum, uid);
|
||||
}
|
||||
|
||||
#region 文件分享
|
||||
|
|
|
|||
|
|
@ -71,15 +71,21 @@ namespace WGShare.API.Controllers.Frontend
|
|||
public async Task<bool> AddUser([FromBody] UserInputDTO inputDTO)
|
||||
{
|
||||
var user = inputDTO.Adapt<User>();
|
||||
user.Id = YitIdHelper.NextId().ToString();
|
||||
//user.Id = YitIdHelper.NextId().ToString();
|
||||
user.TenantId = TenantId;
|
||||
|
||||
// 获取当前时间的Unix时间戳(以毫秒为单位)
|
||||
long unixTimeMilliseconds = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||
// 将Unix时间戳转换为字符串并截取最后7位
|
||||
string last7Digits = unixTimeMilliseconds.ToString().Substring(unixTimeMilliseconds.ToString().Length - 7);
|
||||
|
||||
user.ScreenShareId = $@"{last7Digits}{new Random().Next(10, 100)}";
|
||||
|
||||
if (await _sqlSugar.Queryable<User>().AnyAsync(x => x.Account == user.Account))
|
||||
{
|
||||
throw Oops.Oh("账号已存在!");
|
||||
}
|
||||
|
||||
|
||||
return await _sqlSugar.Insertable(user).ExecuteCommandAsync() > 0;
|
||||
}
|
||||
|
||||
|
|
@ -99,7 +105,7 @@ namespace WGShare.API.Controllers.Frontend
|
|||
}
|
||||
|
||||
return await _sqlSugar.Updateable(entity)
|
||||
.IgnoreColumns(x => new { x.Pwd, x.TenantId }).ExecuteCommandAsync() > 0;
|
||||
.IgnoreColumns(x => new { x.Pwd, x.TenantId, x.ScreenShareId }).ExecuteCommandAsync() > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -46,73 +46,73 @@ namespace WGShare.API.Helpers
|
|||
/// <returns></returns>
|
||||
public static int RandomExpired(int minTimeoutSeconds, int maxTimeoutSeconds) => rnd.Value.Next(minTimeoutSeconds, maxTimeoutSeconds);
|
||||
|
||||
public static List<T> HVals<T>(string key) where T : class
|
||||
{
|
||||
var valueStrings = Instance.HVals(key);
|
||||
if (valueStrings.IsNullOrEmpty())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
//public static List<T> HVals<T>(string key) where T : class
|
||||
//{
|
||||
// var valueStrings = Instance.HVals(key);
|
||||
// if (valueStrings.IsNullOrEmpty())
|
||||
// {
|
||||
// return null;
|
||||
// }
|
||||
|
||||
return valueStrings.ToList().ConvertAll(x => JsonConvert.DeserializeObject<T>(x));
|
||||
}
|
||||
// return valueStrings.ToList().ConvertAll(x => JsonConvert.DeserializeObject<T>(x));
|
||||
//}
|
||||
|
||||
public static T HGet<T>(string key, string field) where T : class
|
||||
{
|
||||
var valueString = Instance.HGet(key, field);
|
||||
if (valueString.IsNullOrEmpty())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return JsonConvert.DeserializeObject<T>(valueString);
|
||||
}
|
||||
//public static T HGet<T>(string key, string field) where T : class
|
||||
//{
|
||||
// var valueString = Instance.HGet(key, field);
|
||||
// if (valueString.IsNullOrEmpty())
|
||||
// {
|
||||
// return null;
|
||||
// }
|
||||
// return JsonConvert.DeserializeObject<T>(valueString);
|
||||
//}
|
||||
|
||||
public static List<T> HMGet<T>(string key, params string[] fields) where T : class
|
||||
{
|
||||
var valueStrings = Instance.HMGet(key, fields);
|
||||
if (valueStrings.IsNullOrEmpty())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return valueStrings.ToList().ConvertAll(x => JsonConvert.DeserializeObject<T>(x));
|
||||
}
|
||||
//public static List<T> HMGet<T>(string key, params string[] fields) where T : class
|
||||
//{
|
||||
// var valueStrings = Instance.HMGet(key, fields);
|
||||
// if (valueStrings.IsNullOrEmpty())
|
||||
// {
|
||||
// return null;
|
||||
// }
|
||||
// return valueStrings.ToList().ConvertAll(x => JsonConvert.DeserializeObject<T>(x));
|
||||
//}
|
||||
|
||||
public static Dictionary<string, T> HGetAll<T>(string key) where T : class
|
||||
{
|
||||
var dic = Instance.HGetAll(key);
|
||||
if (dic == null || dic.Count == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Dictionary<string, T> result = new Dictionary<string, T>();
|
||||
//public static Dictionary<string, T> HGetAll<T>(string key) where T : class
|
||||
//{
|
||||
// var dic = Instance.HGetAll(key);
|
||||
// if (dic == null || dic.Count == 0)
|
||||
// {
|
||||
// return null;
|
||||
// }
|
||||
// Dictionary<string, T> result = new Dictionary<string, T>();
|
||||
|
||||
foreach (var kv in dic)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(kv.Key) || string.IsNullOrWhiteSpace(kv.Value))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
result.Add(kv.Key, JsonConvert.DeserializeObject<T>(kv.Value));
|
||||
}
|
||||
// foreach (var kv in dic)
|
||||
// {
|
||||
// if (string.IsNullOrWhiteSpace(kv.Key) || string.IsNullOrWhiteSpace(kv.Value))
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// result.Add(kv.Key, JsonConvert.DeserializeObject<T>(kv.Value));
|
||||
// }
|
||||
|
||||
return result;
|
||||
}
|
||||
// return result;
|
||||
//}
|
||||
|
||||
|
||||
public static long HSet<T>(string key, string fields, T value) where T : class
|
||||
{
|
||||
return Instance.HSet(key, fields, value.ToJsonString());
|
||||
}
|
||||
//public static long HSet<T>(string key, string fields, T value) where T : class
|
||||
//{
|
||||
// return Instance.HSet(key, fields, value.ToJsonString());
|
||||
//}
|
||||
|
||||
|
||||
public static void HMSet<T>(string key, Dictionary<string, T> keyValues) where T : class
|
||||
{
|
||||
var dic = new Dictionary<string, string>();
|
||||
foreach (var kv in keyValues)
|
||||
{
|
||||
dic.Add(kv.Key,kv.Value.ToJsonString());
|
||||
}
|
||||
Instance.HMSet(key, dic);
|
||||
}
|
||||
//public static void HMSet<T>(string key, Dictionary<string, T> keyValues) where T : class
|
||||
//{
|
||||
// var dic = new Dictionary<string, string>();
|
||||
// foreach (var kv in keyValues)
|
||||
// {
|
||||
// dic.Add(kv.Key,kv.Value.ToJsonString());
|
||||
// }
|
||||
// Instance.HMSet(key, dic);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,11 +24,14 @@ namespace WGShare.API.Hubs
|
|||
{
|
||||
var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
|
||||
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value;
|
||||
var account = Context.User?.Claims.FirstOrDefault(x => x.Type == "account")?.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);
|
||||
|
||||
await ClearUserChannel(uid, tenant);
|
||||
await ClearUserChannel(uid, tenant, account);
|
||||
// 存储在线信息
|
||||
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetOnlineUserKey(tenant), uid, Context.ConnectionId);
|
||||
}
|
||||
|
|
@ -37,37 +40,41 @@ namespace WGShare.API.Hubs
|
|||
{
|
||||
var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
|
||||
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value;
|
||||
var account = Context.User?.Claims.FirstOrDefault(x => x.Type == "account")?.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);
|
||||
|
||||
if (Context.ConnectionId == RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(tenant), uid))
|
||||
{
|
||||
Console.WriteLine($"{DateTime.Now}断开连接 True");
|
||||
Console.WriteLine($"{DateTime.Now}断开连接 未重连,开始删除用户频道信息");
|
||||
// 断开后未重连则清退频道
|
||||
await ClearUserChannel(uid, tenant);
|
||||
await ClearUserChannel(uid, tenant, account);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async Task ClearUserChannel(string uid, string tenant)
|
||||
private async Task ClearUserChannel(string uid, string tenant, string account)
|
||||
{
|
||||
Console.WriteLine($"{DateTime.Now} 执行删除");
|
||||
Console.WriteLine($"{DateTime.Now} 执行删除开始");
|
||||
// 获取用户参加得频道
|
||||
var roomNums = RedisHelper.Instance.HKeys(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid));
|
||||
using (var pipe = RedisHelper.Instance.StartPipe())
|
||||
{
|
||||
// 获取用户参加得频道
|
||||
//var roomNums = pipe.HKeys(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid));
|
||||
Console.WriteLine($@"{DateTime.Now} account:{account} 退出以下频道:{string.Join(',', roomNums)}");
|
||||
if (!roomNums.IsNullOrEmpty())
|
||||
{
|
||||
Console.WriteLine($@"{DateTime.Now}uid:{uid} 退出以下频道:{string.Join(',', roomNums)}");
|
||||
// 所有房间移除该用户
|
||||
roomNums.ForEach(roomNum =>
|
||||
{
|
||||
pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid);
|
||||
//pipe.HIncrBy(RedisKeyConstant.SessionManage.GetChannelUserCountKey(tenant), roomNum, -1);
|
||||
|
||||
var script = $@"if (redis.call('HGET', KEYS[1], ARGV[1]) == ARGV[2]) then return redis.call('HDEL', KEYS[1], ARGV[1]) else return -1 end";
|
||||
// 执行 eval 命令
|
||||
pipe.Eval(script, [RedisKeyConstant.RoomManager.GetChannelShowUserKey(tenant)], roomNum, uid);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -80,7 +87,7 @@ namespace WGShare.API.Hubs
|
|||
pipe.EndPipe();
|
||||
}
|
||||
|
||||
Console.WriteLine($"{DateTime.Now} 执行删除 完成");
|
||||
Console.WriteLine($"{DateTime.Now} 执行删除完成");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -94,15 +101,17 @@ namespace WGShare.API.Hubs
|
|||
{
|
||||
var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
|
||||
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.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}加入频道 会议号:" + roomNum);
|
||||
Console.WriteLine($"{DateTime.Now}加入频道 uid:" + uid);
|
||||
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);
|
||||
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);
|
||||
|
|
@ -121,17 +130,20 @@ namespace WGShare.API.Hubs
|
|||
{
|
||||
var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
|
||||
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value;
|
||||
var account = Context.User?.Claims.FirstOrDefault(x => x.Type == "account")?.Value;
|
||||
|
||||
|
||||
Console.WriteLine($" {DateTime.Now}离开频道 会议号:" + roomNum);
|
||||
Console.WriteLine($" {DateTime.Now}离开频道 uid:" + uid);
|
||||
Console.WriteLine($" {DateTime.Now}离开频道 tenant:" + tenant);
|
||||
Console.WriteLine($" {DateTime.Now}离开频道 account:" + account);
|
||||
Console.WriteLine($" {DateTime.Now}离开频道 tenant:" + tenant);
|
||||
|
||||
using (var pipe = RedisHelper.Instance.StartPipe())
|
||||
{
|
||||
var script = $@"if (redis.call('HGET', KEYS[1], ARGV[1]) == ARGV[2]) then return redis.call('HDEL', KEYS[1], ARGV[1]) else return -1 end";
|
||||
// 执行 eval 命令
|
||||
pipe.Eval(script, [RedisKeyConstant.RoomManager.GetChannelShowUserKey(tenant)], roomNum, uid);
|
||||
pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid);
|
||||
pipe.HDel(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid), roomNum);
|
||||
//pipe.HIncrBy(RedisKeyConstant.SessionManage.GetChannelUserCountKey(tenant), roomNum, -1);
|
||||
pipe.EndPipe();
|
||||
}
|
||||
|
||||
|
|
@ -149,8 +161,8 @@ namespace WGShare.API.Hubs
|
|||
var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value;
|
||||
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value;
|
||||
|
||||
Console.WriteLine($" {DateTime.Now}发送消息 uname:" + uname);
|
||||
Console.WriteLine($" {DateTime.Now}发送消息 roomNum:" + rooNum);
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -1,18 +1,14 @@
|
|||
using Hangfire;
|
||||
using Hangfire.MemoryStorage;
|
||||
using Masuit.Tools;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Microsoft.Extensions.FileSystemGlobbing.Internal;
|
||||
using Microsoft.OpenApi.Models;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using SqlSugar;
|
||||
using System.Linq;
|
||||
using WGShare.API.BackgroudServices;
|
||||
using WGShare.API.Helpers;
|
||||
using WGShare.API.Hubs;
|
||||
using WGShare.API.ServiceConfigs;
|
||||
using WGShare.Domain.Constant;
|
||||
using Yitter.IdGenerator;
|
||||
|
||||
namespace WGShare.API
|
||||
|
|
@ -31,7 +27,6 @@ namespace WGShare.API
|
|||
{
|
||||
Serialize = (x) => x.ToJsonString(),
|
||||
Deserialize = (x, t) => JsonConvert.DeserializeObject(x, t),
|
||||
//DeserializeRaw = (x, t) => JsonConvert.DeserializeObject(x, t),
|
||||
});
|
||||
ResetRedisKey();
|
||||
|
||||
|
|
@ -128,7 +123,7 @@ namespace WGShare.API
|
|||
}
|
||||
while (nextCursor != 0);
|
||||
|
||||
var keysArr = keys.ConvertAll(x => x.Replace("wgshare:", "")).Distinct().ToArray();
|
||||
var keysArr = keys.ConvertAll(x => x.Replace("wgshare:", "")).Where(x => !x.StartsWith("refresh")).Distinct().ToArray();
|
||||
if (!keysArr.IsNullOrEmpty())
|
||||
{
|
||||
Console.WriteLine($@"ɾ³ý¼üÖµ£º{Environment.NewLine}{string.Join(Environment.NewLine, keysArr)}");
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ namespace WGShare.API.ServiceConfigs
|
|||
});
|
||||
|
||||
services.AddSingleton<ISqlSugarClient>(sqlSugar);
|
||||
StaticConfig.Check_StringIdentity = false;
|
||||
|
||||
return services;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,6 +163,12 @@
|
|||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WGShare.API.Controllers.Frontend.RoomController.SetShowUser(System.String,System.String)">
|
||||
<summary>
|
||||
设置全员观看
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WGShare.API.Controllers.Frontend.RoomController.AddFile(WGShare.Domain.DTOs.File.ShareFileInputDTO)">
|
||||
<summary>
|
||||
分享上传文件
|
||||
|
|
|
|||
|
|
@ -44,5 +44,19 @@ namespace WGShare.Domain.Constant
|
|||
[Obsolete("废弃")]
|
||||
public static string GetChannelUserCountKey(string tenantId) => $@"te_{tenantId}:ChannelUserCount";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 房间管理
|
||||
/// </summary>
|
||||
public class RoomManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取频道全员观看对象
|
||||
/// </summary>
|
||||
/// <param name="tenantId"></param>
|
||||
/// <param name="roomNum"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetChannelShowUserKey(string tenantId) => $@"te_{tenantId}:room_show_user";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,18 +22,22 @@ namespace WGShare.Domain.Entities
|
|||
/// <param name="connectId"></param>
|
||||
/// <param name="isMute">是否关闭麦克风,默认关</param>
|
||||
/// <param name="enableCamera">是否关闭摄像头,默认关</param>
|
||||
public ChannelUserInfo(string uid, string connectId, bool enableMicr, bool enableCamera)
|
||||
public ChannelUserInfo(string uid, string connectId, bool enableMicr, bool enableCamera, string account, string screenShareId)
|
||||
{
|
||||
this.UID = uid;
|
||||
this.ConnectId = connectId;
|
||||
this.EnableMicr = enableMicr;
|
||||
this.EnableCamera = enableCamera;
|
||||
|
||||
this.Account = account;
|
||||
this.ScreenShareId = screenShareId;
|
||||
}
|
||||
|
||||
public string UID { get; set; }
|
||||
|
||||
public string ConnectId { get; set; }
|
||||
|
||||
public string Account { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否关闭麦克风
|
||||
/// </summary>
|
||||
|
|
@ -43,5 +47,7 @@ namespace WGShare.Domain.Entities
|
|||
/// 是否关闭摄像头
|
||||
/// </summary>
|
||||
public bool EnableCamera { get; set; }
|
||||
|
||||
public string ScreenShareId { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ namespace WGShare.Domain.Entities
|
|||
/// <summary>
|
||||
///
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
|
||||
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
|
||||
public string Id { get; set; } = YitIdHelper.NextId().ToString();
|
||||
/// <summary>
|
||||
/// 是否删除
|
||||
|
|
@ -58,6 +58,11 @@ namespace WGShare.Domain.Entities
|
|||
///</summary>
|
||||
[SugarColumn(ColumnName = "tenant_id")]
|
||||
public string TenantId { get; set; }
|
||||
/// <summary>
|
||||
/// 共享屏幕Id
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "screen_share_id", IsOnlyIgnoreUpdate = true)]
|
||||
public string ScreenShareId { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string RoleName { get; set; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue