using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Logging; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Yi.Framework.Rbac.Application.Contracts.IServices; using Yi.Framework.Rbac.Domain.Shared.Model; using Yi.Framework.Rbac.Domain.SignalRHubs; namespace Yi.Framework.Rbac.Application.Services { public class OnlineService : ApplicationService, IOnlineService { private ILogger _logger; private IHubContext _hub; public OnlineService(ILogger logger, IHubContext hub) { _logger = logger; _hub = hub; } /// /// 动态条件获取当前在线用户 /// /// /// public Task> GetListAsync([FromQuery] OnlineUserModel online) { var data = OnlineUserHub.clientUsers; IEnumerable dataWhere = data.AsEnumerable(); if (!string.IsNullOrEmpty(online.Ipaddr)) { dataWhere = dataWhere.Where((u) => u.Ipaddr!.Contains(online.Ipaddr)); } if (!string.IsNullOrEmpty(online.UserName)) { dataWhere = dataWhere.Where((u) => u.UserName!.Contains(online.UserName)); } return Task.FromResult(new PagedResultDto() { TotalCount = data.Count, Items = dataWhere.ToList() }) ; } /// /// 强制退出用户 /// /// /// [HttpDelete] [Route("online/{connnectionId}")] public async Task ForceOut(string connnectionId) { if (OnlineUserHub.clientUsers.Exists(u => u.ConnnectionId == connnectionId)) { //前端接受到这个事件后,触发前端自动退出 await _hub.Clients.Client(connnectionId).SendAsync("forceOut", "你已被强制退出!"); return true; } return false; } } }