using Hei.Captcha; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Yi.Framework.Common.Const; using Yi.Framework.Common.Enum; using Yi.Framework.Common.Helper; using Yi.Framework.Common.Models; using Yi.Framework.Core; using Yi.Framework.DTOModel; using Yi.Framework.Interface; using Yi.Framework.Model.Models; using Yi.Framework.Repository; using Yi.Framework.WebCore; using Yi.Framework.WebCore.AttributeExtend; using Yi.Framework.WebCore.AuthorizationPolicy; using Yi.Framework.WebCore.SignalRHub; namespace Yi.Framework.ApiMicroservice.Controllers { /// /// 在线管理 /// [ApiController] [Authorize] [Route("api/[controller]/[action]")] public class OnlineController : ControllerBase { private ILogger _logger; private IHubContext _hub; public OnlineController(ILogger logger, IHubContext hub) { _logger = logger; _hub = hub; } /// /// 动态条件获取当前在线用户 /// /// /// /// [HttpGet] public Result PageList([FromQuery] OnlineUser online, [FromQuery] PageParModel page) { var data = MainHub.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 Result.Success().SetData(new PageModel>() { Total = data.Count, Data = dataWhere.ToList() }); } /// /// 强制退出用户 /// /// /// [HttpDelete] [Route("{connnectionId}")] public async Task ForceOut(string connnectionId) { if (MainHub.clientUsers.Exists(u => u.ConnnectionId == connnectionId)) { //前端接受到这个事件后,触发前端自动退出 await _hub.Clients.Client(connnectionId).SendAsync(HubTypeEnum.forceOut.ToString(),"你已被强制退出!"); return Result.Success(); } return Result.Error("操作失败!未发现该连接!"); } } }