using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using IStation.Model;
namespace IStation.DataDockingSocket
{
///
/// 处理辅助类
///
public class HandleHelper : IDataDockingSocket.IHandleHelper
{
///
/// 处理注册码
///
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;
var appParas = AppParasHelper.Get();
if (appParas == null)
{
LogHelper.Error("Socket 数据对接中,KQ 缺少数据对接配置文件");
return;
}
foreach (var item in appParas.InstructionItems)
{
SendInstructionJobHelper.StartJob(session, item);
Thread.Sleep(appParas.InstructionSendSpace * 1000);
}
}
///
/// 处理心跳包
///
public void HandleHeartbeat(IMonitorDataDockingSession session)
{
}
///
/// 处理数据
///
public void HandleData
(
IMonitorDataDockingSession session,
byte[] bytes,
List mappers,
Action> receive
)
{
if (session == null)
return;
if (!session.IsConnected)
return;
if (bytes == null)
return;
if (!AppParas.Verify(bytes))
return;
if (mappers == null || mappers.Count < 1)
return;
var appParas = AppParasHelper.Get();
if (appParas == null)
{
LogHelper.Error("Socket 数据对接中,KQ 缺少数据对接配置文件");
return;
}
var item = appParas.InstructionItems.Find(x => x.Verify(bytes));
if (item == null)
return;
var srcList = HandleDataHelper.HandleData(item, bytes);
if (srcList != null && srcList.Count > 0)
{
var receiveList = new List();
foreach (var mapper in mappers)
{
var src = srcList.Find(x => x.SignId == mapper.SignId);
if (src != null)
{
var record = new Model.MonitorDataDockingReceiveRecord();
record.SysId = mapper.SysId;
record.RecordType = src.RecordType;
record.SrcTime = src.SrcTime;
record.SrcValue = src.SrcValue;
receiveList.Add(record);
}
}
receive(receiveList);
}
if (appParas.Src)
{
SrcHelper.Src(bytes);
}
if (appParas.Debug)
{
DebugHelper.Debug(srcList);
}
}
}
}