You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.7 KiB

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;
/// <summary>
/// 设置发送增益命令处理器
/// </summary>
public class SetTxGainCommandHandler : IRequestHandler<SetTxGainCommand, ApiActionResult<bool>>
{
private readonly IRanAPICommandHandlerFactory _ranAPICommandHandlerFactory;
private readonly ILogger<SetTxGainCommandHandler> _logger;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ranAPICommandHandlerFactory">RAN API命令处理器工厂</param>
/// <param name="logger">日志记录器</param>
public SetTxGainCommandHandler(
IRanAPICommandHandlerFactory ranAPICommandHandlerFactory,
ILogger<SetTxGainCommandHandler> logger)
{
_ranAPICommandHandlerFactory = ranAPICommandHandlerFactory ?? throw new ArgumentNullException(nameof(ranAPICommandHandlerFactory));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
/// <summary>
/// 处理设置发送增益命令
/// </summary>
/// <param name="request">设置发送增益命令</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>设置发送增益结果</returns>
public async Task<ApiActionResult<bool>> 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<bool>.Ok(true, "发送增益设置成功");
}
else
{
_logger.LogWarning("发送增益设置失败");
return ApiActionResult<bool>.Error(
"发送增益设置失败",
"TX_GAIN_SET_FAILED",
HttpStatusCode.BadRequest);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "设置发送增益失败");
return ApiActionResult<bool>.Error(
$"设置发送增益失败: {ex.Message}",
"INTERNAL_ERROR",
HttpStatusCode.InternalServerError);
}
}
}