|
|
@ -40,8 +40,14 @@ public class CellularNetworkService : ICellularNetworkService |
|
|
|
_context = context ?? throw new ArgumentNullException(nameof(context)); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 启动蜂窝网络
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="key">网络配置键</param>
|
|
|
|
/// <returns>启动结果</returns>
|
|
|
|
public async Task<CellularNetworkOperationResult> StartAsync(string key) |
|
|
|
{ |
|
|
|
// 1. 参数验证
|
|
|
|
if (string.IsNullOrEmpty(key)) |
|
|
|
{ |
|
|
|
_logger.LogError("启动蜂窝网络失败:配置键为空"); |
|
|
@ -50,21 +56,29 @@ public class CellularNetworkService : ICellularNetworkService |
|
|
|
|
|
|
|
try |
|
|
|
{ |
|
|
|
// 2. 获取启动锁,防止并发启动
|
|
|
|
if (!await _startLock.WaitAsync(TimeSpan.FromSeconds(LockTimeoutSeconds))) |
|
|
|
{ |
|
|
|
_logger.LogWarning("蜂窝网络启动操作被锁定,可能已有其他启动操作正在进行"); |
|
|
|
return CellularNetworkOperationResult.Failure("蜂窝网络启动操作被锁定,可能已有其他启动操作正在进行"); |
|
|
|
} |
|
|
|
|
|
|
|
// 检查网络状态
|
|
|
|
// 3. 状态检查
|
|
|
|
// 如果是第二次启动(已初始化),需要先检查网络状态
|
|
|
|
if (_context.IsInitialized) |
|
|
|
{ |
|
|
|
// 检查网络状态,确保没有冲突的配置
|
|
|
|
var stateCheckResult = CheckNetworkState(key); |
|
|
|
if (!stateCheckResult.IsSuccess) |
|
|
|
{ |
|
|
|
return stateCheckResult; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 初始化网络上下文
|
|
|
|
// 4. 初始化网络上下文
|
|
|
|
_context.Initialize(key); |
|
|
|
|
|
|
|
// 5. 启动网络
|
|
|
|
var result = await StartNetworkAsync(key); |
|
|
|
if (!result.IsSuccess) |
|
|
|
{ |
|
|
|