#region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2025 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:Mr.Wen's MacBook Pro * 命名空间:Sln.Iot.Business.base * 唯一标识:AA8CCDD9-6D6B-47B7-8309-5C9D41FFC822 * * 创建者:WenJY * 电子邮箱: * 创建时间:2025-04-11 15:04:43 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using System; using Microsoft.Extensions.Logging; using Sln.Iot.Common; using Sln.Iot.Config; using Sln.Iot.Model.dto; using Sln.Iot.Serilog; using Sln.Iot.Socket.Adapter; using TouchSocket.Core; using TouchSocket.Sockets; namespace Sln.Iot.Business.@base { public abstract class BaseBusiness { public SerilogHelper _logger; public AppConfig _appConfig; public StringChange _stringChange; public BaseBusiness(SerilogHelper logger,AppConfig appConfig,StringChange stringChange) { _logger = logger; _appConfig = appConfig; _stringChange = stringChange; } /// /// 指令解析方法 /// /// /// public abstract FilterResult BufferAnalysis(ISocketClient client,BufferRequestInfo requestInfo,int bodyLength); /// /// 应答响应 /// /// /// public abstract void ResponseHandle(ISocketClient client, byte[] buffer); /// /// 封装回复指令 /// /// /// public void GetMessagePack(ref MessagePack SendMessagePackInfo,byte[] buffer) { SendMessagePackInfo.m_EnergyType = buffer[1]; Array.Copy(buffer, 2, SendMessagePackInfo.m_Meteraddr, 0, 2); Array.Copy(buffer, 4, SendMessagePackInfo.m_Msta, 0, 2); SendMessagePackInfo.m_StartFlag = buffer[6]; } /// /// 发送接收成功指令 /// /// /// /// public bool SendMessageAsync(ISocketClient client, MessagePack pMessagePack,byte[] buffer = null) { ushort num = 0; try { byte[] SendBuffer = new byte[12]; if (buffer != null) { SendBuffer = new byte[12 + buffer.Length]; } SendBuffer[num] = pMessagePack.m_BeginChar; num = (ushort)(num + 1); SendBuffer[num] = pMessagePack.m_EnergyType; num = (ushort)(num + 1); Array.Copy(pMessagePack.m_Meteraddr, 0, SendBuffer, num, pMessagePack.m_Meteraddr.Length); num = (ushort)(num + 2); Array.Copy(pMessagePack.m_Msta, 0, SendBuffer, num, pMessagePack.m_Msta.Length); num = (ushort)(num + 2); SendBuffer[num] = pMessagePack.m_StartFlag; num = (ushort)(num + 1); SendBuffer[num] = pMessagePack.m_MessageType; num = (ushort)(num + 1); Array.Copy(pMessagePack.m_PackLen, 0, SendBuffer, num, pMessagePack.m_PackLen.Length); num = (ushort)(num + 2); if (buffer != null) { Array.Copy(buffer, 0, SendBuffer, num, buffer.Length); num = (ushort)(num + buffer.Length); } pMessagePack.m_Verify = _stringChange.CalculateVerifyToArray(SendBuffer, SendBuffer.Length - 1)[0]; SendBuffer[num] = pMessagePack.m_Verify; num = (ushort)(num + 1); SendBuffer[num] = pMessagePack.m_EndChar; _logger.Info($"向客户端:{client.Id};地址:{client.GetIPPort()};发送终端消息:{_stringChange.bytesToHexStr(SendBuffer, SendBuffer.Length)}"); client.SendAsync(SendBuffer); return true; } catch (Exception ex) { _logger.Error($"SendMessageToClient异常:{ex.Message}"); return false; } } } }