using System; using System.Collections.Generic; using System.IO; using System.Text.Json; using System.Text.Json.Serialization; namespace Protocol376Simulator.Models { /// /// 测试场景,用于保存和加载测试配置 /// public class TestScenario { /// /// 场景名称 /// public string Name { get; set; } /// /// 场景描述 /// public string Description { get; set; } /// /// 服务器地址 /// public string ServerAddress { get; set; } /// /// 服务器端口 /// public int ServerPort { get; set; } /// /// 集中器配置列表 /// public List Concentrators { get; set; } = new List(); /// /// 测试步骤列表 /// public List Steps { get; set; } = new List(); /// /// 将测试场景保存到文件 /// public static void SaveToFile(TestScenario scenario, string filePath) { string directory = Path.GetDirectoryName(filePath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } var json = JsonSerializer.Serialize(scenario, new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }); File.WriteAllText(filePath, json); } /// /// 从文件加载测试场景 /// public static TestScenario LoadFromFile(string filePath) { if (!File.Exists(filePath)) { throw new FileNotFoundException($"测试场景文件不存在: {filePath}"); } string json = File.ReadAllText(filePath); return JsonSerializer.Deserialize(json); } /// /// 获取所有保存的测试场景文件 /// public static List GetAllScenarioFiles(string directory = "Scenarios") { if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); return new List(); } var files = Directory.GetFiles(directory, "*.json"); return new List(files); } } /// /// 集中器配置 /// public class ConcentratorConfig { /// /// 集中器地址 /// public string Address { get; set; } /// /// 是否自动登录 /// public bool AutoLogin { get; set; } = true; /// /// 是否自动心跳 /// public bool AutoHeartbeat { get; set; } = true; /// /// 是否自动响应 /// public bool AutoResponse { get; set; } = true; /// /// 是否启用断线重连 /// public bool AutoReconnect { get; set; } = true; /// /// 最大重连尝试次数 /// public int MaxReconnectAttempts { get; set; } = 5; /// /// 重连延迟时间(秒) /// public int ReconnectDelaySeconds { get; set; } = 5; /// /// 初始表计数据 /// public Dictionary InitialMeterData { get; set; } = new Dictionary(); } /// /// 测试步骤 /// public class TestStep { /// /// 步骤类型枚举 /// [JsonConverter(typeof(JsonStringEnumConverter))] public enum StepType { Login, Heartbeat, ValveControl, DataUpload, ReadData, SetParameter, Wait, SetMeterData } /// /// 步骤类型 /// public StepType Type { get; set; } /// /// 目标集中器地址,"all"表示所有集中器 /// public string ConcentratorAddress { get; set; } /// /// 步骤描述 /// public string Description { get; set; } /// /// 步骤参数,根据不同步骤类型使用不同的参数 /// public Dictionary Parameters { get; set; } = new Dictionary(); /// /// 执行本步骤前的延迟时间(毫秒) /// public int DelayBeforeStepMs { get; set; } = 0; /// /// 执行下一步骤前的延迟时间(毫秒) /// public int DelayAfterStepMs { get; set; } = 1000; } }