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