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;
}
}
}