This commit is contained in:
youngq 2025-02-12 10:58:39 +08:00
parent 9a7c0c61d0
commit 6106f06f8a
5 changed files with 145 additions and 45 deletions

View File

@ -24,7 +24,7 @@
"LinuxServerList": [ "LinuxServerList": [
{ {
"UserName": "marking", "UserName": "marking",
"Pwd": "0610DBF49053E6779393A74BE1ED4FD2", "Pwd": "CE09921E2AD09E56095579DF1F7C614B",
"Host": "47.109.67.254:10022", "Host": "47.109.67.254:10022",
"NickName": "marking001", "NickName": "marking001",
"IIsFireUrl": null, "IIsFireUrl": null,
@ -115,11 +115,11 @@
"DockerConfig": { "DockerConfig": {
"Prot": "5192:5192", "Prot": "5192:5192",
"AspNetCoreEnv": "", "AspNetCoreEnv": "",
"LastEnvName": "29dev", "LastEnvName": "marking001",
"RemoveDaysFromPublished": "10", "RemoveDaysFromPublished": "10",
"WorkDir": "", "WorkDir": "",
"Volume": "", "Volume": "",
"Other": "--name wgshare-api -e ASPNETCORE_ENVIRONMENT=Development -e TZ=Asia/Shanghai", "Other": "--name wgshare-api -e ASPNETCORE_ENVIRONMENT=Production -e TZ=Asia/Shanghai",
"EnvPairList": [ "EnvPairList": [
{ {
"EnvName": "29dev", "EnvName": "29dev",

View File

@ -380,13 +380,25 @@ namespace WGShare.API.Controllers.Frontend
} }
// 获取全部用户 // 获取全部用户
var uids = RedisHelper.Instance.HKeys(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)); var userInfos = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
if (uids.IsNullOrEmpty()) if (userInfos.IsNullOrEmpty())
{ {
throw Oops.Oh("无效会议号!"); throw Oops.Oh("无效会议号!");
} }
return uids.FirstOrDefault(); var managers = userInfos.Where(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager || x.RoleId == ((int)RoleEnums.RoomManager).ToString());
if (managers.IsNullOrEmpty())
{
return userInfos.FirstOrDefault().UID;
}
var user = managers.FirstOrDefault(x => x.EnableCamera = true);
if (user == null)
{
return managers.FirstOrDefault().UID;
}
return user.UID;
} }
/// <summary> /// <summary>
@ -616,6 +628,49 @@ namespace WGShare.API.Controllers.Frontend
} }
} }
/// <summary>
/// 获取共享屏幕
/// </summary>
/// <returns></returns>
[HttpGet("shared-screen")]
public async Task<string> GetSharedScreen([FromQuery] string roomNum)
{
var showUserId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum);
if (showUserId.Length == 9)
{
// 全员观看userid =9 表示共享屏幕
return showUserId;
}
return string.Empty;
}
/// <summary>
/// 设置共享屏幕
/// </summary>
/// <returns></returns>
[HttpPost("shared-screen")]
public async Task SharedScreen([FromQuery] string roomNum)
{
//var showUserId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum);
//if (showUserId.Length == 9)
//{
// var user = await _sqlSugar.Queryable<User>().FirstAsync(x => x.ScreenShareId == showUserId);
// if (user != null)
// {
// //
// await _hubContext.Clients.User(user.Id).ExitSharedScreen();
// }
//}
var connectId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), UId);
// 通知其他所有共享屏幕用户退出
await _hubContext.Clients.GroupExcept(roomNum, connectId).ExitSharedScreen();
// 设置新的共享屏幕
RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), roomNum, ScreenShareId);
// 通知全员观看新的共享屏幕
await _hubContext.Clients.Group(roomNum).ShowUser(UId, UserName, string.Empty, string.Empty);
}
#region #region
/// <summary> /// <summary>

View File

@ -154,5 +154,16 @@ namespace WGShare.API.Hubs
/// <param name="NickName"></param> /// <param name="NickName"></param>
/// <returns></returns> /// <returns></returns>
Task ModifyNickName(long UId, string NickName); Task ModifyNickName(long UId, string NickName);
/// <summary>
/// 退出共享屏幕
/// </summary>
/// <returns></returns>
Task ExitSharedScreen();
/// <summary>
/// 加入频道回调
/// </summary>
Task JoinChannelCallback(bool isSuccess);
} }
} }

View File

@ -7,12 +7,14 @@ using SqlSugar;
using SqlSugar.Extensions; using SqlSugar.Extensions;
using System; using System;
using System.Globalization; using System.Globalization;
using System.Runtime.InteropServices;
using System.Security.Claims; using System.Security.Claims;
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.Entities; using WGShare.Domain.Entities;
using WGShare.Domain.Enums; using WGShare.Domain.Enums;
using WGShare.Domain.FriendlyException;
using ZstdSharp.Unsafe; using ZstdSharp.Unsafe;
namespace WGShare.API.Hubs namespace WGShare.API.Hubs
@ -123,8 +125,8 @@ 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;
var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value; var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value;
var roleId = Context.User?.Claims.FirstOrDefault(x => x.Type == "roleid")?.Value; var roleId = Context.User?.Claims.FirstOrDefault(x => x.Type == "roleid")?.Value;
try
{
Console.WriteLine($"{DateTime.Now}加入频道 会议号:" + roomNum); Console.WriteLine($"{DateTime.Now}加入频道 会议号:" + roomNum);
Console.WriteLine($"{DateTime.Now}加入频道 account" + account); Console.WriteLine($"{DateTime.Now}加入频道 account" + account);
Console.WriteLine($"{DateTime.Now}加入频道 tenant" + tenant); Console.WriteLine($"{DateTime.Now}加入频道 tenant" + tenant);
@ -175,8 +177,17 @@ namespace WGShare.API.Hubs
await Groups.AddToGroupAsync(Context.ConnectionId, roomNum); await Groups.AddToGroupAsync(Context.ConnectionId, roomNum);
await Clients.GroupExcept(roomNum, Context.ConnectionId).UserJoined(userInfo); await Clients.GroupExcept(roomNum, Context.ConnectionId).UserJoined(userInfo);
} await Clients.Caller.JoinChannelCallback(true);
}
catch (Exception ex)
{
await Clients.Caller.JoinChannelCallback(false);
_logger.LogError(ex, $@"加入频道异常,tenant:{tenant},uid:{uid},ssid:{ssid},uname:{uname} {Environment.NewLine}{ex.Message}");
await ExceptionNotice.SendAsync(ex, $@"加入频道异常,tenant:{tenant},uid:{uid},ssid:{ssid},uname:{uname} ");
}
}
/// <summary> /// <summary>
/// 离开频道 /// 离开频道
/// </summary> /// </summary>

View File

@ -286,6 +286,18 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.GetSharedScreen(System.String)">
<summary>
获取共享屏幕
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.SharedScreen(System.String)">
<summary>
设置共享屏幕
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.AddFile(WGShare.Domain.DTOs.File.ShareFileInputDTO)"> <member name="M:WGShare.API.Controllers.Frontend.RoomController.AddFile(WGShare.Domain.DTOs.File.ShareFileInputDTO)">
<summary> <summary>
分享上传文件 分享上传文件
@ -702,6 +714,17 @@
<param name="NickName"></param> <param name="NickName"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WGShare.API.Hubs.IMessageClient.ExitSharedScreen">
<summary>
退出共享屏幕
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Hubs.IMessageClient.JoinChannelCallback(System.Boolean)">
<summary>
加入频道回调
</summary>
</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>
加入频道 加入频道