using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.SignalR; using System.ComponentModel.DataAnnotations; namespace OASystem.API.OAMethodLib.Hubs { /// /// 站内通信 Hub /// public class MessageHub : Hub { private readonly ILogger _logger; public static List _userList = new List { }; public MessageHub(ILogger 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); } /// /// 登录功能,将用户ID和ConntectionId关联起来 /// /// 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}登录失败"); } } /// /// 退出功能,当客户端退出时调用 /// /// 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 { /// /// 连接ID /// [Key] public string ConnectionId { get; set; } = string.Empty; /// /// 用户id /// public int UserId { get; set; } /// /// 姓名 /// public string UserName { get; set; } } } }