using Prism.Mvvm; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Timers; namespace OrpaonEMS.Model.MasterSlave { /// /// EMS Client连接状态模型 /// 发送和接受的状态必须是OK的才能运行,否则停机 /// 连接的状态必须是OK才能运行,否则停机 /// public class EMSClientConState:BindableBase { /// /// 声明委托对象-判定跟EMS连接失败时触发事件 /// public event EventHandler EMSClientConErrEventHandler; /// /// 周期读取定时器 /// 周期发送到SignaIR Hub中 /// private System.Timers.Timer? timer { get; set; } public EMSClientConState() { timer = new System.Timers.Timer(1000); timer.Elapsed -= CycleCheck; timer.Elapsed += CycleCheck; timer.AutoReset = true; timer.Enabled = true; } /// /// 循环判定连接状态 /// /// /// /// private void CycleCheck(object? sender, ElapsedEventArgs e) { timer.Enabled = false; //连接状态出错,立刻停止 if (!ClientState) { Msg = "连接出现错误"; ConResult = false; //EMSClientConErrEventHandler(this, new EMSConErrEventArgs() { Msg = "连接出现错误" }); timer.Enabled = true; return; } if (ClientSendState == false || TimeIsOk(ClientSendTime) == false) { Msg = "发送数据出现错误"; ConResult = false; //EMSClientConErrEventHandler(this, new EMSConErrEventArgs() { Msg = "发送数据出现错误" }); timer.Enabled = true; return; } if (ClientRecvState == false || TimeIsOk(ClientRecvTime) == false) { Msg = "接受数据出现错误"; ConResult = false; //EMSClientConErrEventHandler(this, new EMSConErrEventArgs() { Msg = "接受数据出现错误" }); timer.Enabled = true; return; } Msg = ""; ConResult = true; timer.Enabled = true; } /// /// 通信的消息 /// private string Msg { get; set; }=string.Empty; private bool _ConResult = true; /// /// 整体的通信状态结果 /// public bool ConResult { get { return _ConResult; } set { //if (_ConResult != value)//触发一次 //{ // //暂时的逻辑不需要触发事件了,由外部的函数获取这个状态判断信息 // //EMSClientConErrEventHandler(this, new EMSConErrEventArgs() { Msg = Msg, Result = value }); // _ConResult = value; //} //Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} -通信结果:{value}"); _ConResult = value; } } private bool _ClientState; /// /// 通信连接状态 /// 来自通信的事件触发方法 /// public bool ClientState { get { return _ClientState; } set { _ClientState = value; } } private bool _ClientSendState; /// /// Client 发送数据的状态 /// public bool ClientSendState { get { return _ClientSendState; } set { _ClientSendState = value; ClientSendTime = DateTime.Now; if (value) { ClientSendStateMsg = "正常"; } else { ClientSendStateMsg = "失败"; } } } /// /// 发送数据的时间 /// private DateTime ClientSendTime { get; set; } = DateTime.Now; private string _ClientSendStateMsg; /// /// Client 发送数据的状态 消息 /// public string ClientSendStateMsg { get { return _ClientSendStateMsg; } set { _ClientSendStateMsg = value; RaisePropertyChanged(); } } private bool _ClientRecvState; /// /// Client 接受数据的状态 /// public bool ClientRecvState { get { return _ClientRecvState; } set { _ClientRecvState = value; ClientRecvTime = DateTime.Now; if (value) { ClientRecvStateMsg = "正常"; } else { ClientRecvStateMsg = "失败"; } } } private string _ClientRecvStateMsg; /// /// Client 接受数据的状态 消息 /// public string ClientRecvStateMsg { get { return _ClientRecvStateMsg; } set { _ClientRecvStateMsg = value; RaisePropertyChanged(); } } /// ///接受数据的时间 /// private DateTime ClientRecvTime { get; set; } = DateTime.Now; /// /// 判断时间是否OK /// 基于现在的时间 /// /// private bool TimeIsOk(DateTime dateTime) { //大于1秒代表通信失败 if ((DateTime.Now - dateTime).TotalSeconds > 1.5) { return false; } return true; } } }