using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.SignalR; using System.ComponentModel.DataAnnotations; namespace OASystem.API.OAMethodLib.Hubs { /// <summary> /// 站内通信 Hub /// </summary> public class MessageHub : Hub { private readonly ILogger<MessageHub> _logger; public static List<HubUser> _userList = new List<HubUser> { }; public MessageHub(ILogger<MessageHub> logger) { _logger = logger; } //发送消息--发送给所有连接的客户端 public Task SendMessage(string msg) { return Clients.All.SendAsync("ReceiveMessage", msg); } //发送消息--发送给指定用户 public Task SendPrivateMessage(string connectionId, string message) { return Clients.Client(connectionId).SendAsync("ReceiveMessage", message); } /// <summary> /// 登录功能,将用户ID和ConntectionId关联起来 /// </summary> /// <param name="userId"></param> public void Login(int userId,string userName) { try { HubUser hu = _userList.Find(a => a.UserId == userId); if (hu != null) { _userList.Remove(hu); } string connectionId = Context.ConnectionId; _userList.Add(new HubUser { UserId = userId, UserName = userName, ConnectionId = connectionId }); Console.WriteLine($"{userId}登录成功,ConnectionId={connectionId}"); } catch (Exception ex) { Console.WriteLine($"{userId}登录失败"); } } /// <summary> /// 退出功能,当客户端退出时调用 /// </summary> /// <param name="userId"></param> public void Logout(int userId) { HubUser hu = _userList.Find(a => a.UserId == userId); if (hu != null) { _userList.Remove(hu); } Console.WriteLine($"{userId}退出成功,ConnectionId={hu.ConnectionId}"); } public class HubUser { /// <summary> /// 连接ID /// </summary> [Key] public string ConnectionId { get; set; } = string.Empty; /// <summary> /// 用户id /// </summary> public int UserId { get; set; } /// <summary> /// 姓名 /// </summary> public string UserName { get; set; } } } }