Browse Source

GeneralStart

feature/protocol-log-Perfect
root 4 days ago
parent
commit
5b9629a5ce
  1. 15
      CoreAgent.API/Controllers/CellularNetworkController.cs
  2. 16
      CoreAgent.Application/Commands/CellularNetwork/StartGeneralCellularNetworkCommand.cs
  3. 59
      CoreAgent.Application/Handlers/CellularNetwork/StartGeneralCellularNetworkCommandHandler.cs
  4. 6
      CoreAgent.Domain/Interfaces/Network/IGeneralCellularNetworkService.cs
  5. 1
      CoreAgent.Infrastructure/Extensions/ServiceCollection/CommandServiceExtensions.cs
  6. 101
      CoreAgent.Infrastructure/Services/Network/GeneralCellularNetworkService.cs

15
CoreAgent.API/Controllers/CellularNetworkController.cs

@ -37,6 +37,21 @@ public class CellularNetworkController : BaseApiController
return await HandleRequest<StartCellularNetworkCommand, ApiActionResult<NetworkStatus>>(command);
}
/// <summary>
/// 启动蜂窝网络
/// </summary>
/// <param name="command">启动命令</param>
/// <returns>操作结果</returns>
[HttpPost("generalStart")]
[ProducesResponseType(typeof(ApiActionResult<CellularNetworkOperationResult>), 200)]
[ProducesResponseType(typeof(ApiActionResult<CellularNetworkOperationResult>), 400)]
[ProducesResponseType(typeof(ApiActionResult<CellularNetworkOperationResult>), 500)]
public async Task<IActionResult> GeneralStart([FromBody] StartGeneralCellularNetworkCommand command)
{
_logger.LogInformation("收到启动蜂窝网络请求: {ConfigKey}", command.CellularNetwork?.RuntimeCode);
return await HandleRequest<StartGeneralCellularNetworkCommand, ApiActionResult<NetworkStatus>>(command);
}
/// <summary>
/// 停止蜂窝网络
/// </summary>

16
CoreAgent.Application/Commands/CellularNetwork/StartGeneralCellularNetworkCommand.cs

@ -0,0 +1,16 @@
using CoreAgent.Domain.Models.Common;
using CoreAgent.Domain.Models.Network;
using MediatR;
namespace CoreAgent.Application.Commands.CellularNetwork;
/// <summary>
/// 启动蜂窝网络命令
/// </summary>
public class StartGeneralCellularNetworkCommand : IRequest<ApiActionResult<NetworkStatus>>
{
/// <summary>
/// 网络配置键
/// </summary>
public CellularNetworkConfiguration CellularNetwork { get; set; }
}

59
CoreAgent.Application/Handlers/CellularNetwork/StartGeneralCellularNetworkCommandHandler.cs

@ -0,0 +1,59 @@
using CoreAgent.Application.Commands.CellularNetwork;
using CoreAgent.Domain.Interfaces.Network;
using CoreAgent.Domain.Models.Common;
using CoreAgent.Domain.Models.Network;
using MediatR;
using Microsoft.Extensions.Logging;
using System.Net;
namespace CoreAgent.Application.Handlers.CellularNetwork;
/// <summary>
/// 启动蜂窝网络命令处理器
/// </summary>
public class StartGeneralCellularNetworkCommandHandler : IRequestHandler<StartGeneralCellularNetworkCommand, ApiActionResult<NetworkStatus>>
{
private readonly IGeneralCellularNetworkService _cellularNetworkService;
private readonly ILogger<StartCellularNetworkCommandHandler> _logger;
public StartGeneralCellularNetworkCommandHandler(
IGeneralCellularNetworkService cellularNetworkService,
ILogger<StartCellularNetworkCommandHandler> logger)
{
_cellularNetworkService = cellularNetworkService;
_logger = logger;
}
public async Task<ApiActionResult<NetworkStatus>> Handle(StartGeneralCellularNetworkCommand request, CancellationToken cancellationToken)
{
try
{
_logger.LogInformation("正在启动蜂窝网络配置: {ConfigKey}", request?.CellularNetwork?.RuntimeCode);
// 启动网络
var result = await _cellularNetworkService.StartAsync(request.CellularNetwork);
if (result.IsSuccess)
{
_logger.LogInformation("蜂窝网络配置 {ConfigKey} 启动成功", request?.CellularNetwork?.RuntimeCode);
return ApiActionResult<NetworkStatus>.Ok(result.NetworkStatus, "蜂窝网络启动成功");
}
else
{
_logger.LogWarning("蜂窝网络配置 {ConfigKey} 启动失败: {Error}", request?.CellularNetwork?.RuntimeCode, result.ErrorMessage);
return ApiActionResult<NetworkStatus>.Error(
result.ErrorMessage,
"NETWORK_START_ERROR",
HttpStatusCode.BadRequest);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "启动蜂窝网络配置 {ConfigKey} 失败", request?.CellularNetwork?.RuntimeCode);
return ApiActionResult<NetworkStatus>.Error(
$"启动蜂窝网络失败: {ex.Message}",
"INTERNAL_ERROR",
HttpStatusCode.InternalServerError);
}
}
}

6
CoreAgent.Domain/Interfaces/Network/IGeneralCellularNetworkService.cs

