using IStation.Untity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.DataDockingSocket
{
internal class ShutDownMsgHelper
{
public static eShutDownInstructionStatus InstructionStatus = eShutDownInstructionStatus.未发送;
public static DateTime _lastSendTime ;
///
/// 开始关机
///
///
///
public static bool StartJob(Model.IMonitorDataDockingSession session)
{
if (session == null)
{
NtLogHelper.Error($"关机 session:Close");
return false;
}
if (!session.IsConnected)
{
NtLogHelper.Error($"关机时 session:Not connected");
return false;
}
byte[] bts = GetControlMsg();
session.Send(bts, 0, bts.Length);
InstructionStatus = eShutDownInstructionStatus.关机指令发送;
_lastSendTime = DateTime.Now;
NtLogHelper.Debug("关机指令发送:" + session.SessionName + ":" + BitTransfer.ToString(bts) );
return true;
}
///
/// 自动关闭
///
static System.Timers.Timer _timeAutoClose;
public static void StartAutoClose(double second)
{
try
{
NtLogHelper.Info("开启自动关机模式 时间:" + second + "s");
_timeAutoClose = new System.Timers.Timer(1000 * second);//实例化Timer类,设置间隔时间为10000毫秒;
_timeAutoClose.Elapsed += new System.Timers.ElapsedEventHandler(ExecuteAutoClose);//到达时间的时候执行事件;
_timeAutoClose.AutoReset = false;//设置是执行一次(false)还是一直执行(true);
_timeAutoClose.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
_timeAutoClose.Start(); //启动定时器
NtLogHelper.Info("_timeAutoClose.Start()");
}
catch (Exception ex)
{
NtLogHelper.Error("_timeAutoClose:" + ex.Message);
}
}
private static void ExecuteAutoClose(object source, System.Timers.ElapsedEventArgs e)
{
if (_timeAutoClose == null)
return;
try
{
NtLogHelper.Info("ExecuteAutoClose");
_timeAutoClose.Stop(); //先关闭定时器
NtLogHelper.Info(" _timeAutoClose.Stop()");
_timeAutoClose = null;
//要执行的业务代码
NtLogHelper.Info("正在自动关机....");
StartJob(HandleHelper.GetLastSession());
}
catch (Exception ex)
{
NtLogHelper.Error(ex.Message);
}
// t.Start(); //执行完毕后再开启器
}
///
/// 是否是控制指令
///
///
///
public static bool IsControlMsg(byte[] byteMessage)
{
return false;
}
///
/// 关机指令
///
static string ControlMsg = "01-06-00-10-00-01-49-CF";
///
/// 获取控制指令(关机指令)
///
///
public static byte[] GetControlMsg()
{
// var appParas = AppParasHelper.GetInstance();
// if (appParas == null || appParas.InstructionStartUp == null || appParas.InstructionStartUp.Content == null)
{
return BitTransfer.FromString(ControlMsg);
}
// return BitTransfer.FromString(appParas.InstructionStartUp.Content);
}
///
/// 是否需要当前类进行处理
///
///
///
public static bool IsNeedHandle(byte[] byteMessage)
{
if (InstructionStatus == eShutDownInstructionStatus.关机指令发送)
return true ;
return false;
}
///
/// 读取返回消息 处理成功返回成功, 不成功或者不需要处理返回false
///
///
public static bool HandleReceive(Model.IMonitorDataDockingSession session,byte[] byteMessage)
{
if (InstructionStatus == eShutDownInstructionStatus.未发送)
return false ;
if (InstructionStatus == eShutDownInstructionStatus.关机指令发送)
{
if (byteMessage.Length >= ControlMsg.Length)
{
string strMessage = BitConverter.ToString(byteMessage, 0, byteMessage.Length);
if (strMessage == ControlMsg)
{
InstructionStatus = eShutDownInstructionStatus.未发送;
NtLogHelper.Debug("关机指令返回:" + BitTransfer.ToString(byteMessage) );
if(_timeAutoClose != null)
{
_timeAutoClose.Stop(); //先关闭定时器
_timeAutoClose = null;
}
return true ;
}
}
//返回失败, 再发送一次再确认一下
if((DateTime.Now- _lastSendTime).TotalSeconds > 3)
{
StartJob(session);
}
}
return false;
}
}
}