diff --git a/WGShare.API/Controllers/Frontend/RoomController.cs b/WGShare.API/Controllers/Frontend/RoomController.cs
index 5f4f8ca..470baaa 100644
--- a/WGShare.API/Controllers/Frontend/RoomController.cs
+++ b/WGShare.API/Controllers/Frontend/RoomController.cs
@@ -120,7 +120,7 @@ namespace WGShare.API.Controllers.Frontend
result.ForEach(x =>
{
- x.IsManager = managerIds.Contains(x.Id);
+ x.IsManager = (x.RoleId == "1" || managerIds.Contains(x.Id));
var info = channelUsers.FirstOrDefault(q => q.UID == x.Id);
if (info != null)
{
@@ -257,10 +257,16 @@ namespace WGShare.API.Controllers.Frontend
{
return;
}
- allUsers.ForEach(x => x.Value.EnableMicr = enableMicr);
+ allUsers.ForEach(x =>
+ {
+ if (x.Key != uid)
+ {
+ x.Value.EnableMicr = enableMicr;
+ }
+ });
RedisHelper.Instance.HMSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), allUsers);
- await _hubContext.Clients.Group(roomNum).OperMicr(enableMicr);
+ await _hubContext.Clients.GroupExcept(roomNum, allUsers[uid].ConnectId).OperMicr(enableMicr);
await _hubContext.Clients.Group(roomNum).RefreshUserList();
return;
}
@@ -294,11 +300,19 @@ namespace WGShare.API.Controllers.Frontend
{
return;
}
- allUsers.ForEach(x => x.Value.EnableCamera = enableCamera);
+ allUsers.ForEach(x =>
+ {
+ if (x.Key != uid)
+ {
+ x.Value.EnableCamera = enableCamera;
+ }
+ });
+
+ //allUsers.ForEach(x => x.Value.EnableCamera = enableCamera);
RedisHelper.Instance.HMSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), allUsers);
// 全员开关闭摄像头
- await _hubContext.Clients.Group(roomNum).OperCamera(enableCamera);
+ await _hubContext.Clients.GroupExcept(roomNum, allUsers[uid].ConnectId).OperCamera(enableCamera);
await _hubContext.Clients.Group(roomNum).RefreshUserList();
return;
}
@@ -317,7 +331,16 @@ namespace WGShare.API.Controllers.Frontend
await _hubContext.Clients.Group(roomNum).RefreshUserList();
}
-
+ ///
+ /// 同步视图
+ ///
+ ///
+ ///
+ [HttpGet("sync-view")]
+ public async Task ChangeView([FromQuery] string roomNum, [FromQuery] string type)
+ {
+ await _hubContext.Clients.Groups(roomNum).RefreshView(type);
+ }
#region 文件分享
///
diff --git a/WGShare.API/Controllers/Frontend/UserController.cs b/WGShare.API/Controllers/Frontend/UserController.cs
index 7e35e56..1c41231 100644
--- a/WGShare.API/Controllers/Frontend/UserController.cs
+++ b/WGShare.API/Controllers/Frontend/UserController.cs
@@ -2,6 +2,8 @@
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using WGShare.API.Controllers.Basic;
+using WGShare.API.Helpers;
+using WGShare.Domain.Constant;
using WGShare.Domain.DTOs.User;
using WGShare.Domain.Entities;
using WGShare.Domain.FriendlyException;
@@ -29,14 +31,19 @@ namespace WGShare.API.Controllers.Frontend
/// 翻页信息
///
[HttpGet("list")]
- public async Task> GetUserList([FromQuery] string? searchKeywod, [FromQuery] PagedBaseDto pagedBaseDto)
+ public async Task> GetUserList([FromQuery] string? searchKeywod, [FromQuery] bool? isOnline, [FromQuery] PagedBaseDto pagedBaseDto)
{
RefAsync total = 0;
+ // 获取在线用户id
+ var onlineUid = RedisHelper.Instance.HKeys(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId));
+
var list = await _sqlSugar.Queryable()
.InnerJoin((u, r) => u.RoleId == r.Id)
.Where((u, r) => u.IsDelete == false && u.TenantId == TenantId)
.WhereIF(!string.IsNullOrWhiteSpace(searchKeywod), (u, r) => u.UserName.Contains(searchKeywod) || u.Account.Contains(searchKeywod))
+ .WhereIF(isOnline.HasValue && isOnline.Value == true, (u, r) => onlineUid.Contains(u.Id))
+ .WhereIF(isOnline.HasValue && isOnline.Value == false, (u, r) => !onlineUid.Contains(u.Id))
.Select((u, r) => new UserOutputDTO
{
Id = u.Id,
@@ -47,6 +54,9 @@ namespace WGShare.API.Controllers.Frontend
})
.ToPageListAsync(pagedBaseDto.PageIndex, pagedBaseDto.PageSize, total);
+
+ list.ForEach(x => x.IsOnline = onlineUid.Contains(x.Id));
+
return PagedResult.Create(list, total.Value);
}
diff --git a/WGShare.API/Hubs/IMessageClient.cs b/WGShare.API/Hubs/IMessageClient.cs
index 395980d..7d6911b 100644
--- a/WGShare.API/Hubs/IMessageClient.cs
+++ b/WGShare.API/Hubs/IMessageClient.cs
@@ -50,11 +50,17 @@
///
Task RefreshUserList();
- /////
- ///// 客户端操作
- /////
- /////
- /////
- //Task Operation(int type);
+ ///
+ /// 客户端操作
+ ///
+ ///
+ ///
+ Task Operation(int type);
+
+ ///
+ /// 更新视图
+ ///
+ ///
+ Task RefreshView(string type);
}
}
diff --git a/WGShare.API/Hubs/SessionManageHub.cs b/WGShare.API/Hubs/SessionManageHub.cs
index e7d2762..c6b8bfd 100644
--- a/WGShare.API/Hubs/SessionManageHub.cs
+++ b/WGShare.API/Hubs/SessionManageHub.cs
@@ -131,15 +131,15 @@ namespace WGShare.API.Hubs
await Clients.GroupExcept(rooNum, Context.ConnectionId).ReceiveMessage(uid, uname, msg);
}
- /////
- ///// 发送客户端指令
- /////
- /////
- //[HubMethodName("sendOper")]
- //public async Task SendOperation(string roomNum, int type)
- //{
- // await Clients.Group(roomNum).Operation(type);
- //}
-
+ ///
+ /// 发送客户端指令
+ ///
+ ///
+ [HubMethodName("sendOper")]
+ public async Task SendOperation(string roomNum, int type)
+ {
+ await Clients.Group(roomNum).Operation(type);
+ }
+
}
}
diff --git a/WGShare.API/Program.cs b/WGShare.API/Program.cs
index 4cf627f..2632b97 100644
--- a/WGShare.API/Program.cs
+++ b/WGShare.API/Program.cs
@@ -2,11 +2,13 @@ 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;
@@ -19,7 +21,9 @@ namespace WGShare.API
{
public static void Main(string[] args)
{
+
var builder = WebApplication.CreateBuilder(args);
+
var configuration = builder.Configuration;
// Add services to the container.
@@ -30,6 +34,8 @@ namespace WGShare.API
Deserialize = (x, t) => JsonConvert.DeserializeObject(x, t),
//DeserializeRaw = (x, t) => JsonConvert.DeserializeObject(x, t),
});
+ ResetRedisKey();
+
builder.Services.AddControllers(options =>
{
// ȫ쳣ڴ д try catch
@@ -78,6 +84,7 @@ namespace WGShare.API
var app = builder.Build();
+
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
@@ -103,5 +110,33 @@ namespace WGShare.API
app.Run();
}
+
+ ///
+ /// ǰɾredisе
+ ///
+ private static void ResetRedisKey()
+ {
+ Console.WriteLine($@"ʼǰִRedisʼ...");
+
+ var keys = new List();
+ long nextCursor = 0;
+ do
+ {
+ var scanResult = RedisHelper.Instance.Scan(nextCursor, "wgshare:*", 1000, "");
+ nextCursor = scanResult.cursor;
+ var items = scanResult.items;
+ keys.AddRange(items);
+ }
+ while (nextCursor != 0);
+
+ var keysArr = keys.ConvertAll(x => x.Replace("wgshare:", "")).Distinct().ToArray();
+ if (!keysArr.IsNullOrEmpty())
+ {
+ Console.WriteLine($@"ɾֵ{Environment.NewLine}{string.Join(Environment.NewLine, keysArr)}");
+ RedisHelper.Instance.Del(keysArr);
+ }
+
+ Console.WriteLine("ִ,ʼRedis");
+ }
}
}
diff --git a/WGShare.API/ServiceConfigs/SqlsugarServiceExtensions.cs b/WGShare.API/ServiceConfigs/SqlsugarServiceExtensions.cs
index ef6cae4..c0ccaaf 100644
--- a/WGShare.API/ServiceConfigs/SqlsugarServiceExtensions.cs
+++ b/WGShare.API/ServiceConfigs/SqlsugarServiceExtensions.cs
@@ -43,7 +43,7 @@ namespace WGShare.API.ServiceConfigs
db.Aop.OnLogExecuting = (sql, pars) =>
{
// 打印 Sql 语句
- Console.WriteLine($@"{new string('=', 10)}BEGIN{new string('=', 5)} DB-IP:{ipMatch.Value} {new string('=', 5)} DB-Name:{dbNamne} {new string('=', 15)}");
+ Console.WriteLine($@"{DateTime.Now.ToShortTimeString()}{new string('=', 10)}BEGIN{new string('=', 5)} DB-IP:{ipMatch.Value} {new string('=', 5)} DB-Name:{dbNamne} {new string('=', 15)}");
Console.WriteLine($"执行Sql:{Environment.NewLine}{sql}");
Console.WriteLine($"参数:{db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))}");
};
@@ -53,7 +53,7 @@ namespace WGShare.API.ServiceConfigs
{
//执行完了可以输出SQL执行时间
Console.WriteLine("Sql用时:" + db.Ado.SqlExecutionTime.ToString());
- Console.WriteLine($@"{new string('=', 10)}END{new string('=', 7)} DB-IP:{ipMatch.Value} {new string('=', 5)} DB-Name:{dbNamne} {new string('=', 15)}");
+ Console.WriteLine($@"{DateTime.Now.ToShortTimeString()}{new string('=', 10)}END{new string('=', 7)} DB-IP:{ipMatch.Value} {new string('=', 5)} DB-Name:{dbNamne} {new string('=', 15)}");
};
}
});
diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml
index 3ece757..5d917e6 100644
--- a/WGShare.API/WGShare.API.xml
+++ b/WGShare.API/WGShare.API.xml
@@ -143,6 +143,13 @@
+
+
+ 同步视图
+
+
+
+
分享上传文件
@@ -178,7 +185,7 @@
文件Id
-
+
获取用户列表
@@ -332,6 +339,19 @@
+
+
+ 客户端操作
+
+
+
+
+
+
+ 更新视图
+
+
+
加入频道
@@ -353,6 +373,17 @@
+
+
+ 发送客户端指令
+
+
+
+
+
+ 程序启动前,删除redis中得数据
+
+
添加认证和授权
diff --git a/WGShare.Domain/DTOs/User/UserOutputDTO.cs b/WGShare.Domain/DTOs/User/UserOutputDTO.cs
index 38f148a..e3ff39d 100644
--- a/WGShare.Domain/DTOs/User/UserOutputDTO.cs
+++ b/WGShare.Domain/DTOs/User/UserOutputDTO.cs
@@ -35,5 +35,10 @@ namespace WGShare.Domain.DTOs.User
/// 是否关闭摄像头
///
public bool EnableCamera { get; set; }
+
+ ///
+ /// 是否在线
+ ///
+ public bool IsOnline { get; set; }
}
}