@ -15,11 +15,5 @@ namespace CoreAgent.Domain.Interfaces.Network
/// <param name="Key">网络配置映射Key</param>
/// <returns>启动结果</returns>
Task<CellularNetworkOperationResult> StartAsync(CellularNetworkConfiguration cellular);
/// <summary>
/// 停止蜂窝网络
/// </summary>
/// <returns>停止结果</returns>
Task<CellularNetworkOperationResult> StopAsync(string RuntimeCode);
}
}

1
CoreAgent.Infrastructure/Extensions/ServiceCollection/CommandServiceExtensions.cs

@ -57,6 +57,7 @@ public static class CommandServiceExtensions
services.AddScoped<INetworkConfigurationService, NetworkConfigurationService>();
services.AddScoped<INetworkConfigCopier, NetworkConfigCopier>();
services.AddScoped<INetworkInterfaceManager, NetworkInterfaceManager>();
services.AddScoped<IGeneralCellularNetworkService, GeneralCellularNetworkService>();
services.AddScoped<INetworkStatusMonitor, NetworkStatusMonitor>();
services.AddScoped<ICellularNetworkService, CellularNetworkService>();

101
CoreAgent.Infrastructure/Services/Network/GeneralCellularNetworkService.cs

@ -124,107 +124,6 @@ namespace CoreAgent.Infrastructure.Services.Network
}
}
/// <summary>
/// 停止蜂窝网络
/// </summary>
/// <param name="key">网络配置键</param>
/// <returns>停止操作的结果</returns>
public async Task<CellularNetworkOperationResult> StopAsync(string key)
{
string neConfigKey = _context.GetNeConfigKey();
try
{
// 检查是否是相同的配置
if (key != neConfigKey)
{
var message = $"停止操作失败:当前运行配置 {neConfigKey} 与请求停止的配置 {key} 不匹配";
_logger.LogWarning(message);
return CellularNetworkOperationResult.Failure(message);
}
// 1. 检查当前网络状态
var state = _context.GetNetworkState();
if (state.CurrentStatus == NetworkStatus.Disconnected || state.CurrentStatus == NetworkStatus.Unknown)
{
_logger.LogWarning("蜂窝网络已经处于断开或未知状态,无需停止");
_context.Reset(); // 重置上下文状态
return CellularNetworkOperationResult.Success(NetworkStatus.Disconnected);
}
// 2. 检查 RAN 退出状态(仅当配置类型为 BothRagAndCore 或 RagOnly 时)
if (_context.CurrentConfigType is NetworkConfigType.BothRagAndCore or NetworkConfigType.RagOnly)
{
var isRanQuit = await _statusMonitor.CheckRanQuitAsync(_context.NetworkIPEndPointManager.GetRanEndPoint());
if (!isRanQuit)
{
_logger.LogWarning("RAN 退出状态检查失败");
return CellularNetworkOperationResult.Failure("RAN 退出状态检查失败");
}
}
// 3. 执行网络接口初始化命令
var initResult = await _interfaceManager.ExecuteInitializeCommandsAsync();
if (!initResult.IsSuccess)
{
_logger.LogWarning("执行初始化命令失败: {ErrorMessage}", initResult.ErrorMessage);
}
// 4. 禁用网络配置
var disableResult = await _interfaceManager.DisableAsync(neConfigKey);
if (!disableResult.IsSuccess)
{
return CellularNetworkOperationResult.Failure(disableResult.ErrorMessage);
}
// 5. 停止所有协议客户端
try
{
_logger.LogInformation("开始停止所有协议客户端");
_protocolWsClientManager.StopAllClients();
_logger.LogInformation("所有协议客户端停止完成");
}
catch (Exception ex)
{
_logger.LogError(ex, "停止协议客户端失败");
// 不返回失败,继续执行后续步骤
}
// 6. 停止 WebSocket 传输连接
var webSocketConnected = await StopWebSocketTransportAsync();
if (!webSocketConnected)
{
_logger.LogError("WebSocket 传输连接停止失败,服务端可能未启动");
return CellularNetworkOperationResult.Failure("WebSocket 传输连接停止失败");
}
_logger.LogInformation("WebSocket 传输连接停止成功");
// 7. 收集所有网络端点信息
var endPoints = new NetworkIPEndPointCollection
{
RanEndPoint = _context.NetworkIPEndPointManager.GetRanEndPoint(),
ImsEndPoints = _context.NetworkIPEndPointManager.GetImsEndPoints(),
CnEndPoints = _context.NetworkIPEndPointManager.GetCnEndPoints()
};
// 8. 检查网络端点连接状态
_logger.LogInformation("开始检查所有网络端点的连接状态");
var statusCheckResult = await _statusMonitor.CheckAllEndPointsStatusAsync(endPoints, _context.CurrentConfigType, isStartOperation: false);
if (!statusCheckResult.IsSuccess)
{
_logger.LogWarning("网络端点仍然处于连接状态,停止操作失败");
return CellularNetworkOperationResult.Failure("网络端点仍然处于连接状态,停止操作失败");
}
// 9. 重置上下文并返回成功结果
_context.Reset();
return CellularNetworkOperationResult.Success(NetworkStatus.Disconnected);
}
catch (Exception ex)
{
_logger.LogError(ex, "停止蜂窝网络配置 {ConfigKey} 失败", neConfigKey);
return CellularNetworkOperationResult.Failure($"停止蜂窝网络失败: {ex.Message}");
}
}
/// <summary>
/// 检查网络状态
/// </summary>

Loading…
Cancel
Save