2023-04-24 18:03:19 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
2023-04-28 10:15:33 +08:00
|
|
|
|
namespace MECF.Framework.Common.Device.Bases
|
2023-04-24 18:03:19 +08:00
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 预设的信号灯塔元件动作。
|
|
|
|
|
/// </summary>
|
2023-12-27 10:42:19 +08:00
|
|
|
|
public class STAction : IComparable, ICloneable
|
2023-04-24 18:03:19 +08:00
|
|
|
|
{
|
2023-05-08 11:19:59 +08:00
|
|
|
|
#region Constructors
|
|
|
|
|
|
2023-04-24 18:03:19 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 信号灯塔元件动作构造函数。
|
|
|
|
|
/// </summary>
|
2023-12-27 10:42:19 +08:00
|
|
|
|
/// <param name="eventName">动作名称。</param>
|
2023-05-11 14:34:05 +08:00
|
|
|
|
/// <param name="light">信号塔组件对象的实例。</param>
|
2023-12-27 10:42:19 +08:00
|
|
|
|
/// <param name="action">信号塔组件输出状态。</param>
|
2023-05-08 11:19:59 +08:00
|
|
|
|
/// <param name="blinkPattern">信号塔组件工作模式。如果传入空值,则自动调用
|
|
|
|
|
/// <see cref="STBlinkPattern.GetDefaultPattern"/>以创建默认工作模式。</param>
|
2023-12-27 10:42:19 +08:00
|
|
|
|
public STAction(string eventName, SignalTowerLightBase light, SignalTowerActions action, STBlinkPattern blinkPattern = null)
|
2023-04-24 18:03:19 +08:00
|
|
|
|
{
|
2023-12-27 10:42:19 +08:00
|
|
|
|
EventName = eventName;
|
|
|
|
|
Light = light;
|
|
|
|
|
Output = action;
|
2023-05-06 16:57:09 +08:00
|
|
|
|
BlinkPattern = blinkPattern ?? STBlinkPattern.GetDefaultPattern();
|
2023-12-27 10:42:19 +08:00
|
|
|
|
IsCycleDone = false;
|
2023-04-24 18:03:19 +08:00
|
|
|
|
}
|
2023-05-08 11:19:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2023-12-27 10:42:19 +08:00
|
|
|
|
/// 动作对应的事件名称。
|
2023-05-08 11:19:59 +08:00
|
|
|
|
/// </summary>
|
2023-12-27 10:42:19 +08:00
|
|
|
|
public string EventName { get; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回执行当前动作的信号灯。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public STLightTypes LightType => Light.Type;
|
2023-05-08 11:19:59 +08:00
|
|
|
|
|
2023-04-24 18:03:19 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回信号灯实例。
|
|
|
|
|
/// </summary>
|
2023-12-27 10:42:19 +08:00
|
|
|
|
public SignalTowerLightBase Light { get; }
|
2023-04-24 18:03:19 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
2023-05-05 11:38:25 +08:00
|
|
|
|
/// 设置或返回信号灯的输出状态。
|
2023-12-27 10:42:19 +08:00
|
|
|
|
/// 支持的状态请参考<see cref="SignalTowerActions"/>枚举。
|
2023-04-24 18:03:19 +08:00
|
|
|
|
/// </summary>
|
2023-12-27 10:42:19 +08:00
|
|
|
|
public SignalTowerActions Output { get; set; }
|
2023-05-01 18:58:42 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
2023-05-05 11:38:25 +08:00
|
|
|
|
/// 设置或返回信号灯闪烁模式。
|
2023-05-01 18:58:42 +08:00
|
|
|
|
/// </summary>
|
2023-05-05 11:38:25 +08:00
|
|
|
|
public STBlinkPattern BlinkPattern { get; set; }
|
2023-04-24 18:03:19 +08:00
|
|
|
|
|
2023-12-27 10:42:19 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回是否循环结束。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public bool IsCycleDone { get; set; }
|
|
|
|
|
|
2023-05-08 11:19:59 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
2023-04-24 18:03:19 +08:00
|
|
|
|
#region Methods
|
|
|
|
|
|
2023-05-05 15:46:00 +08:00
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
public int CompareTo(object obj)
|
|
|
|
|
{
|
2023-12-27 10:42:19 +08:00
|
|
|
|
if (obj is not STAction target)
|
2023-05-05 15:46:00 +08:00
|
|
|
|
return -1;
|
|
|
|
|
|
2023-05-06 16:57:09 +08:00
|
|
|
|
return (BlinkPattern.CompareTo(target.BlinkPattern) == 0
|
2023-12-27 10:42:19 +08:00
|
|
|
|
&& Output == target.Output
|
|
|
|
|
&& Light == target.Light)
|
2023-05-06 16:57:09 +08:00
|
|
|
|
? 0
|
|
|
|
|
: -1;
|
2023-05-05 17:10:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
public object Clone()
|
|
|
|
|
{
|
2023-12-27 10:42:19 +08:00
|
|
|
|
return new STAction(EventName, Light, Output, (STBlinkPattern)BlinkPattern.Clone());
|
2023-05-05 15:46:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-05-06 16:57:09 +08:00
|
|
|
|
/// <inheritdoc/>
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
2023-12-27 10:42:19 +08:00
|
|
|
|
return $"{Light}, {Output}";
|
2023-05-06 16:57:09 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
2023-05-05 17:10:07 +08:00
|
|
|
|
|
2023-04-24 18:03:19 +08:00
|
|
|
|
}
|
|
|
|
|
}
|