RobotStatusHub.cs 1.63 KB
using Microsoft.AspNetCore.SignalR;

namespace Rcs.Api.Hubs
{
    /// <summary>
    /// 机器人状态实时推送 Hub
    /// @author zzy
    /// </summary>
    public class RobotStatusHub : Hub
    {
        private readonly ILogger<RobotStatusHub> _logger;

        public RobotStatusHub(ILogger<RobotStatusHub> logger)
        {
            _logger = logger;
        }

        public override async Task OnConnectedAsync()
        {
            _logger.LogInformation("[RobotStatusHub] 客户端连接: {ConnectionId}", Context.ConnectionId);
            await base.OnConnectedAsync();
        }

        public override async Task OnDisconnectedAsync(Exception? exception)
        {
            _logger.LogInformation("[RobotStatusHub] 客户端断开: {ConnectionId}", Context.ConnectionId);
            await base.OnDisconnectedAsync(exception);
        }

        /// <summary>
        /// 订阅指定地图的机器人状态
        /// @author zzy
        /// </summary>
        public async Task SubscribeMap(string mapId)
        {
            await Groups.AddToGroupAsync(Context.ConnectionId, $"map_{mapId}");
            _logger.LogInformation("[RobotStatusHub] 客户端 {ConnectionId} 订阅地图 {MapId}", Context.ConnectionId, mapId);
        }

        /// <summary>
        /// 取消订阅地图
        /// @author zzy
        /// </summary>
        public async Task UnsubscribeMap(string mapId)
        {
            await Groups.RemoveFromGroupAsync(Context.ConnectionId, $"map_{mapId}");
            _logger.LogInformation("[RobotStatusHub] 客户端 {ConnectionId} 取消订阅地图 {MapId}", Context.ConnectionId, mapId);
        }
    }
}