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;
}
}