using System;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using CoreAgent.Application.Commands.RanAPI;
using CoreAgent.Domain.Interfaces.Network;
using CoreAgent.Domain.Models.Common;
using MediatR;
using Microsoft.Extensions.Logging;
namespace CoreAgent.Application.Handlers.RanAPI;
///
/// 设置发送增益命令处理器
///
public class SetTxGainCommandHandler : IRequestHandler>
{
private readonly IRanAPICommandHandlerFactory _ranAPICommandHandlerFactory;
private readonly ILogger _logger;
///
/// 构造函数
///
/// RAN API命令处理器工厂
/// 日志记录器
public SetTxGainCommandHandler(
IRanAPICommandHandlerFactory ranAPICommandHandlerFactory,
ILogger logger)
{
_ranAPICommandHandlerFactory = ranAPICommandHandlerFactory ?? throw new ArgumentNullException(nameof(ranAPICommandHandlerFactory));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
///
/// 处理设置发送增益命令
///
/// 设置发送增益命令
/// 取消令牌
/// 设置发送增益结果
public async Task> Handle(SetTxGainCommand request, CancellationToken cancellationToken)
{
try
{
_logger.LogInformation("正在设置发送增益,端口数量: {PortCount}", request.GainSettings?.Count);
// 通过工厂获取RAN增益控制处理器并执行操作
var ranGainControlHandler = _ranAPICommandHandlerFactory.CreateGainControlHandler();
var result = await ranGainControlHandler.SetTxGainAsync(request.GainSettings);
if (result)
{
_logger.LogInformation("发送增益设置成功");
return ApiActionResult.Ok(true, "发送增益设置成功");
}
else
{
_logger.LogWarning("发送增益设置失败");
return ApiActionResult.Error(
"发送增益设置失败",
"TX_GAIN_SET_FAILED",
HttpStatusCode.BadRequest);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "设置发送增益失败");
return ApiActionResult.Error(
$"设置发送增益失败: {ex.Message}",
"INTERNAL_ERROR",
HttpStatusCode.InternalServerError);
}
}
}