123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 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; }
- }
- }
- }
|