Files
YuPu-OrpaonEMS/OrpaonEMS.Model/MasterSlave/EMSServerConState.cs
2025-02-28 22:23:13 +08:00

210 lines
6.0 KiB
C#

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
{
/// <summary>
/// 声明委托对象-判定跟EMS连接失败时触发事件
/// </summary>
public event EventHandler<EMSConErrEventArgs> EMSServerConErrEventHandler;
/// <summary>
/// 周期读取定时器
/// 周期发送到SignaIR Hub中
/// </summary>
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;
}
/// <summary>
/// 循环判定连接状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
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;
}
/// <summary>
/// 通信的消息
/// </summary>
private string Msg { get; set; } = string.Empty;
private bool _ConResult = true;
/// <summary>
/// 整体的通信状态结果
/// </summary>
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;
/// <summary>
/// 通信连接状态
/// 来自通信的事件触发方法
/// </summary>
public bool ServerState
{
get { return _ServerState; }
set { _ServerState = value; }
}
private bool _ServerSendState;
/// <summary>
/// Server 发送数据的状态
/// </summary>
public bool ServerSendState
{
get { return _ServerSendState; }
set
{
_ServerSendState = value;
ServerSendTime = DateTime.Now;
if (value)
{
ServerSendStateMsg = "正常";
}
else
{
ServerSendStateMsg = "失败";
}
}
}
private string _ServerSendStateMsg = "失败";
/// <summary>
/// Server 发送数据的状态 消息
/// </summary>
public string ServerSendStateMsg
{
get { return _ServerSendStateMsg; }
set { _ServerSendStateMsg = value;RaisePropertyChanged(); }
}
/// <summary>
/// 发送数据的时间
/// </summary>
private DateTime ServerSendTime { get; set; } = DateTime.Now;
private bool _ServerRecvState;
/// <summary>
/// Server 接受数据的状态
/// </summary>
public bool ServerRecvState
{
get { return _ServerRecvState; }
set
{
_ServerRecvState = value;
ServerRecvTime = DateTime.Now;
if (value)
{
ServerRecvStateMsg = "正常";
}
else
{
ServerRecvStateMsg = "失败";
}
}
}
private string _ServerRecvStateMsg = "失败";
/// <summary>
/// Server 接受数据的状态 消息
/// </summary>
public string ServerRecvStateMsg
{
get { return _ServerRecvStateMsg; }
set { _ServerRecvStateMsg = value; RaisePropertyChanged(); }
}
/// <summary>
///接受数据的时间
/// </summary>
private DateTime ServerRecvTime { get; set; } = DateTime.Now;
/// <summary>
/// 判断时间是否OK
/// 基于现在的时间
/// </summary>
/// <returns></returns>
private bool TimeIsOk(DateTime dateTime)
{
//大于1秒代表通信失败
if ((DateTime.Now - dateTime).TotalSeconds > 2)
{
return false;
}
return true;
}
}
}