using System; using StandardScene.Signal.Model; namespace StandardScene.Signal.Logic { /// /// 一条握手点配置的解析结果。参数格式与反编译 SignalStop.SignalParams 一致。 /// /// /// 按分号切成 ,缺段时 返回空串。 /// 各类型约定: /// /// JGControl:机构名;RequestIn|Arrived;[区域-车组-限额-点列表] /// PointControl:UP1|UP2|Down1|Down2;机构名 /// TimedCharging:最长秒数;上限电量;下限电量 /// RateFlowControl:区域;车组;限额;点1,点2 /// /// public sealed class SignalStopSpec { /// 握手类型名,与 Handler 的 比较时忽略大小写。 public string SignalType { get; init; } = ""; /// 原始参数串,限流独立类型会整段交给 public string SignalParams { get; init; } = ""; /// 按 ';' 切分,保留空段(与 Split None 一致,方便 Part(n) 按下标取)。 public string[] Parts { get; init; } = Array.Empty(); /// 取第 段;越界或 null 返回空串。 public string Part(int index) { if (index < 0 || index >= Parts.Length) return ""; return Parts[index] ?? ""; } /// 从类型名和参数串构造;类型会 Trim,参数保持原样以便日志对照现场 JSON。 public static SignalStopSpec Parse(string signalType, string signalParams) { var type = (signalType ?? "").Trim(); var raw = signalParams ?? ""; return new SignalStopSpec { SignalType = type, SignalParams = raw, Parts = raw.Split(new[] { ';' }, StringSplitOptions.None) }; } /// 从握手点 Model 构造;model 为 null 时返回 null。 public static SignalStopSpec From(HandshakePointModel model) { if (model == null) return null; return Parse(model.SignalType, model.SignalParams); } /// 类型名是否匹配(忽略大小写)。 public bool Is(string type) => string.Equals(SignalType, type, StringComparison.OrdinalIgnoreCase); } }