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 { public class EMSServerConState:BindableBase { /// /// 声明委托对象-判定跟EMS连接失败时触发事件 /// public event EventHandler EMSServerConErrEventHandler; /// /// 周期读取定时器 /// 周期发送到SignaIR Hub中 /// private System.Timers.Timer? timer { get; set; } public EMSServerConState() { 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 (!ServerState) { Msg = "连接出现错误"; ConResult = false; //EMSServerConErrEventHandler(this, new EMSConErrEventArgs() { Msg = "连接出现错误" }); timer.Enabled = true; return; } if (ServerSendState == false || TimeIsOk(ServerSendTime) == false) { Msg = "发送数据出现错误"; ConResult = false; //EMSServerConErrEventHandler(this, new EMSConErrEventArgs() { Msg = "发送数据出现错误" }); timer.Enabled = true; return; } if (ServerRecvState == false || TimeIsOk(ServerRecvTime) == false) { Msg = "接受数据出现错误"; ConResult = false; //EMSServerConErrEventHandler(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)//触发一次 //{ // //暂时的逻辑不需要触发事件了,由外部的函数获取这个状态判断信息 // //EMSServerConErrEventHandler(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 _ServerState; /// /// 通信连接状态 /// 来自通信的事件触发方法 /// public bool ServerState { get { return _ServerState; } set { _ServerState = value; } } private bool _ServerSendState; /// /// Server 发送数据的状态 /// public bool ServerSendState { get { return _ServerSendState; } set { _ServerSendState = value; ServerSendTime = DateTime.Now; if (value) { ServerSendStateMsg = "正常"; } else { ServerSendStateMsg = "失败"; } } } private string _ServerSendStateMsg = "失败"; /// /// Server 发送数据的状态 消息 /// public string ServerSendStateMsg { get { return _ServerSendStateMsg; } set { _ServerSendStateMsg = value;RaisePropertyChanged(); } } /// /// 发送数据的时间 /// private DateTime ServerSendTime { get; set; } = DateTime.Now; private bool _ServerRecvState; /// /// Server 接受数据的状态 /// public bool ServerRecvState { get { return _ServerRecvState; } set { _ServerRecvState = value; ServerRecvTime = DateTime.Now; if (value) { ServerRecvStateMsg = "正常"; } else { ServerRecvStateMsg = "失败"; } } } private string _ServerRecvStateMsg = "失败"; /// /// Server 接受数据的状态 消息 /// public string ServerRecvStateMsg { get { return _ServerRecvStateMsg; } set { _ServerRecvStateMsg = value; RaisePropertyChanged(); } } /// ///接受数据的时间 /// private DateTime ServerRecvTime { get; set; } = DateTime.Now; /// /// 判断时间是否OK /// 基于现在的时间 /// /// private bool TimeIsOk(DateTime dateTime) { //大于1秒代表通信失败 if ((DateTime.Now - dateTime).TotalSeconds > 2) { return false; } return true; } } }