diff --git a/WGShare.API/AntDeploy.json b/WGShare.API/AntDeploy.json
index 83bbf8a..20d2005 100644
--- a/WGShare.API/AntDeploy.json
+++ b/WGShare.API/AntDeploy.json
@@ -115,11 +115,11 @@
"DockerConfig": {
"Prot": "5192:5192",
"AspNetCoreEnv": "",
- "LastEnvName": "marking001",
+ "LastEnvName": "29dev",
"RemoveDaysFromPublished": "10",
"WorkDir": "",
"Volume": "",
- "Other": "--name wgshare-api -e ASPNETCORE_ENVIRONMENT=Production -e TZ=Asia/Shanghai",
+ "Other": "--name wgshare-api -e ASPNETCORE_ENVIRONMENT=Development -e TZ=Asia/Shanghai",
"EnvPairList": [
{
"EnvName": "29dev",
diff --git a/WGShare.API/Controllers/Frontend/RoomController.cs b/WGShare.API/Controllers/Frontend/RoomController.cs
index ba884ec..b936679 100644
--- a/WGShare.API/Controllers/Frontend/RoomController.cs
+++ b/WGShare.API/Controllers/Frontend/RoomController.cs
@@ -367,15 +367,16 @@ namespace WGShare.API.Controllers.Frontend
}
///
- /// 加入频道
+ /// 加入频道
///
///
///
///
///
- [HttpGet("join")]
+ [HttpGet("join"), Obsolete("废弃,请使用Socker接口 JoinChannel")]
public async Task JoinChannel([FromQuery] string roomNum, [FromQuery] bool enableMicr = false, [FromQuery] bool enableCamera = false)
{
+ //throw Oops.("接口已废弃");
//var isRoomManager = await _sqlSugar.Queryable()
// .InnerJoin((rm, r) => r.Id == rm.RoomId)
// .Where((rm, r) => r.RoomNum == roomNum && rm.UserId == UId)
@@ -433,9 +434,10 @@ namespace WGShare.API.Controllers.Frontend
///
///
///
- [HttpGet("leave")]
+ [HttpGet("leave"), Obsolete("废弃,请使用Socker接口 leavelChannel")]
public async Task LevelChannel([FromQuery] string roomNum)
{
+
using (var pipe = RedisHelper.Instance.StartPipe())
{
// 判断,如果有全员看ta,则删除
diff --git a/WGShare.API/Hubs/SessionManageHub.cs b/WGShare.API/Hubs/SessionManageHub.cs
index 6d56080..6db8f98 100644
--- a/WGShare.API/Hubs/SessionManageHub.cs
+++ b/WGShare.API/Hubs/SessionManageHub.cs
@@ -4,6 +4,7 @@ using Masuit.Tools.Maths;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using SqlSugar;
+using SqlSugar.Extensions;
using System;
using System.Globalization;
using System.Security.Claims;
@@ -29,9 +30,18 @@ namespace WGShare.API.Hubs
public async override Task OnConnectedAsync()
{
var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
- var uid = Context.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value;
+ var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value;
var account = Context.User?.Claims.FirstOrDefault(x => x.Type == "account")?.Value;
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;
+
+ Context.Items.Add("tenant", tenant);
+ Context.Items.Add("uid", uid);
+ Context.Items.Add("account", account);
+ Context.Items.Add("ssid", ssid);
+ Context.Items.Add("uname", uname);
+ Context.Items.Add("roleid", roleId);
Console.WriteLine($"{DateTime.Now}连接成功 当前租户:{tenant} account:{account} uid:{uid} connectId:{Context.ConnectionId}");
@@ -104,8 +114,8 @@ namespace WGShare.API.Hubs
///
/// 是否关闭麦克风,默认是
/// 是否关闭摄像头,默认是
- [HubMethodName("joinChannel"), Obsolete("废弃,请使用Api接口 JoinChannel")]
- public async Task JoinChannel(string roomNum, bool enableMicr = true, bool enableCamera = true)
+ [HubMethodName("joinChannel")]
+ public async Task JoinChannel(string roomNum, bool enableMicr = false, bool enableCamera = false)
{
var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
var uid = Context.User?.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value;
@@ -118,13 +128,60 @@ namespace WGShare.API.Hubs
Console.WriteLine($"{DateTime.Now}加入频道 会议号:" + roomNum);
Console.WriteLine($"{DateTime.Now}加入频道 account:" + account);
Console.WriteLine($"{DateTime.Now}加入频道 tenant:" + tenant);
+
+ var userInfo = new ChannelUserInfo
+ {
+ UID = uid,
+ UserName = uname,
+ EnableCamera = enableCamera,
+ EnableMicr = enableMicr,
+ ConnectId = Context.ConnectionId,
+ Account = account,
+ ScreenShareId = ssid,
+ RoleId = roleId,
+ RoleName = ((RoleEnums)roleId.ToInt32()).GetDescription(),
+ IsRoomManager = false
+ };
+ using (var pipe = RedisHelper.Instance.StartPipe())
+ {
+
+ if (((RoleEnums)roleId.ToInt32()) == RoleEnums.Admin || ((RoleEnums)roleId.ToInt32()) == RoleEnums.RoomManager)
+ {
+ // 管理员进房,如果没有全员看ta,则设置
+ var script = @"local hashKey = KEYS[1]
+ local field = ARGV[1]
+ local value = ARGV[2]
+
+ if redis.call('HEXISTS', hashKey, field) == 0 then
+ redis.call('HSET', hashKey, field, value)
+ return 1
+ else
+ return 0
+ end";
+ pipe.Eval(script, [RedisKeyConstant.SessionManage.GetChannelShowUserKey(tenant)], roomNum, uid);
+
+ }
+
+ // 记录频道得用户信息
+ pipe.HSet(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid, userInfo);
+ // 记录用户已参与频道
+ pipe.Set(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid), roomNum);
+ var results = pipe.EndPipe();
+
+ // 判断,如果有全员看ta,则通知
+ if ((((RoleEnums)roleId.ToInt32()) == RoleEnums.Admin || ((RoleEnums)roleId.ToInt32()) == RoleEnums.RoomManager) && !results.IsNullOrEmpty() && results[0].ObjToInt() == 1)
+ await Clients.Group(roomNum).ShowUser(uid, uname, string.Empty, string.Empty);
+ }
+ await Groups.AddToGroupAsync(Context.ConnectionId, roomNum);
+ await Clients.GroupExcept(roomNum, Context.ConnectionId).UserJoined(userInfo);
+
}
///
/// 离开频道
///
///
- [HubMethodName("levelChannel"), Obsolete("废弃,请使用Api接口 LevelChannel")]
+ [HubMethodName("levelChannel")]
public async Task LevelChannel(string roomNum)
{
var tenant = Context.User?.Claims.FirstOrDefault(x => x.Type == "tenant")?.Value;
@@ -138,6 +195,36 @@ namespace WGShare.API.Hubs
Console.WriteLine($" {DateTime.Now}离开频道 会议号:" + roomNum);
Console.WriteLine($" {DateTime.Now}离开频道 account:" + account);
Console.WriteLine($" {DateTime.Now}离开频道 tenant:" + tenant);
+
+ using (var pipe = RedisHelper.Instance.StartPipe())
+ {
+ // 判断,如果有全员看ta,则删除
+ var script = $@"local value = redis.call('HGET', KEYS[1], ARGV[1])
+ if value == ARGV[2] or value == ARGV[3] then
+ return redis.call('HDEL', KEYS[1], ARGV[1])
+ else return -1 end";
+ // 执行 eval 命令
+ pipe.Eval(script, [RedisKeyConstant.SessionManage.GetChannelShowUserKey(tenant)], roomNum, uid, ssid);
+ // 删除频道中得该用户
+ pipe.HDel(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum), uid);
+ // 删除用户已参与频道
+ pipe.Del(RedisKeyConstant.SessionManage.GetUserJoinChannelKey(uid));
+ var result = pipe.EndPipe();
+ if (!result.IsNullOrEmpty() && result[0].ObjToInt() != -1)
+ {
+ var users = RedisHelper.Instance.HVals(RedisKeyConstant.SessionManage.GetChannelUserKey(tenant, roomNum));
+ var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager || x.RoleId == ((int)RoleEnums.RoomManager).ToString());
+ if (showUser != null)
+ {
+ // 通知全员看ta
+ await Clients.Group(roomNum).ShowUser(showUser.UID, showUser.UserName, string.Empty, string.Empty);
+ }
+ }
+ }
+
+ await Clients.GroupExcept(roomNum, Context.ConnectionId).UserLeave(uid);
+ await Groups.RemoveFromGroupAsync(Context.ConnectionId, roomNum);
+
}
///
diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml
index b86f7e0..ea04b0f 100644
--- a/WGShare.API/WGShare.API.xml
+++ b/WGShare.API/WGShare.API.xml
@@ -211,7 +211,7 @@
- 加入频道
+ 加入频道 , Obsolete("废弃,请使用Socker接口 JoinChannel")