修复在线用户的错误

This commit is contained in:
2023-05-19 17:02:08 +08:00
parent 23dd5a7604
commit 1f535464d8
2 changed files with 37 additions and 14 deletions

View File

@@ -1,4 +1,6 @@
using System.Net.WebSockets; using System.Net.Sockets;
using System.Net.WebSockets;
using Aop.Api.Domain;
using JNPF.Common.Configuration; using JNPF.Common.Configuration;
using JNPF.Common.Const; using JNPF.Common.Const;
using JNPF.Common.Enums; using JNPF.Common.Enums;
@@ -86,6 +88,23 @@ public class IMHandler : WebSocketHandler
} }
} }
public override async Task OnDisconnected(WebSocket socket)
{
var connId = WebSocketConnectionManager.GetId(socket);
if (!string.IsNullOrWhiteSpace(connId))
{
var wsClient = WebSocketConnectionManager.GetSocketById(connId);
if (wsClient != null)
{
string tenantId = wsClient.ConnectionConfig.ConfigId;
List<UserOnlineModel> list = await GetOnlineUserList(tenantId);
list.RemoveAll((x) => x.connectionId == connId);
await SetOnlineUserList(tenantId, list);
}
await WebSocketConnectionManager.RemoveSocket(connId).ConfigureAwait(false);
}
}
/// <summary> /// <summary>
/// 消息通道. /// 消息通道.
/// </summary> /// </summary>
@@ -214,6 +233,10 @@ public class IMHandler : WebSocketHandler
token = message.token token = message.token
}); });
await SetOnlineUserList(client.ConnectionConfig.ConfigId, list); await SetOnlineUserList(client.ConnectionConfig.ConfigId, list);
//var allUsers = WebSocketConnectionManager.GetAllFromTenant(client.ConnectionConfig.ConfigId);
//list.RemoveAll(a=>!allUsers.Contains(a.connectionId));
//await SetOnlineUserList(client.ConnectionConfig.ConfigId, list);
} }
break; break;
@@ -432,13 +455,13 @@ public class IMHandler : WebSocketHandler
var getuiUrl = "{0}?clientId={1}&title={2}&content={3}1&text={4}&create=true"; var getuiUrl = "{0}?clientId={1}&title={2}&content={3}1&text={4}&create=true";
if (toUserIds.Any()) if (toUserIds.Any())
{ {
var clientIdList = await _sqlSugarClient.Queryable<UserDeviceEntity>().Where(x => toUserIds==x.UserId && x.DeleteMark == null).Select(x => x.ClientId).ToListAsync(); var clientIdList = await _sqlSugarClient.Queryable<UserDeviceEntity>().Where(x => toUserIds == x.UserId && x.DeleteMark == null).Select(x => x.ClientId).ToListAsync();
if (clientIdList.Any()) if (clientIdList.Any())
{ {
var clientId = string.Join(",", clientIdList); var clientId = string.Join(",", clientIdList);
var textDic = new Dictionary<string, string>(); var textDic = new Dictionary<string, string>();
textDic.Add("type", "3"); textDic.Add("type", "3");
textDic.Add("name", client.UserName+"/"+ client.Account); textDic.Add("name", client.UserName + "/" + client.Account);
textDic.Add("formUserId", client.UserId); textDic.Add("formUserId", client.UserId);
textDic.Add("headIcon", "/api/File/Image/userAvatar/" + client.HeadIcon); textDic.Add("headIcon", "/api/File/Image/userAvatar/" + client.HeadIcon);
getuiUrl = string.Format(getuiUrl, _messageOptions.AppPushUrl, clientId, client.UserName + "/" + client.Account, "您有一条新消息", textDic.ToJsonString()); getuiUrl = string.Format(getuiUrl, _messageOptions.AppPushUrl, clientId, client.UserName + "/" + client.Account, "您有一条新消息", textDic.ToJsonString());

View File

@@ -362,17 +362,17 @@ public class OAuthService : IDynamicApiController, ITransient
var httpContext = _httpContextAccessor.HttpContext; var httpContext = _httpContextAccessor.HttpContext;
httpContext.SignoutToSwagger(); httpContext.SignoutToSwagger();
// 清除IM中的webSocket // 清除IM中的webSocket, modified by PhilPan 改为在IMHandle中处理
var list = await GetOnlineUserList(); //var list = await GetOnlineUserList();
if (list != null) //if (list != null)
{ //{
var onlineUser = list.Find(it => it.tenantId == _userManager.TenantId && it.userId == _userManager.UserId); // var onlineUser = list.Find(it => it.tenantId == _userManager.TenantId && it.userId == _userManager.UserId);
if (onlineUser != null) // if (onlineUser != null)
{ // {
list.RemoveAll((x) => x.connectionId == onlineUser.connectionId); // list.RemoveAll((x) => x.connectionId == onlineUser.connectionId);
await SetOnlineUserList(list); // await SetOnlineUserList(list);
} // }
} //}
await DelUserInfo(); await DelUserInfo();
} }