You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
4.2 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using HighWayIot.Log4net;
using HighWayIot.Repository.domain;
using HighWayIot.Repository.service.Impl;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.AxHost;
namespace HighWayIot.TouchSocket
{
public class BufferAnalysis
{
private static LogHelper logHelper = LogHelper.Instance;
/// <summary>
/// 心跳报文分析
/// </summary>
/// <param name="bytes"></param>
public static void HeartbeatSocket(string ip)
{
BaseHeartbeatServiceImpl sql = new BaseHeartbeatServiceImpl();
if (sql.UpdateHeartbeatInfo(ip) == 0)
{
RFIDHeartbeat heartbeat = new RFIDHeartbeat()
{
IP = ip,
BeatTime = DateTime.Now,
};
sql.AddHeartbeatInfo(heartbeat);
}
}
/// <summary>
/// RFID发送设备状态
/// </summary>
/// <param name="bytes"></param>
public static void RFIDStatusSocket(string ip)
{
BaseStateServiceImpl sql = new BaseStateServiceImpl();
RFIDState rFIDState = new RFIDState()
{
IP = ip,
LogTime = DateTime.Now,
};
sql.AddStateInfo(rFIDState);
}
/// <summary>
/// RFID发送条码
/// </summary>
/// <param name="bytes"></param>
public static void RFIDCodeSocket(JObject obj, string ip)
{
BaseContentServiceImpl sql = new BaseContentServiceImpl();
RFIDContent content;
if (obj["status"].Value<string>() == "GR")
{
JArray jArray = obj["epc"] as JArray;
List<string> list = new List<string>();
foreach(var item in jArray)
{
list.Add(item.Value<string>());
}
string epc = "";
for (int i = 0; i < list.Count; i++)
{
if (i == 0)
{
epc = list[i];
}
else
{
epc += "_" + list[i];
}
}
content = new RFIDContent()
{
IP = ip,
SN = obj["sn"].Value<string>(),
Length = obj["length"].Value<int>(),
Interval = obj["interval"].Value<int>(),
Status = obj["status"].Value<string>(),
EPC = epc,
Tips = obj["tips"].Value<string>(),
LogTime = DateTime.Now,
};
}
else
{
content = new RFIDContent()
{
IP = ip,
SN = obj["sn"].Value<string>(),
Length = obj["length"].Value<int>(),
Interval = obj["interval"].Value<int>(),
Status = obj["status"].Value<string>(),
EPC = "",
Tips = obj["tips"].Value<string>(),
LogTime = DateTime.Now,
};
}
sql.AddContentInfo(content);
}
/// <summary>
/// 将一个数组拆成另外一个数组
/// </summary>
/// <param name="originbyte">原始数组,被拆分的数组</param>
/// <param name="oringinstartindex">从原始数组第几个元素开始</param>
/// <param name="destbytelength">目标数组的长度</param>
/// <param name="destbytestartindex">目标数组开始的元素序号默认为0</param>
/// <returns></returns>
public static byte[] SplitByteArray(byte[] originbyte, int oringinstartindex, int destbytelength, int destbytestartindex = 0)
{
byte[] result = new byte[destbytelength];
System.Array.Copy(originbyte, oringinstartindex, result, destbytestartindex, destbytelength);
return result;
}
}
}