diff --git a/WGShare.API/Controllers/AuthController.cs b/WGShare.API/Controllers/AuthController.cs
index b5e4851..33eb2a1 100644
--- a/WGShare.API/Controllers/AuthController.cs
+++ b/WGShare.API/Controllers/AuthController.cs
@@ -31,12 +31,12 @@ namespace WGShare.API.Controllers
///
/// 检查用户名
///
- ///
+ ///
///
[HttpGet("check-user"), AllowAnonymous]
- public async Task CheckUser([FromQuery] string userName)
+ public async Task CheckUser([FromQuery] string account)
{
- return await _sqlSugar.Queryable().AnyAsync(x => x.IsDelete == false && x.UserName == userName);
+ return await _sqlSugar.Queryable().AnyAsync(x => x.IsDelete == false && x.Account == account);
}
///
@@ -47,7 +47,7 @@ namespace WGShare.API.Controllers
public async Task Login([FromBody] UserLoginDTO loginDTO)
{
var user = await _sqlSugar.Queryable()
- .FirstAsync(x => x.UserName == loginDTO.Account && x.IsDelete == false && x.Pwd == loginDTO.Pwd);
+ .FirstAsync(x => x.Account == loginDTO.Account && x.IsDelete == false && x.Pwd == loginDTO.Pwd);
if (user == null)
{
throw Oops.Oh("用户名或密码不正确!");
@@ -84,7 +84,9 @@ namespace WGShare.API.Controllers
roleId = user.RoleId,
userName = user.UserName,
tenantName = tenant.TenantName,
- expire= _configuration["Jwt:Expires"].ToInt32()
+ expire = _configuration["Jwt:Expires"].ToInt32(),
+ account = user.Account,
+ uid = user.Id
});
}
@@ -95,7 +97,7 @@ namespace WGShare.API.Controllers
[HttpPost("anon-login")]
public async Task Login([FromBody] AnonymousLoginDTO loginDTO)
{
-
+
var room = await _sqlSugar.Queryable().FirstAsync(x => x.Id == loginDTO.RoomId);
if (room == null)
{
@@ -115,7 +117,7 @@ namespace WGShare.API.Controllers
{
throw Oops.Oh("该区域账号已停用,请联系管理员");
}
-
+
var btnAutn = new List();
btnAutn.Add(new Claim("perm", perms.Sum(x => x.PermValue).ToString()));
diff --git a/WGShare.API/Controllers/Frontend/RoomController.cs b/WGShare.API/Controllers/Frontend/RoomController.cs
index 0a1db67..5f4f8ca 100644
--- a/WGShare.API/Controllers/Frontend/RoomController.cs
+++ b/WGShare.API/Controllers/Frontend/RoomController.cs
@@ -1,4 +1,5 @@
using AgoraIO.Media;
+using Hangfire.MemoryStorage.Database;
using Mapster;
using Masuit.Tools;
using Microsoft.AspNetCore.Authorization;
@@ -6,6 +7,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.IdentityModel.Tokens;
using SqlSugar;
+using SqlSugar.Extensions;
using WGShare.API.Controllers.Basic;
using WGShare.API.Helpers;
using WGShare.API.Hubs;
@@ -32,18 +34,21 @@ namespace WGShare.API.Controllers.Frontend
private readonly OssHelper _ossHelper;
private readonly AgoraHelper _agoraHelper;
private readonly IHubContext _hubContext;
+ private readonly ILogger _logger;
public RoomController(ISqlSugarClient sqlSugar,
IConfiguration configuration,
OssHelper ossHelper,
AgoraHelper agoraHelper,
- IHubContext hubContext)
+ IHubContext hubContext,
+ ILogger logger)
{
this._sqlSugar = sqlSugar;
this._configuration = configuration;
this._ossHelper = ossHelper;
this._agoraHelper = agoraHelper;
this._hubContext = hubContext;
+ this._logger = logger;
}
/////
@@ -94,18 +99,15 @@ namespace WGShare.API.Controllers.Frontend
[HttpGet("user")]
public async Task> GetUsers([FromQuery] string roomNum)
{
- var data = await _agoraHelper.GetChannelUserList(roomNum);
- if (data == null)
+ var channelUsers = RedisHelper.Instance.HVals(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
+ if (channelUsers.IsNullOrEmpty())
{
- throw Oops.Oh("请求失败");
- }
- if (!data.channel_exist)
- {
- throw Oops.Oh("频道不存在");
+ return new List();
}
+ var uids = channelUsers.Select(x => x.UID);
var users = await _sqlSugar.Queryable()
- .Where(x => data.users.Contains(x.Account))
+ .Where(x => uids.Contains(x.Id))
.ToListAsync();
var managerIds = await _sqlSugar.Queryable()
@@ -114,12 +116,57 @@ namespace WGShare.API.Controllers.Frontend
.Select((rm, r) => rm.UserId)
.ToListAsync();
-
var result = users.Adapt>();
- result.ForEach(x => x.IsManager = managerIds.Contains(x.Id));
+ result.ForEach(x =>
+ {
+ x.IsManager = managerIds.Contains(x.Id);
+ var info = channelUsers.FirstOrDefault(q => q.UID == x.Id);
+ if (info != null)
+ {
+ x.EnableMicr = info.EnableMicr;
+ x.EnableCamera = info.EnableCamera;
+ }
+ });
return result;
+
+
+
+ #region 暂时不用声网获取用户列表
+
+ //var data = await _agoraHelper.GetChannelUserList(roomNum);
+ //if (data == null)
+ //{
+ // throw Oops.Oh("请求失败");
+ //}
+ //if (!data.channel_exist)
+ //{
+ // throw Oops.Oh("频道不存在");
+ //}
+ //if (data.broadcasters.IsNullOrEmpty())
+ //{
+ // return new List();
+ //}
+ //var accounts = data.broadcasters.ConvertAll(x => x.ToString());
+
+ //var users = await _sqlSugar.Queryable()
+ // .Where(x => accounts.Contains(x.Account))
+ // .ToListAsync();
+
+ //var managerIds = await _sqlSugar.Queryable()
+ // .InnerJoin((rm, r) => r.Id == rm.RoomId)
+ // .Where((rm, r) => r.RoomNum == roomNum)
+ // .Select((rm, r) => rm.UserId)
+ // .ToListAsync();
+
+
+ //var result = users.Adapt>();
+
+ //result.ForEach(x => x.IsManager = managerIds.Contains(x.Id));
+
+ //return result;
+ #endregion
}
///
@@ -189,10 +236,89 @@ namespace WGShare.API.Controllers.Frontend
public async Task KickOut([FromQuery] string roomNum, [FromQuery] string kickUid)
{
var connectId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId), kickUid);
-
- await _hubContext.Clients.Client(connectId).ForceExitRoom(roomNum);
+ if (!string.IsNullOrWhiteSpace(connectId))
+ {
+ await _hubContext.Clients.Client(connectId).ForceExitRoom(roomNum);
+ }
}
+ ///
+ /// 开闭麦
+ ///
+ ///
+ [HttpGet("oper-micr")]
+ public async Task Mute([FromQuery] string roomNum, [FromQuery] bool enableMicr, [FromQuery] string? uid, [FromQuery] bool? isAll = false)
+ {
+ if (isAll.HasValue && isAll.Value)
+ {
+ // 全员静音
+ var allUsers = RedisHelper.Instance.HGetAll(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
+ if (!allUsers.Any())
+ {
+ return;
+ }
+ allUsers.ForEach(x => x.Value.EnableMicr = enableMicr);
+ RedisHelper.Instance.HMSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), allUsers);
+
+ await _hubContext.Clients.Group(roomNum).OperMicr(enableMicr);
+ await _hubContext.Clients.Group(roomNum).RefreshUserList();
+ return;
+ }
+
+ var userInfo = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), uid);
+ if (userInfo == null || string.IsNullOrWhiteSpace(userInfo.ConnectId))
+ {
+ _logger.LogError($"闭麦操作,用户不存在频道!rediskey:{RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)} uid:" + uid);
+ return;
+ }
+
+ userInfo.EnableMicr = enableMicr;
+ RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), uid, userInfo);
+
+ await _hubContext.Clients.Clients(userInfo.ConnectId).OperMicr(enableMicr);
+ await _hubContext.Clients.Group(roomNum).RefreshUserList();
+ }
+
+ ///
+ /// 开关闭摄像头
+ ///
+ ///
+ [HttpGet("oper-camera")]
+ public async Task CloseCamera([FromQuery] string roomNum, [FromQuery] bool enableCamera, [FromQuery] string? uid, [FromQuery] bool? isAll = false)
+ {
+ if (isAll.HasValue && isAll.Value)
+ {
+
+ var allUsers = RedisHelper.Instance.HGetAll(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum));
+ if (!allUsers.Any())
+ {
+ return;
+ }
+ 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.Group(roomNum).RefreshUserList();
+ return;
+ }
+
+ var userInfo = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), uid);
+ if (userInfo == null || string.IsNullOrWhiteSpace(userInfo.ConnectId))
+ {
+ _logger.LogError($"关闭摄像头操作,用户不存在频道!rediskey:{RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)} uid:" + uid);
+ return;
+ }
+
+ userInfo.EnableCamera = enableCamera;
+ RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), uid, userInfo);
+
+ await _hubContext.Clients.Clients(userInfo.ConnectId).OperCamera(enableCamera);
+ await _hubContext.Clients.Group(roomNum).RefreshUserList();
+ }
+
+
+
#region 文件分享
///
/// 分享上传文件
diff --git a/WGShare.API/Helpers/RedisHelper.cs b/WGShare.API/Helpers/RedisHelper.cs
index dc2fa57..adb80d9 100644
--- a/WGShare.API/Helpers/RedisHelper.cs
+++ b/WGShare.API/Helpers/RedisHelper.cs
@@ -1,4 +1,6 @@
using FreeRedis;
+using Masuit.Tools;
+using Newtonsoft.Json;
namespace WGShare.API.Helpers
{
@@ -43,5 +45,74 @@ namespace WGShare.API.Helpers
/// 最大秒数
///
public static int RandomExpired(int minTimeoutSeconds, int maxTimeoutSeconds) => rnd.Value.Next(minTimeoutSeconds, maxTimeoutSeconds);
+
+ public static List HVals(string key) where T : class
+ {
+ var valueStrings = Instance.HVals(key);
+ if (valueStrings.IsNullOrEmpty())
+ {
+ return null;
+ }
+
+ return valueStrings.ToList().ConvertAll(x => JsonConvert.DeserializeObject(x));
+ }
+
+ public static T HGet(string key, string field) where T : class
+ {
+ var valueString = Instance.HGet(key, field);
+ if (valueString.IsNullOrEmpty())
+ {
+ return null;
+ }
+ return JsonConvert.DeserializeObject(valueString);
+ }
+
+ public static List HMGet(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(x));
+ }
+
+ public static Dictionary HGetAll(string key) where T : class
+ {
+ var dic = Instance.HGetAll(key);
+ if (dic == null || dic.Count == 0)
+ {
+ return null;
+ }
+ Dictionary result = new Dictionary();
+
+ foreach (var kv in dic)
+ {
+ if (string.IsNullOrWhiteSpace(kv.Key) || string.IsNullOrWhiteSpace(kv.Value))
+ {
+ continue;
+ }
+ result.Add(kv.Key, JsonConvert.DeserializeObject(kv.Value));
+ }
+
+ return result;
+ }
+
+
+ public static long HSet(string key, string fields, T value) where T : class
+ {
+ return Instance.HSet(key, fields, value.ToJsonString());
+ }
+
+
+ public static void HMSet(string key, Dictionary keyValues) where T : class
+ {
+ var dic = new Dictionary();
+ foreach (var kv in keyValues)
+ {
+ dic.Add(kv.Key,kv.Value.ToJsonString());
+ }
+ Instance.HMSet(key, dic);
+ }
}
}
diff --git a/WGShare.API/Hubs/IMessageClient.cs b/WGShare.API/Hubs/IMessageClient.cs
index 06f6b7d..395980d 100644
--- a/WGShare.API/Hubs/IMessageClient.cs
+++ b/WGShare.API/Hubs/IMessageClient.cs
@@ -11,7 +11,7 @@
///
///
///
- Task ReceiveMessage(string userName, string message);
+ Task ReceiveMessage(string uid, string userName, string message);
///
@@ -29,5 +29,32 @@
/// 会议号
///
Task ForceExitRoom(string roomNum);
+
+ ///
+ /// 用户开闭麦
+ ///
+ ///
+ ///
+ Task OperMicr(bool enableMicr);
+
+ ///
+ /// 用户开启关闭摄像头
+ ///
+ ///
+ ///
+ Task OperCamera(bool enableCamera);
+
+ ///
+ /// 刷新用户列表
+ ///
+ ///
+ Task RefreshUserList();
+
+ /////
+ ///// 客户端操作
+ /////
+ /////
+ /////
+ //Task Operation(int type);
}
}
diff --git a/WGShare.API/Hubs/SessionManageHub.cs b/WGShare.API/Hubs/SessionManageHub.cs
index bc484f1..e7d2762 100644
--- a/WGShare.API/Hubs/SessionManageHub.cs
+++ b/WGShare.API/Hubs/SessionManageHub.cs
@@ -4,6 +4,7 @@ using Microsoft.AspNetCore.SignalR;
using System.Text;
using WGShare.API.Helpers;
using WGShare.Domain.Constant;
+using WGShare.Domain.Entities;
namespace WGShare.API.Hubs
{
@@ -61,15 +62,23 @@ namespace WGShare.API.Hubs
/// 加入频道
///
///
+ /// 是否关闭麦克风,默认是
+ /// 是否关闭摄像头,默认是
[HubMethodName("joinChannel")]
- public async Task JoinChannel(string roomNum)
+ public async Task JoinChannel(string roomNum, bool enableMicr = true, bool enableCamera = true)
{
var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value;
+
+ await Console.Out.WriteLineAsync("加入频道 会议号:" + roomNum);
+ await Console.Out.WriteLineAsync("加入频道 uid:" + uid);
+ await Console.Out.WriteLineAsync("加入频道 tenant:" + tenant);
+
using (var pipe = RedisHelper.Instance.StartPipe())
{
- pipe.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid, Context.ConnectionId);
+ var userInfo = new ChannelUserInfo(uid, Context.ConnectionId, enableMicr, enableCamera);
+ 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);
pipe.EndPipe();
@@ -88,6 +97,11 @@ 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;
+
+ await Console.Out.WriteLineAsync("离开频道 会议号:" + roomNum);
+ await Console.Out.WriteLineAsync("离开频道 uid:" + uid);
+ await Console.Out.WriteLineAsync("离开频道 tenant:" + tenant);
+
using (var pipe = RedisHelper.Instance.StartPipe())
{
pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid);
@@ -103,39 +117,29 @@ namespace WGShare.API.Hubs
/// 发送频道消息
///
///
- ///
///
[HubMethodName("sendChannelMsg")]
public async Task SenMessage(string rooNum, string msg)
{
var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value;
+ var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == "uid")?.Value;
- await Clients.GroupExcept(rooNum, Context.ConnectionId).ReceiveMessage(uname, msg);
+ await Console.Out.WriteLineAsync("发送消息 uname:" + uname);
+ await Console.Out.WriteLineAsync("发送消息 roomNum:" + rooNum);
+ await Console.Out.WriteLineAsync("发送消息 msg:" + msg);
+
+ await Clients.GroupExcept(rooNum, Context.ConnectionId).ReceiveMessage(uid, uname, msg);
}
/////
- ///// 邀请呼叫
+ ///// 发送客户端指令
/////
- ///// 被邀请人id
- ///// 会议名称
- ///// 会议号
/////
- //[HubMethodName("call")]
- //public async Task<(bool isSuccess, string msg)> CallUser(string inviteeUid, string roomName, string roomNum)
+ //[HubMethodName("sendOper")]
+ //public async Task SendOperation(string roomNum, int type)
//{
- // var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
- // var uname = Context.User?.Claims.FirstOrDefault(x => x.Type == "uname")?.Value;
-
- // var connectId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetOnlineUserKey(tenant), inviteeUid);
- // if (string.IsNullOrWhiteSpace(connectId))
- // {
- // return (false, "被邀请人不在线");
- // }
-
- // await Clients.Client(connectId).Invitation(roomNum, roomName, uname);
-
- // return (true, "邀请成功");
+ // await Clients.Group(roomNum).Operation(type);
//}
-
+
}
}
diff --git a/WGShare.API/Program.cs b/WGShare.API/Program.cs
index 5ef5c5c..4cf627f 100644
--- a/WGShare.API/Program.cs
+++ b/WGShare.API/Program.cs
@@ -1,5 +1,6 @@
using Hangfire;
using Hangfire.MemoryStorage;
+using Masuit.Tools;
using Microsoft.AspNetCore.SignalR;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json;
@@ -21,9 +22,14 @@ namespace WGShare.API
var builder = WebApplication.CreateBuilder(args);
var configuration = builder.Configuration;
- // Add services to the container.
+ // Add services to the container.
- RedisHelper.Initialization(new FreeRedis.RedisClient(configuration["Redis:master"]));
+ RedisHelper.Initialization(new FreeRedis.RedisClient(configuration["Redis:master"])
+ {
+ Serialize = (x) => x.ToJsonString(),
+ Deserialize = (x, t) => JsonConvert.DeserializeObject(x, t),
+ //DeserializeRaw = (x, t) => JsonConvert.DeserializeObject(x, t),
+ });
builder.Services.AddControllers(options =>
{
// ȫ쳣ڴ д try catch
diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml
index 5ca2021..3ece757 100644
--- a/WGShare.API/WGShare.API.xml
+++ b/WGShare.API/WGShare.API.xml
@@ -8,7 +8,7 @@
检查用户名
-
+
@@ -131,6 +131,18 @@
+
+
+ 开闭麦
+
+
+
+
+
+ 开关闭摄像头
+
+
+
分享上传文件
@@ -276,7 +288,7 @@
客户端消息
-
+
接受频道消息
@@ -300,11 +312,33 @@
会议号
-
+
+
+ 用户开闭麦
+
+
+
+
+
+
+ 用户开启关闭摄像头
+
+
+
+
+
+
+ 刷新用户列表
+
+
+
+
加入频道
+ 是否关闭麦克风,默认是
+ 是否关闭摄像头,默认是
@@ -317,7 +351,6 @@
发送频道消息
-
diff --git a/WGShare.API/appsettings.Development.json b/WGShare.API/appsettings.Development.json
index 2ca3bb7..d441ebe 100644
--- a/WGShare.API/appsettings.Development.json
+++ b/WGShare.API/appsettings.Development.json
@@ -10,6 +10,6 @@
"usercenter": "Database=usercenter;Server=192.168.2.9;Port=3306;Uid=root;Pwd=qwe123!@#;AllowZeroDateTime=True;ConvertZeroDateTime=True;"
},
"Redis": {
- "master": "192.168.2.7:6379,password=qwe123!@#,defaultDatabase=13,name=wgshare,prefix=wgshare"
+ "master": "192.168.2.7:6379,password=qwe123!@#,defaultDatabase=13,name=wgshare,prefix=wgshare:"
}
}
diff --git a/WGShare.API/appsettings.json b/WGShare.API/appsettings.json
index de42024..cc130ac 100644
--- a/WGShare.API/appsettings.json
+++ b/WGShare.API/appsettings.json
@@ -18,7 +18,7 @@
"usercenter": "Database=usercenter;Server=192.168.2.9;Port=3306;Uid=root;Pwd=qwe123!@#;AllowZeroDateTime=True;ConvertZeroDateTime=True;"
},
"Redis": {
- "master": "172.29.33.83:16379,password=poiuyt)(*&^%,defaultDatabase=13,prefix=wgshare"
+ "master": "172.29.33.83:16379,password=poiuyt)(*&^%,defaultDatabase=13,prefix=wgshare:"
},
"Agora": {
"appId": "dcfc466a6ecb4a1f972630065dfb1e75",
diff --git a/WGShare.Domain/AgoraApiResult/ChannelUser.cs b/WGShare.Domain/AgoraApiResult/ChannelUser.cs
index c8b7e03..bc1897a 100644
--- a/WGShare.Domain/AgoraApiResult/ChannelUser.cs
+++ b/WGShare.Domain/AgoraApiResult/ChannelUser.cs
@@ -23,6 +23,25 @@ namespace WGShare.Domain.AgoraApiResult
///
public int total { get; set; }
- public List users { get; set; }
+
+ ///
+ /// 频道内所有主播的用户 ID。该字段仅在直播场景(mode 的值为 2)下返回。
+ ///
+ public List broadcasters { get; set; }
+
+ ///
+ /// 频道内所有用户的用户 ID。该字段仅在通信场景(mode 的值为 1)下返回。
+ ///
+ public List users { get; set; }
+
+ ///
+ /// 频道内观众的用户 ID。最多包含当前频道内前 10,000 名观众的用户 ID。该字段仅在直播场景(mode 的值为 2)且未填 hosts_only 参数时返回。
+ ///
+ public List audience { get; set; }
+
+ ///
+ /// 频道内的观众总人数。该字段仅在直播场景(mode 的值为 2)下且未填 hosts_only 参数时返回。
+ ///
+ public int audience_total { get; set; }
}
}
diff --git a/WGShare.Domain/DTOs/User/UserOutputDTO.cs b/WGShare.Domain/DTOs/User/UserOutputDTO.cs
index 0f16066..38f148a 100644
--- a/WGShare.Domain/DTOs/User/UserOutputDTO.cs
+++ b/WGShare.Domain/DTOs/User/UserOutputDTO.cs
@@ -26,5 +26,14 @@ namespace WGShare.Domain.DTOs.User
///
public bool IsManager { get; set; }
+ ///
+ /// 是否关闭麦克风
+ ///
+ public bool EnableMicr { get; set; }
+
+ ///
+ /// 是否关闭摄像头
+ ///
+ public bool EnableCamera { get; set; }
}
}
diff --git a/WGShare.Domain/Entities/ChannelUserInfo.cs b/WGShare.Domain/Entities/ChannelUserInfo.cs
new file mode 100644
index 0000000..a1492a3
--- /dev/null
+++ b/WGShare.Domain/Entities/ChannelUserInfo.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WGShare.Domain.Entities
+{
+ ///
+ /// 用户在频道中的状态
+ ///
+ public class ChannelUserInfo
+ {
+ public ChannelUserInfo()
+ {
+
+ }
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 是否关闭麦克风,默认关
+ /// 是否关闭摄像头,默认关
+ public ChannelUserInfo(string uid, string connectId, bool enableMicr, bool enableCamera)
+ {
+ this.UID = uid;
+ this.ConnectId = connectId;
+ this.EnableMicr = enableMicr;
+ this.EnableCamera = enableCamera;
+
+ }
+ public string UID { get; set; }
+
+ public string ConnectId { get; set; }
+
+ ///
+ /// 是否关闭麦克风
+ ///
+ public bool EnableMicr { get; set; }
+
+ ///
+ /// 是否关闭摄像头
+ ///
+ public bool EnableCamera { get; set; }
+ }
+}