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.

191 lines
6.6 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 SlnMesnac.Common;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using SlnMesnac.Rfid.Dto;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Core;
using TouchSocket.Sockets;
namespace SlnMesnac.Rfid.Factory
{
public class FuchsFactory : RfidAbsractFactory
{
private SerilogHelper _logger;
private readonly TcpClient _tcpClient = new TcpClient();
private readonly StringChange _stringChange;
private string m_strIP;
private string m_deviceID;
private MeshttpClient _meshttpClient;
public FuchsFactory(SerilogHelper logger, StringChange stringChange, MeshttpClient meshttpClient)
{
_logger = logger;
_stringChange = stringChange;
_meshttpClient = meshttpClient;
}
public override void Close()
{
_tcpClient.CloseAsync();
}
public override bool Connect(string ip, int port)
{
try
{
_tcpClient.SetupAsync(new TouchSocketConfig().SetRemoteIPHost($"{ip}:{port}"));
_tcpClient.ConnectAsync();
return true;
}
catch (Exception e)
{
return false;
//throw new InvalidOperationException($"设备连接异常:{e.Message}");
}
}
public override async Task<bool> ConnectAsync(string ip, int port, string deviceid)
{
try
{
m_deviceID = deviceid;
m_strIP = ip;
_tcpClient.SetupAsync(new TouchSocketConfig().SetRemoteIPHost($"{ip}:{port}"));
await _tcpClient.ConnectAsync(1500);
_tcpClient.Received = (client, e) =>
{
//从客户端收到信息
var mes = Encoding.UTF8.GetString(e.Memory.Span.ToArray(), 0, e.Memory.Span.Length);//注意数据长度是byteBlock.Len
byte[] receivedBuffer = new byte[e.Memory.Span.Length];
Array.Copy(e.Memory.Span.ToArray(), 0, receivedBuffer, 0, e.Memory.Span.Length);
return EasyTask.CompletedTask;
};
return true;
}
catch (Exception e)
{
return false;
}
}
public override bool GetOnlineStatus()
{
try
{
return _tcpClient.Online;
}
catch (Exception e)
{
return false;
}
}
public override Task<List<TagInfo>> GetRFIDAsync(int timeout = 1500)
{
throw new NotImplementedException();
}
public override Task<int> Get_Rf()
{
throw new NotImplementedException();
}
public override Task<bool> Set_Rf(int iDbi)
{
throw new NotImplementedException();
}
public override Task<bool> WriteAlarmLight(int port, ushort Timedout)
{
throw new NotImplementedException();
}
public override async Task<bool> Set_FilterData(string Filter)
{
bool iflag = false;
Filter = "FC 08";
try
{
if (!string.IsNullOrEmpty(Filter))
{
var waitClient = _tcpClient.CreateWaitingClient(new WaitingOptions()
{
FilterFunc = response =>
{
// 检查响应数据是否符合预期
if ( response.Memory.Length > 0)
{
// 可以根据实际情况添加更多的检查逻辑
return true;
}
return false;
}
});
//_logger.Info($"{m_deviceID}发送修改功率指令{_stringChange.bytesToHexStr(pMessagePack.m_pData, pMessagePack.m_pData.Length)}");
Filter = "filter "+ Filter.Replace(" ", "").Length / 2+ " " + Filter + "\r\n";
//byte[] reciveBuffer = await waitClient.SendThenReturnAsync(Filter + "\r\n", 2000);
using (var responsedData = await waitClient.SendThenResponseAsync(Filter, 2000))
{
var memory = responsedData.Memory;
string result = Encoding.GetEncoding("GBK").GetString(memory.ToArray(), 0, memory.Length);
_logger.Info($"{m_deviceID}接收设置过滤指令{result}");
return true;
}
//_logger.Info($"{m_deviceID}接收修改功率指令{_stringChange.bytesToHexStr(reciveBuffer, reciveBuffer.Length)}");
}
return iflag;
}
catch (Exception ex)
{
return iflag;
}
}
public override async Task<string> Get_FilterData()
{
string iflag = "";
try
{
var waitClient = _tcpClient.CreateWaitingClient(new WaitingOptions()
{
FilterFunc = response =>
{
// 检查响应数据是否符合预期
if ( response.Memory.Length > 0)
{
// 可以根据实际情况添加更多的检查逻辑
return true;
}
return false;
}
});
//_logger.Info($"{m_deviceID}发送修改功率指令{_stringChange.bytesToHexStr(pMessagePack.m_pData, pMessagePack.m_pData.Length)}");
//byte[] reciveBuffer = await waitClient.SendThenReturnAsync("filter?\r\n", 2000);
using (var responsedData = await waitClient.SendThenResponseAsync("filter?\r\n",2000))
{
var memory = responsedData.Memory;
string result = Encoding.GetEncoding("GBK").GetString(memory.ToArray(), 0, memory.Length);
_logger.Info($"{m_deviceID}接收设置过滤指令{result}");
return result;
}
return iflag;
}
catch (Exception ex)
{
return iflag;
}
}
}
}