加入和离开频道使用signalr
This commit is contained in:
parent
5aaea0e252
commit
4588536363
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -367,15 +367,16 @@ namespace WGShare.API.Controllers.Frontend
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加入频道
|
||||
/// 加入频道
|
||||
/// </summary>
|
||||
/// <param name="roomNum"></param>
|
||||
/// <param name="enableMicr"></param>
|
||||
/// <param name="enableCamera"></param>
|
||||
/// <returns></returns>
|
||||
[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<RoomManager>()
|
||||
// .InnerJoin<Room>((rm, r) => r.Id == rm.RoomId)
|
||||
// .Where((rm, r) => r.RoomNum == roomNum && rm.UserId == UId)
|
||||
|
|
@ -433,9 +434,10 @@ namespace WGShare.API.Controllers.Frontend
|
|||
/// </summary>
|
||||
/// <param name="roomNum"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("leave")]
|
||||
[HttpGet("leave"), Obsolete("废弃,请使用Socker接口 leavelChannel")]
|
||||
public async Task LevelChannel([FromQuery] string roomNum)
|
||||
{
|
||||
|
||||
using (var pipe = RedisHelper.Instance.StartPipe())
|
||||
{
|
||||
// 判断,如果有全员看ta,则删除
|
||||
|
|
|
|||
|
|
@ -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
|
|||
/// <param name="roomNum"></param>
|
||||
/// <param name="enableMicr">是否关闭麦克风,默认是</param>
|
||||
/// <param name="enableCamera">是否关闭摄像头,默认是</param>
|
||||
[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);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 离开频道
|
||||
/// </summary>
|
||||
/// <param name="roomNum"></param>
|
||||
[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<ChannelUserInfo>(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);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@
|
|||
</member>
|
||||
<member name="M:WGShare.API.Controllers.Frontend.RoomController.JoinChannel(System.String,System.Boolean,System.Boolean)">
|
||||
<summary>
|
||||
加入频道
|
||||
加入频道 , Obsolete("废弃,请使用Socker接口 JoinChannel")
|
||||
</summary>
|
||||
<param name="roomNum"></param>
|
||||
<param name="enableMicr"></param>
|
||||
|
|
|
|||
Loading…
Reference in New Issue