|
|
#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 Fleck;
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
using Sln.Iot.Common;
|
|
|
using Sln.Iot.Config;
|
|
|
using Sln.Iot.Model.dto;
|
|
|
using Sln.Iot.Serilog;
|
|
|
using Sln.Iot.Socket;
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 指令解析方法
|
|
|
/// </summary>
|
|
|
/// <param name="client"></param>
|
|
|
/// <param name="requestInfo"></param>
|
|
|
public abstract FilterResult BufferAnalysis(ISocketClient client,BufferRequestInfo requestInfo,int bodyLength);
|
|
|
|
|
|
/// <summary>
|
|
|
/// 应答响应
|
|
|
/// </summary>
|
|
|
/// <param name="client"></param>
|
|
|
/// <param name="messagePack"></param>
|
|
|
public abstract void ResponseHandle(ISocketClient client, byte[] buffer);
|
|
|
|
|
|
/// <summary>
|
|
|
/// 封装回复指令
|
|
|
/// </summary>
|
|
|
/// <param name="SendMessagePackInfo"></param>
|
|
|
/// <param name="buffer"></param>
|
|
|
public void GetMessagePack(ref ResponsePack 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];
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 发送接收成功指令
|
|
|
/// </summary>
|
|
|
/// <param name="client"></param>
|
|
|
/// <param name="pMessagePack"></param>
|
|
|
/// <returns></returns>
|
|
|
public bool SendMessageAsync(ISocketClient client, ResponsePack 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;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// Nan 值处理
|
|
|
/// </summary>
|
|
|
/// <param name="value"></param>
|
|
|
public void ValueIsNan(ref float value)
|
|
|
{
|
|
|
if (double.IsNaN(value))
|
|
|
{
|
|
|
if (_appConfig.virtualFlag)
|
|
|
{
|
|
|
value = _appConfig.virtualValue;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
value = 0;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
} |