#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, BufferRequestInfo requestInfo);
///
/// 封装回复指令
///
///
///
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[8];
if (buffer != null)
{
SendBuffer = new byte[8 + 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;
}
}
}
}