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": [
{
"UserName": "marking",
"Pwd": "0610DBF49053E6779393A74BE1ED4FD2",
"Pwd": "CE09921E2AD09E56095579DF1F7C614B",
"Host": "47.109.67.254:10022",
"NickName": "marking001",
"IIsFireUrl": null,
@ -115,11 +115,11 @@
"DockerConfig": {
"Prot": "5192:5192",
"AspNetCoreEnv": "",
"LastEnvName": "29dev",
"LastEnvName": "marking001",
"RemoveDaysFromPublished": "10",
"WorkDir": "",
"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": [
{
"EnvName": "29dev",

View File

@ -380,13 +380,25 @@ namespace WGShare.API.Controllers.Frontend
}
// 获取全部用户
var uids = RedisHelper.Instance.HKeys(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
if (uids.IsNullOrEmpty())
var userInfos = RedisHelper.Instance.HVals<ChannelUserInfo>(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
if (userInfos.IsNullOrEmpty())
{
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>
@ -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
/// <summary>

View File

@ -154,5 +154,16 @@ namespace WGShare.API.Hubs
/// <param name="NickName"></param>
/// <returns></returns>
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 System;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Security.Claims;
using System.Text;
using WGShare.API.Helpers;
using WGShare.Domain.Constant;
using WGShare.Domain.Entities;
using WGShare.Domain.Enums;
using WGShare.Domain.FriendlyException;
using ZstdSharp.Unsafe;
namespace WGShare.API.Hubs
@ -123,8 +125,8 @@ namespace WGShare.API.Hubs
var ssid = Context.User?.Claims.FirstOrDefault(x => x.Type == "ssid")?.Value;
var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value;
var roleId = Context.User?.Claims.FirstOrDefault(x => x.Type == "roleid")?.Value;
try
{
Console.WriteLine($"{DateTime.Now}加入频道 会议号:" + roomNum);
Console.WriteLine($"{DateTime.Now}加入频道 account" + account);
Console.WriteLine($"{DateTime.Now}加入频道 tenant" + tenant);
@ -175,8 +177,17 @@ namespace WGShare.API.Hubs
await Groups.AddToGroupAsync(Context.ConnectionId, roomNum);
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>

View File

@ -286,6 +286,18 @@
</summary>
<returns></returns>
</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)">
<summary>
分享上传文件
@ -702,6 +714,17 @@
<param name="NickName"></param>
<returns></returns>
</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)">
<summary>
加入频道