using CoreAgent.Domain.Interfaces.Network; using CoreAgent.Domain.Models.Network; using CoreAgent.Domain.Models.System; namespace CoreAgent.Domain.Contexts; /// /// 蜂窝网络领域上下文 /// public class CellularNetworkContext : IDisposable { private static readonly Lazy _instance = new(() => new CellularNetworkContext()); private readonly object _lock = new(); private CellularNetworkState _networkState; private NetworkCommandConfig _networkCommandConfig; private string _neConfigKey = string.Empty; public CancellationTokenSource token = new CancellationTokenSource(); private bool _isDisposed; private bool _isInitialized; /// /// 获取单例实例 /// public static CellularNetworkContext Instance => _instance.Value; private CellularNetworkContext() { _isDisposed = false; _isInitialized = false; } /// /// 初始化上下文 /// /// 网络命令配置 public void Initialize(NetworkCommandConfig config = null) { lock (_lock) { if (_isDisposed) { throw new ObjectDisposedException(nameof(CellularNetworkContext)); } if (_isInitialized) { return; } _networkState = new CellularNetworkState(_neConfigKey); _networkCommandConfig = config; _isInitialized = true; } } /// /// 设置网络命令配置 /// /// 网络命令配置 public void SetNetworkCommandConfig(NetworkCommandConfig config) { lock (_lock) { if (_isDisposed) { throw new ObjectDisposedException(nameof(CellularNetworkContext)); } if (!_isInitialized) { throw new InvalidOperationException("上下文未初始化,请先调用Initialize方法"); } _networkCommandConfig = config ?? throw new ArgumentNullException(nameof(config)); } } /// /// 获取网络命令配置 /// /// 网络命令配置 public NetworkCommandConfig GetNetworkCommandConfig() { lock (_lock) { if (_isDisposed) { throw new ObjectDisposedException(nameof(CellularNetworkContext)); } if (!_isInitialized) { throw new InvalidOperationException("上下文未初始化"); } return _networkCommandConfig ?? throw new InvalidOperationException("网络命令配置未设置"); } } public string SetNeConfigKey(string key) { lock (_lock) { if (_isDisposed) { throw new ObjectDisposedException(nameof(CellularNetworkContext)); } if (!_isInitialized) { throw new InvalidOperationException("上下文未初始化"); } _neConfigKey = key ?? throw new ArgumentNullException(nameof(key)); return _neConfigKey; } } public string GetNeConfigKey() { lock (_lock) { if (_isDisposed) { throw new ObjectDisposedException(nameof(CellularNetworkContext)); } if (!_isInitialized) { throw new InvalidOperationException("上下文未初始化"); } return _neConfigKey; } } /// /// 获取指定类型的命令配置 /// /// 命令类型 /// 命令配置列表 public List GetCommandsByType(NetworkCommandType type) { lock (_lock) { return _networkCommandConfig?.GetCommandsByType(type) ?? new List(); } } /// /// 获取所有命令类型 /// /// 命令类型数组 public NetworkCommandType[] GetCommandTypes() { lock (_lock) { return _networkCommandConfig?.GetCommandTypes() ?? Array.Empty(); } } /// /// 获取网络状态 /// /// 网络状态 public CellularNetworkState GetNetworkState() { lock (_lock) { if (_isDisposed) { throw new ObjectDisposedException(nameof(CellularNetworkContext)); } if (!_isInitialized) { throw new InvalidOperationException("上下文未初始化"); } return _networkState ?? throw new InvalidOperationException("网络状态未初始化"); } } /// /// 重置上下文状态 /// public void Reset() { lock (_lock) { if (_isDisposed) { throw new ObjectDisposedException(nameof(CellularNetworkContext)); } if (!_isInitialized) { return; } token.Cancel(); token = new CancellationTokenSource(); _networkState = new CellularNetworkState(_neConfigKey); } } /// /// 释放资源 /// public void Dispose() { if (_isDisposed) { return; } lock (_lock) { if (_isDisposed) { return; } token.Cancel(); token.Dispose(); _isInitialized = false; _isDisposed = true; } } } /// /// 蜂窝网络状态 /// public class CellularNetworkState { /// /// 网络接口名称 /// public string NeConfigKey { get; } /// /// 是否已初始化 /// public bool IsInitialized { get; private set; } /// /// 最后启动时间 /// public DateTime? LastStartTime { get; private set; } /// /// 最后停止时间 /// public DateTime? LastStopTime { get; private set; } /// /// 当前运行状态 /// public NetworkStatus CurrentStatus { get; private set; } /// /// 当前网络类型 /// public NetworkType CurrentNetworkType { get; private set; } public CellularNetworkState(string _NeConfigKey) { NeConfigKey = _NeConfigKey; IsInitialized = false; CurrentStatus = NetworkStatus.Unknown; } /// /// 更新网络状态 /// public void UpdateStatus(NetworkStatus status) { CurrentStatus = status; } /// /// 更新网络类型 /// public void UpdateNetworkType(NetworkType type) { CurrentNetworkType = type; } /// /// 标记为已启动 /// public void MarkAsStarted() { IsInitialized = true; LastStartTime = DateTime.Now; CurrentStatus = NetworkStatus.Connected; } /// /// 标记为已停止 /// public void MarkAsStopped() { IsInitialized = false; LastStopTime = DateTime.Now; CurrentStatus = NetworkStatus.Disconnected; CurrentNetworkType = NetworkType.Unknown; } }