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#

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;
}
}
}
}