using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using IStation.Model;
using IStation.Untity;
namespace IStation.DataDockingSocket
{
public class HandleHelper : IDataDockingSocket.IHandleHelper
{
static IMonitorDataDockingSession _session;
public static IMonitorDataDockingSession GetLastSession()
{//关机用的是定时器, 定时器里面需要获取最近的一次链接
return _session;
}
///
/// 处理注册码
///
public void HandleRegisterCode(IMonitorDataDockingSession session)
{
if (session == null)
return;
if (!session.IsConnected)
return;
if (SessionHelper.Cache != null)
{
if (SessionHelper.Cache != session)
{
if (SessionHelper.Cache.IsConnected)
{
SessionHelper.Cache.Close($"{session.SessionName} 中,产生新的会话!");
}
}
}
SessionHelper.Cache = session;
foreach (var item in MonitorMsgHelper.GetInstructionQuerys())
{
SendInstructionJobHelper.StartJob(session, item);
if (item.SpaceTime >= 1)
Thread.Sleep(item.SpaceTime * 1000);
}
SendControlJobHelper.StartJob(session);
}
///
/// 处理心跳包
///
public void HandleHeartbeat(IMonitorDataDockingSession session)
{
_session = session;
}
///
/// 处理数据
///
public void HandleData
(
IMonitorDataDockingSession session,
byte[] byteMessage,
List mappers,
Action> onReceive
)
{
if (session == null)
return;
if (!session.IsConnected)
return;
if (byteMessage == null || byteMessage.Length < 4)
{
return;
}
NtLogHelper.Info("开始处理数据...");
_session = session;
if (MonitorMsgHelper.IsNeedHandle(byteMessage))
{
NtLogHelper.Info("MonitorMsgHelper...");
//监控指令
var receList = MonitorMsgHelper.HandleReceive(byteMessage);
if (receList == null || receList.Count == 0)
return;
NtLogHelper.Info("MonitorMsgHelper Over");
NtLogHelper.Src(byteMessage);
onReceive(receList);
return;//成功就返回掉
}
//不要加else
if (ShutDownMsgHelper.IsNeedHandle(byteMessage))
{
NtLogHelper.Info("ShutDownMsgHelper...");
if (ShutDownMsgHelper.HandleReceive(session, byteMessage))
{
NtLogHelper.Info("ShutDownMsgHelper Over");
return;
}
}
//不要加else
if (StartUpMsgHelper.IsNeedHandle(byteMessage))
{
NtLogHelper.Info("StartUpMsgHelper... ");
if (StartUpMsgHelper.HandleReceive(session, byteMessage))
{
NtLogHelper.Info("StartUpMsgHelper Over");
return;
}
}
NtLogHelper.Info("数据处理结束...");
}
}
}