diff --git a/common/Tnb.Common.Core/Handlers/IMHandler.cs b/common/Tnb.Common.Core/Handlers/IMHandler.cs index 0463f5eb..06c30585 100644 --- a/common/Tnb.Common.Core/Handlers/IMHandler.cs +++ b/common/Tnb.Common.Core/Handlers/IMHandler.cs @@ -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.Const; 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 list = await GetOnlineUserList(tenantId); + list.RemoveAll((x) => x.connectionId == connId); + await SetOnlineUserList(tenantId, list); + } + await WebSocketConnectionManager.RemoveSocket(connId).ConfigureAwait(false); + } + } + /// /// 消息通道. /// @@ -214,6 +233,10 @@ public class IMHandler : WebSocketHandler token = message.token }); 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; @@ -432,13 +455,13 @@ public class IMHandler : WebSocketHandler var getuiUrl = "{0}?clientId={1}&title={2}&content={3}1&text={4}&create=true"; if (toUserIds.Any()) { - var clientIdList = await _sqlSugarClient.Queryable().Where(x => toUserIds==x.UserId && x.DeleteMark == null).Select(x => x.ClientId).ToListAsync(); + var clientIdList = await _sqlSugarClient.Queryable().Where(x => toUserIds == x.UserId && x.DeleteMark == null).Select(x => x.ClientId).ToListAsync(); if (clientIdList.Any()) { var clientId = string.Join(",", clientIdList); var textDic = new Dictionary(); 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("headIcon", "/api/File/Image/userAvatar/" + client.HeadIcon); getuiUrl = string.Format(getuiUrl, _messageOptions.AppPushUrl, clientId, client.UserName + "/" + client.Account, "您有一条新消息", textDic.ToJsonString()); diff --git a/system/Tnb.OAuth/OAuthService.cs b/system/Tnb.OAuth/OAuthService.cs index 0be37cf7..10de81ef 100644 --- a/system/Tnb.OAuth/OAuthService.cs +++ b/system/Tnb.OAuth/OAuthService.cs @@ -362,17 +362,17 @@ public class OAuthService : IDynamicApiController, ITransient var httpContext = _httpContextAccessor.HttpContext; httpContext.SignoutToSwagger(); - // 清除IM中的webSocket - var list = await GetOnlineUserList(); - if (list != null) - { - var onlineUser = list.Find(it => it.tenantId == _userManager.TenantId && it.userId == _userManager.UserId); - if (onlineUser != null) - { - list.RemoveAll((x) => x.connectionId == onlineUser.connectionId); - await SetOnlineUserList(list); - } - } + // 清除IM中的webSocket, modified by PhilPan 改为在IMHandle中处理 + //var list = await GetOnlineUserList(); + //if (list != null) + //{ + // var onlineUser = list.Find(it => it.tenantId == _userManager.TenantId && it.userId == _userManager.UserId); + // if (onlineUser != null) + // { + // list.RemoveAll((x) => x.connectionId == onlineUser.connectionId); + // await SetOnlineUserList(list); + // } + //} await DelUserInfo(); }