#region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2026 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:Mr.Wen's MacBook Pro * 命名空间:Sln.IntelliBelt.Business * 唯一标识:C4882642-153C-4A66-9D71-9753ACA8EB03 * * 创建者:WenJY * 电子邮箱: * 创建时间:2026-04-26 11:03:35 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Sln.IntelliBelt.Business.@base; using Sln.IntelliBelt.Common; using Sln.IntelliBelt.Config; using Sln.IntelliBelt.Model; using Sln.IntelliBelt.Serilog; using Sln.IntelliBelt.Socket; using Sln.IntelliBelt.Socket.Adapter; using Sln.IntelliBelt.WebSocket; using TouchSocket.Sockets; namespace Sln.IntelliBelt.Business; public class ReaderBufferHandler:BaseBusiness { private readonly TcpServer _tcpServer; public ReaderBufferHandler(SerilogHelper logger, AppConfig appConfig, StringChange stringChange, WebSocketHelper webSocket, TcpServer tcpServer) : base(logger, appConfig, stringChange, webSocket) { _tcpServer = tcpServer; } public override void BufferAnalysis(TcpSessionClient client, BufferRequestInfo requestInfo, long bodyLength) { base.GetObjectTypeStr(requestInfo.objType,out string objTypeStr); _logger.Info($"{client.Id}链接收到终端{requestInfo.terminalAddr}上报的{objTypeStr}数据:{requestInfo.content}"); base.GetJsonStr(client.Id,requestInfo,out string jsonStr); _webSocket.PushMsg(jsonStr); } public override void ResponseHandle(TcpSessionClient client, BufferRequestInfo requestInfo) { //throw new NotImplementedException(); } /// /// 监控平台启动时获取设备参数信息 /// /// public void GetReaderParams(ReaderCommand readerCommand) { try { byte[] terminalAddrBytes = _stringChange.HexStrTorbytes(readerCommand.terminalAddr); byte objType = Convert.ToByte(readerCommand.objType); List buffers = new List() { new byte[] { 0xAA, 0x55, 0x01, 0x70, 0x02,0x73, 0x0D }, //固件版本 new Byte[] {0xAA,0x55,0x00,0x72,0x72,0x0D}, //功率 new byte[] {0xAA,0x55,0x00,0x90,0x90,0x0D} //温度 }; buffers.ForEach(x => { BufferRequestInfo info = GetReaderParam(readerCommand.clientId, terminalAddrBytes,objType,x).Result; if (info.body.Length > 3) { if (info.body[3] == 0x70) { this.ReaderVersionAnalysis(info,ref readerCommand); }else if (info.body[3] == 0x72) { this.ReaderPowerAnalysis(info,ref readerCommand); }else if (info.body[3] == 0x90) { this.ReaderTempAnalysis(info,ref readerCommand); } } Thread.Sleep(1000); }); readerCommand.content = $"获取设备参数成功"; } catch (Exception e) { _logger.Info($"获取设备参数异常:{e.Message}"); readerCommand.content = $"获取设备参数异常:{e.Message}"; } _webSocket.PushMsg(JsonConvert.SerializeObject(readerCommand,Formatting.Indented)); } public async Task GetReaderParam(string clientId,byte[] terminalAddrBytes,byte objType,byte[] buffer) { try { ResponsePack responsePack = new ResponsePack() { terminalAddr = terminalAddrBytes, identCode = 0x32, objType = objType, contentLen = (byte)buffer.Length, content = buffer }; var messagePack = base.GetMessagePack(ref responsePack); var requestInfo = await _tcpServer.SendMsgToClient(clientId, messagePack); if (requestInfo == null) { throw new ArgumentNullException($"requestInfo为空"); } return requestInfo; } catch (Exception e) { throw new InvalidOperationException($"{e.Message}"); } } /// /// 天线功率解析 /// /// /// public void ReaderPowerAnalysis(BufferRequestInfo requestInfo,ref ReaderCommand readerCommand) { int len = Convert.ToInt32(requestInfo.body[2]); var buffers = requestInfo.body.Skip(5).Take(len).ToArray(); readerCommand.paramInfo.antPowers = new List(); for (int i = 0; i < len; i=i+5) { AntPowerInfo antPowerInfo = new AntPowerInfo(); var buf = buffers.Skip(i).Take(5).ToArray(); antPowerInfo.ant = buf[0]; byte[] readPowerBytes = buf.Skip(1).Take(2).ToArray(); antPowerInfo.readPower= Convert.ToInt32(_stringChange.bytesToHexStr(readPowerBytes,readPowerBytes.Length), 16) / 100; byte[] writePowerBytes = buf.Skip(3).Take(2).ToArray(); antPowerInfo.writePower= Convert.ToInt32(_stringChange.bytesToHexStr(writePowerBytes,writePowerBytes.Length), 16) / 100; _logger.Info($"{antPowerInfo.ant}#天线,读取功率:{antPowerInfo.readPower};写入功率:{antPowerInfo.writePower}"); readerCommand.paramInfo.antPowers.Add(antPowerInfo); } } /// /// 固件版本解析 /// /// /// public void ReaderVersionAnalysis(BufferRequestInfo requestInfo,ref ReaderCommand readerCommand) { int bobyLen = requestInfo.body[2]; var buffer = requestInfo.body.Skip(5).Take(bobyLen).ToArray(); readerCommand.paramInfo.readerVersion = _stringChange.ToAsciiString(buffer); } /// /// 设备温度解析 /// /// /// public void ReaderTempAnalysis(BufferRequestInfo requestInfo,ref ReaderCommand readerCommand) { readerCommand.paramInfo.readerTemp= requestInfo.body[5]; _logger.Info($"设备温度:{readerCommand.paramInfo.readerTemp}"); } }