namespace IStation.DataDockingSocket
{
public class HandleHelper : IHandleHelper
{
///
/// 处理注册码
///
public void HandleRegisterCode(Yw.Model.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(Yw.Model.IMonitorDataDockingSession session)
{
}
///
/// 处理数据
///
public void HandleData
(
Yw.Model.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 数据对接中,SZJT.Ten 缺少数据对接配置文件");
return;
}
var item = appParas.InstructionItems.Find(x => x.Verify(bytes));
if (item == null)
return;
var middleList = HandleDataHelper.HandleData(item, bytes);
if (middleList != null && middleList.Count > 0)
{
var recordList = new List();
foreach (var mapper in mappers)
{
if (mapper.SubList == null || mapper.SubList.Count < 1)
{
continue;
}
var mapper_sub = mapper.SubList.First();
var middle = middleList.Find(x => x.SignId == mapper.TransferId);
if (middle != null)
{
var record = new Yw.Model.MonitorHandleRecord
{
MonitorPointID = mapper.MonitorPointID,
DataTime = middle.DataTime
};
var dataStatus = new List();
var record_sub = new Yw.Model.MonitorHandleSubRecord();
record_sub.SignalID = mapper_sub.SignalID;
record_sub.SrcValue = middle.DataValue;
record_sub.DataValue = mapper_sub.Docking(middle.DataValue, ref dataStatus);
record_sub.DataStatus = dataStatus;
record.SubList.Add(record_sub);
recordList.Add(record);
}
}
receive(recordList);
}
if (ConfigHelper.SupportOld)
{
OldTransferHelper.Transfer(middleList);
}
if (appParas.Src)
{
SrcHelper.Src(bytes);
}
if (appParas.Debug)
{
DebugHelper.Debug(middleList);
}
}
}
}