|
|
@@ -1,4 +1,4 @@
|
|
|
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
|
|
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
|
|
//
|
|
|
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
|
|
//
|
|
|
@@ -21,16 +21,19 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
|
|
|
private readonly SysMessageService _sysMessageService;
|
|
|
private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _onlineUserHubContext;
|
|
|
private readonly SysCacheService _sysCacheService;
|
|
|
+ private readonly SysConfigService _sysConfigService;
|
|
|
|
|
|
public OnlineUserHub(SqlSugarRepository<SysOnlineUser> sysOnlineUerRep,
|
|
|
SysMessageService sysMessageService,
|
|
|
IHubContext<OnlineUserHub, IOnlineUserHub> onlineUserHubContext,
|
|
|
- SysCacheService sysCacheService)
|
|
|
+ SysCacheService sysCacheService,
|
|
|
+ SysConfigService sysConfigService)
|
|
|
{
|
|
|
_sysOnlineUerRep = sysOnlineUerRep;
|
|
|
_sysMessageService = sysMessageService;
|
|
|
_onlineUserHubContext = onlineUserHubContext;
|
|
|
_sysCacheService = sysCacheService;
|
|
|
+ _sysConfigService = sysConfigService;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -59,7 +62,14 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
|
|
|
TenantId = string.IsNullOrWhiteSpace(tenantId) ? 0 : Convert.ToInt64(tenantId),
|
|
|
};
|
|
|
await _sysOnlineUerRep.InsertAsync(user);
|
|
|
- _sysCacheService.Set(CacheConst.KeyUserOnline + user.UserId, user);
|
|
|
+
|
|
|
+ // 是否开启单用户登录
|
|
|
+ if (await _sysConfigService.GetConfigValue<bool>(CommonConst.SysSingleLogin)) {
|
|
|
+ _sysCacheService.Set(CacheConst.KeyUserOnline + user.UserId, user);
|
|
|
+ } else {
|
|
|
+ var device = (client.UA.Family + client.UA.Major + client.OS.Family + client.OS.Major).Trim();
|
|
|
+ _sysCacheService.Set(CacheConst.KeyUserOnline + user.UserId + device, user);
|
|
|
+ }
|
|
|
|
|
|
// 以租户Id进行分组
|
|
|
var groupName = $"{GROUP_ONLINE}{user.TenantId}";
|
|
|
@@ -83,12 +93,22 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
|
|
|
public override async Task OnDisconnectedAsync(Exception exception)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(Context.ConnectionId)) return;
|
|
|
+
|
|
|
+ var httpContext = Context.GetHttpContext();
|
|
|
+ var client = Parser.GetDefault().Parse(httpContext.Request.Headers["User-Agent"]);
|
|
|
|
|
|
var user = await _sysOnlineUerRep.AsQueryable().Filter("", true).FirstAsync(u => u.ConnectionId == Context.ConnectionId);
|
|
|
if (user == null) return;
|
|
|
|
|
|
await _sysOnlineUerRep.DeleteAsync(u => u.Id == user.Id);
|
|
|
- _sysCacheService.Remove(CacheConst.KeyUserOnline + user.UserId);
|
|
|
+
|
|
|
+ // 是否开启单用户登录
|
|
|
+ if (await _sysConfigService.GetConfigValue<bool>(CommonConst.SysSingleLogin)) {
|
|
|
+ _sysCacheService.Remove(CacheConst.KeyUserOnline + user.UserId);
|
|
|
+ } else {
|
|
|
+ var device = (client.UA.Family + client.UA.Major + client.OS.Family + client.OS.Major).Trim();
|
|
|
+ _sysCacheService.Remove(CacheConst.KeyUserOnline + user.UserId + device);
|
|
|
+ }
|
|
|
|
|
|
// 通知当前组用户变动
|
|
|
var userList = await _sysOnlineUerRep.AsQueryable().Filter("", true)
|