2023-05-08 09:39:26 +08:00
|
|
|
|
using Aitex.Core.RT.Log;
|
2023-05-06 16:57:09 +08:00
|
|
|
|
using System;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
using System.Collections.Generic;
|
2023-05-06 16:57:09 +08:00
|
|
|
|
using System.Linq;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
using System.Xml.Serialization;
|
|
|
|
|
|
|
|
|
|
namespace MECF.Framework.Common.Device.Bases
|
|
|
|
|
{
|
|
|
|
|
public class STEvents
|
|
|
|
|
{
|
2023-05-06 16:57:09 +08:00
|
|
|
|
#region Properties
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ģʽģ<CABD>塣
|
|
|
|
|
/// </summary>
|
|
|
|
|
[XmlArray("STPatterns")]
|
|
|
|
|
[XmlArrayItem("STPattern")]
|
|
|
|
|
public List<STPatternSetting> PatternsSettings { get; set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
[XmlArray("STEvents")]
|
|
|
|
|
public List<STEvent> Events { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
|
|
|
|
|
/// </summary>
|
2023-05-11 14:34:05 +08:00
|
|
|
|
/// <param name="dicLights">
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><see cref="SignalTowerPartBase"/><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ䡣
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <see cref="STEventAction"/><3E><>Ҫӳ<D2AA>䵽<EFBFBD><E4B5BD>Ӧ<EFBFBD><D3A6><see cref="SignalTowerPartBase"/><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ֵ䣻
|
|
|
|
|
/// <20><><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><see cref="SignalTowerBase"/><3E><><EFBFBD>캯<EFBFBD><ECBAAF><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
/// </param>
|
2023-05-06 16:57:09 +08:00
|
|
|
|
/// <param name="events">
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ֵ䡣
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <20>¼<EFBFBD><C2BC>ֵ<EFBFBD><D6B5><EFBFBD>KeyΪ<79>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ΪRT<52><54>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>Bool<6F><6C><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͨ<EFBFBD><CDA8>DATA.Poll<6C><6C><EFBFBD>ʡ<EFBFBD>
|
|
|
|
|
/// <br/>
|
|
|
|
|
/// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>Ϊ<see cref="STEventAction"/><3E><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ΪTrueʱ<65><CAB1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>еĶ<D0B5><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// </remarks>
|
|
|
|
|
/// </param>
|
2023-05-11 14:34:05 +08:00
|
|
|
|
public void ParseEvents(Dictionary<LightType, SignalTowerPartBase> dicLights, out Dictionary<string, List<STEventAction>> events)
|
2023-05-06 16:57:09 +08:00
|
|
|
|
{
|
|
|
|
|
events = new Dictionary<string, List<STEventAction>>();
|
|
|
|
|
|
|
|
|
|
foreach (var stEvent in Events)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>¼<EFBFBD><C2BC>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (events.ContainsKey(stEvent.Name))
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
// <20>ֵ<EFBFBD><D6B5>д<EFBFBD><D0B4><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>Ŀ
|
|
|
|
|
events[stEvent.Name] = new List<STEventAction>();
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>¼<EFBFBD>ִ<EFBFBD>еĶ<D0B5><C4B6><EFBFBD>
|
|
|
|
|
foreach (LightType light in Enum.GetValues(typeof(LightType)))
|
|
|
|
|
{
|
2023-05-08 09:39:26 +08:00
|
|
|
|
var strStatus = stEvent.GetType().GetProperty(light.ToString())?.GetValue(stEvent)?.ToString().ToLower();
|
|
|
|
|
if (!string.IsNullOrEmpty(strStatus))
|
2023-05-06 16:57:09 +08:00
|
|
|
|
{
|
|
|
|
|
var status = TowerLightStatus.Unknown;
|
|
|
|
|
STBlinkPattern blinkPattern = null;
|
|
|
|
|
|
2023-05-08 09:39:26 +08:00
|
|
|
|
if (strStatus.Contains(TowerLightStatus.On.ToString().ToLower()))
|
2023-05-06 16:57:09 +08:00
|
|
|
|
{
|
|
|
|
|
status = TowerLightStatus.On;
|
|
|
|
|
}
|
2023-05-08 09:39:26 +08:00
|
|
|
|
else if (strStatus.Contains(TowerLightStatus.Off.ToString().ToLower()))
|
2023-05-06 16:57:09 +08:00
|
|
|
|
{
|
|
|
|
|
status = TowerLightStatus.Off;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// ʹ<>ù<EFBFBD><C3B9><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>Ŀ
|
2023-05-08 09:39:26 +08:00
|
|
|
|
var pattSetting = PatternsSettings.FirstOrDefault(x =>
|
|
|
|
|
string.Compare(x.Name, strStatus, StringComparison.OrdinalIgnoreCase) == 0);
|
2023-05-06 16:57:09 +08:00
|
|
|
|
|
2023-05-08 09:39:26 +08:00
|
|
|
|
if (pattSetting != null)
|
|
|
|
|
blinkPattern = new STBlinkPattern(pattSetting.Pattern, pattSetting.Priority, pattSetting.Cycles);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LOG.Warning($"Unable to find the STPatternSetting {strStatus} from STEvents config file.");
|
|
|
|
|
blinkPattern = STBlinkPattern.GetDefaultPattern();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2023-05-06 16:57:09 +08:00
|
|
|
|
status = TowerLightStatus.Customized;
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-11 14:34:05 +08:00
|
|
|
|
if(dicLights.TryGetValue(light, out var part))
|
|
|
|
|
events[stEvent.Name].Add(new STEventAction(stEvent.Name, part, status, blinkPattern));
|
|
|
|
|
else
|
|
|
|
|
LOG.Error($"Unable to find signal tower part {light} from STEvent config file.");
|
2023-05-06 16:57:09 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
}
|