From f893e2afabee92800c1d8762f0460b5cca819f81 Mon Sep 17 00:00:00 2001 From: CaesarBao Date: Thu, 22 Jan 2026 10:47:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7TouchSocket4.0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=AE=BE=E7=BD=AE=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=8F=82=E6=95=B0=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SlnMesnac.Extensions/RfidFactorySetup.cs | 29 ++- SlnMesnac.Model/domain/Base_device_info.cs | 2 + SlnMesnac.Rfid/ApiServer.cs | 10 +- SlnMesnac.Rfid/Factory/FuchsFactory.cs | 190 +++++++++++++++ SlnMesnac.Rfid/Factory/RflyFactory.cs | 229 +++++++++++------- SlnMesnac.Rfid/MeshttpClient.cs | 19 +- SlnMesnac.Rfid/RfidAbsractFactory.cs | 31 ++- SlnMesnac.Rfid/SlnMesnac.Rfid.csproj | 5 + SlnMesnac.Rfid/TouchSocketSetup.cs | 5 +- SlnMesnac.Rfid/WebApiServer.cs | 26 +- SlnMesnac.WPF/SlnMesnac.WPF.csproj | 2 - .../IndexPage/MiddleWareViewModel.cs | 3 +- SlnMesnac.WPF/appsettings.json | 2 +- SlnMesnac.WPF/cloud.ico | Bin 67646 -> 0 bytes 14 files changed, 426 insertions(+), 127 deletions(-) create mode 100644 SlnMesnac.Rfid/Factory/FuchsFactory.cs delete mode 100644 SlnMesnac.WPF/cloud.ico diff --git a/SlnMesnac.Extensions/RfidFactorySetup.cs b/SlnMesnac.Extensions/RfidFactorySetup.cs index 1d7dcd1..409448a 100644 --- a/SlnMesnac.Extensions/RfidFactorySetup.cs +++ b/SlnMesnac.Extensions/RfidFactorySetup.cs @@ -1,13 +1,16 @@ -using Microsoft.Extensions.DependencyInjection; +using Dm.filter.log; +using Microsoft.Extensions.DependencyInjection; using Models; using Serilog; using SlnMesnac.Config; +using SlnMesnac.Model.domain; using SlnMesnac.Plc; using SlnMesnac.Rfid; using SlnMesnac.Rfid.Factory; using SqlSugar; using System; using System.Collections.Generic; +using System.Reflection; using System.Text; #region << 版 本 注 释 >> @@ -36,6 +39,13 @@ namespace SlnMesnac.Extensions { public static class RfidFactorySetup { + public static readonly Dictionary _rfidFactoryTypeMap = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "RFly_I160", typeof(RflyFactory) }, // 原有的Rfly工厂 + { "Fuchs", typeof(FuchsFactory) }, // 新增的HF读卡器工厂 + + // 可扩展更多工厂类型 + }; public static void AddRfidFactorySetup(this IServiceCollection services) { services.AddSingleton>(x => @@ -52,10 +62,24 @@ namespace SlnMesnac.Extensions { if (item.Deleteflag == 0) { + // 3.2 校验工厂类型 + if (string.IsNullOrEmpty(item.Devicetype)) + { + Log.Error($"设备{item.Deviceid}的工厂类型无效"); + continue; + } + // 3.3 动态获取对应工厂实例(核心:替换硬编码的RflyFactory) + Type factoryType = _rfidFactoryTypeMap[item.Devicetype]; + RfidAbsractFactory _rfid = x.GetService(factoryType) as RfidAbsractFactory; + if (_rfid == null) + { + Log.Error($"无法解析工厂实例:{factoryType.FullName},请确认已注册到DI容器"); + continue; + } int colonIndex = item.Connectstr.IndexOf(":"); string IP = colonIndex != -1 ? item.Connectstr.Substring(0, colonIndex) : item.Connectstr; string Port = colonIndex != -1 ? item.Connectstr.Substring(colonIndex + 1) : item.Connectstr; - RfidAbsractFactory _rfid = x.GetService(); + //RfidAbsractFactory _rfid = x.GetService(); _rfid.deviceid = item.Deviceid; _rfid.ip = IP; _rfid.port = int.Parse(Port); @@ -95,5 +119,6 @@ namespace SlnMesnac.Extensions return absractFactories; }); } + } } diff --git a/SlnMesnac.Model/domain/Base_device_info.cs b/SlnMesnac.Model/domain/Base_device_info.cs index 0ba15fd..8cb150a 100644 --- a/SlnMesnac.Model/domain/Base_device_info.cs +++ b/SlnMesnac.Model/domain/Base_device_info.cs @@ -98,6 +98,8 @@ namespace Models public string State = "未连接"; + public Type FactoryType; + } diff --git a/SlnMesnac.Rfid/ApiServer.cs b/SlnMesnac.Rfid/ApiServer.cs index 4a8208d..9a72951 100644 --- a/SlnMesnac.Rfid/ApiServer.cs +++ b/SlnMesnac.Rfid/ApiServer.cs @@ -45,7 +45,7 @@ using TouchSocket.WebApi; #endregion << 版 本 注 释 >> namespace SlnMesnac.TouchSocket { - public class ApiServer: RpcServer + public class ApiServer: SingletonRpcServer { private readonly SerilogHelper _logger; private List rfidAbsractFactory; @@ -67,7 +67,7 @@ namespace SlnMesnac.TouchSocket /// /// /// - [WebApi(Method = HttpMethodType.POST)] + [WebApi(Method = HttpMethodType.Post)] public async Task> autoread() { @@ -84,7 +84,7 @@ namespace SlnMesnac.TouchSocket /// /// /// - [WebApi(Method = HttpMethodType.POST)] + [WebApi(Method = HttpMethodType.Post)] public async Task> basedata(string Requesttime) { List rFIDDeviceInfos = _real_WorkdataService.GetDeviceInfos(); @@ -103,7 +103,7 @@ namespace SlnMesnac.TouchSocket /// /// /// - [WebApi(Method = HttpMethodType.POST)] + [WebApi(Method = HttpMethodType.Post)] public async Task> read(MesReadPara mesReadPara) { ApiResponse response = new ApiResponse(); @@ -221,7 +221,7 @@ namespace SlnMesnac.TouchSocket /// /// /// - [WebApi(Method = HttpMethodType.POST)] + [WebApi(Method = HttpMethodType.Post)] public async Task> revresult(MesAlarmLightPara mesAlarmLightPara) { ApiResponse response = new ApiResponse(); diff --git a/SlnMesnac.Rfid/Factory/FuchsFactory.cs b/SlnMesnac.Rfid/Factory/FuchsFactory.cs new file mode 100644 index 0000000..786885c --- /dev/null +++ b/SlnMesnac.Rfid/Factory/FuchsFactory.cs @@ -0,0 +1,190 @@ +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 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> GetRFIDAsync(int timeout = 1500) + { + throw new NotImplementedException(); + } + + public override Task Get_Rf() + { + throw new NotImplementedException(); + } + + public override Task Set_Rf(int iDbi) + { + throw new NotImplementedException(); + } + + public override Task WriteAlarmLight(int port, ushort Timedout) + { + throw new NotImplementedException(); + } + + public override async Task 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 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; + } + } + } +} diff --git a/SlnMesnac.Rfid/Factory/RflyFactory.cs b/SlnMesnac.Rfid/Factory/RflyFactory.cs index 0dbfda8..6b82dd0 100644 --- a/SlnMesnac.Rfid/Factory/RflyFactory.cs +++ b/SlnMesnac.Rfid/Factory/RflyFactory.cs @@ -70,8 +70,8 @@ namespace SlnMesnac.Rfid.Factory { try { - _tcpClient.Setup(new TouchSocketConfig().SetRemoteIPHost($"{ip}:{port}")); - _tcpClient.Connect(); + _tcpClient.SetupAsync(new TouchSocketConfig().SetRemoteIPHost($"{ip}:{port}")); + _tcpClient.ConnectAsync(); return true; } catch (Exception e) @@ -92,15 +92,15 @@ namespace SlnMesnac.Rfid.Factory { m_deviceID = deviceid; m_strIP = ip; - _tcpClient.Setup(new TouchSocketConfig().SetRemoteIPHost($"{ip}:{port}")); + _tcpClient.SetupAsync(new TouchSocketConfig().SetRemoteIPHost($"{ip}:{port}")); await _tcpClient.ConnectAsync(1500); _tcpClient.Received = (client, e) => { //从客户端收到信息 - var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);//注意:数据长度是byteBlock.Len + var mes = Encoding.UTF8.GetString(e.Memory.Span.ToArray(), 0, e.Memory.Span.Length);//注意:数据长度是byteBlock.Len - byte[] receivedBuffer = new byte[e.ByteBlock.Len]; - Array.Copy(e.ByteBlock.Buffer, 0, receivedBuffer, 0, e.ByteBlock.Len); + byte[] receivedBuffer = new byte[e.Memory.Span.Length]; + Array.Copy(e.Memory.Span.ToArray(), 0, receivedBuffer, 0, e.Memory.Span.Length); byte[] resultBuffer = PareReceiveBufferData(receivedBuffer, receivedBuffer.Length); List tagInfoList = Device_DealTagInfoList(resultBuffer); string info = ""; @@ -133,56 +133,6 @@ namespace SlnMesnac.Rfid.Factory } } /// - /// 按时间段盘点 - /// - /// - /// - /// - public override List TimePeriodRead(int timeout = 5000) - { - byte[] u16byte = new byte[2]; - byte[] bCRC = new byte[4]; - try - { - #region 指令封装 - MessagePack pMessagePack = new MessagePack(); - pMessagePack.m_pData = new byte[8]; - pMessagePack.m_pData[0] = 0xAA; - pMessagePack.m_pData[1] = 0x55; - pMessagePack.m_pData[2] = 0x02; - pMessagePack.m_pData[3] = 0x02; - u16byte = BitConverter.GetBytes(timeout); //超时时间 - u16byte = _stringChange.Swap16Bytes(u16byte); //协议里为大端在前 - Array.Copy(u16byte, 0, pMessagePack.m_pData, 4, 2); - Array.Copy(pMessagePack.m_pData, 2, bCRC, 0, 4); - pMessagePack.m_pData[6] = _stringChange.CalculateVerify(bCRC, bCRC.Length); - pMessagePack.m_pData[7] = 0x0D; - #endregion - - var waitClient = _tcpClient.CreateWaitingClient(new WaitingOptions() - { - FilterFunc = response => - { - return true; - } - }); - - byte[] reciveBuffer = waitClient.SendThenReturn(pMessagePack.m_pData, timeout); - - _logger.Info($"接收原始报文:{_stringChange.bytesToHexStr(reciveBuffer,reciveBuffer.Length)}"); - - byte[] resultBuffer = PareReceiveBufferData(reciveBuffer,reciveBuffer.Length); - - List tagInfoList = Device_DealTagInfoList(resultBuffer); - - return tagInfoList; - } - catch (Exception e) - { - throw new InvalidOperationException($"按时间段盘点异常:{e.Message}"); - } - } - /// /// 异步按时间段盘点 /// /// @@ -224,7 +174,7 @@ namespace SlnMesnac.Rfid.Factory FilterFunc = response => { // 检查响应数据是否符合预期 - if (response.Data != null && response.Data.Length > 0) + if (response.Memory.Length > 0) { // 可以根据实际情况添加更多的检查逻辑 return true; @@ -232,16 +182,21 @@ namespace SlnMesnac.Rfid.Factory return false; } }); + using (var responsedData = await waitClient.SendThenResponseAsync(pMessagePack.m_pData, timeout)) + { + var reciveBuffer = responsedData.Memory.ToArray(); - byte[] reciveBuffer = await waitClient.SendThenReturnAsync(pMessagePack.m_pData, timeout); - _logger.Info($"{m_deviceID}发送读取指令{_stringChange.bytesToHexStr(pMessagePack.m_pData,pMessagePack.m_pData.Length)}"); + _logger.Info($"{m_deviceID}发送读取指令{_stringChange.bytesToHexStr(pMessagePack.m_pData, pMessagePack.m_pData.Length)}"); - byte[] resultBuffer = PareReceiveBufferData(reciveBuffer, reciveBuffer.Length); - _logger.Info($"{m_deviceID}接收读取指令{_stringChange.bytesToHexStr(resultBuffer,resultBuffer.Length)}"); + byte[] resultBuffer = PareReceiveBufferData(reciveBuffer, reciveBuffer.Length); + _logger.Info($"{m_deviceID}接收读取指令{_stringChange.bytesToHexStr(resultBuffer, resultBuffer.Length)}"); - tagInfoList = Device_DealTagInfoList(resultBuffer); + tagInfoList = Device_DealTagInfoList(resultBuffer); - return tagInfoList; + return tagInfoList; + } + + } catch (Exception e) { @@ -287,7 +242,7 @@ namespace SlnMesnac.Rfid.Factory FilterFunc = response => { // 检查响应数据是否符合预期 - if (response.Data != null && response.Data.Length > 0) + if ( response.Memory.Length > 0) { // 可以根据实际情况添加更多的检查逻辑 return true; @@ -296,15 +251,14 @@ namespace SlnMesnac.Rfid.Factory } }); - byte[] reciveBuffer = await waitClient.SendThenReturnAsync(pMessagePack.m_pData, 2000); - - //byte[] resultBuffer = PareReceiveBufferData(reciveBuffer, reciveBuffer.Length); - - if (reciveBuffer[3] == 0x51) + using (var responsedData = await waitClient.SendThenResponseAsync(pMessagePack.m_pData, 2000)) { - return true; + var reciveBuffer = responsedData.Memory.ToArray(); + if (reciveBuffer[3] == 0x51) + { + return true; + } } - return false; } catch (Exception e) @@ -371,7 +325,7 @@ namespace SlnMesnac.Rfid.Factory FilterFunc = response => { // 检查响应数据是否符合预期 - if (response.Data != null && response.Data.Length > 0) + if (response.Memory.Length > 0) { // 可以根据实际情况添加更多的检查逻辑 return true; @@ -380,16 +334,15 @@ namespace SlnMesnac.Rfid.Factory } }); _logger.Info($"{m_deviceID}发送修改功率指令{_stringChange.bytesToHexStr(pMessagePack.m_pData, pMessagePack.m_pData.Length)}"); - - byte[] reciveBuffer = await waitClient.SendThenReturnAsync(pMessagePack.m_pData, 2000); - _logger.Info($"{m_deviceID}接收修改功率指令{_stringChange.bytesToHexStr(reciveBuffer, reciveBuffer.Length)}"); - //byte[] resultBuffer = PareReceiveBufferData(reciveBuffer, reciveBuffer.Length); - - if (reciveBuffer[3] == 0x42) + using (var responsedData = await waitClient.SendThenResponseAsync(pMessagePack.m_pData, 2000)) { - return true; + var reciveBuffer = responsedData.Memory.ToArray(); + _logger.Info($"{m_deviceID}接收修改功率指令{_stringChange.bytesToHexStr(reciveBuffer, reciveBuffer.Length)}"); + if (reciveBuffer[3] == 0x42) + { + return true; + } } - return false; } catch (Exception e) @@ -424,7 +377,7 @@ namespace SlnMesnac.Rfid.Factory FilterFunc = response => { // 检查响应数据是否符合预期 - if (response.Data != null && response.Data.Length > 0) + if (response.Memory.Length > 0) { // 可以根据实际情况添加更多的检查逻辑 return true; @@ -432,17 +385,20 @@ namespace SlnMesnac.Rfid.Factory return false; } }); - - byte[] reciveBuffer = await waitClient.SendThenReturnAsync(pMessagePack.m_pData, 2000); - - if (reciveBuffer[3] == 0x72) + using (var responsedData = await waitClient.SendThenResponseAsync(pMessagePack.m_pData, 2000)) { - byte[] bDB = new byte[2]; - bDB[0] = reciveBuffer[6]; - bDB[1] = reciveBuffer[7]; - DB = Convert.ToInt32(_stringChange.bytesToHexStr(bDB, 2), 16) / 100; - return DB; + var reciveBuffer = responsedData.Memory.ToArray(); + _logger.Info($"{m_deviceID}接收修改功率指令{_stringChange.bytesToHexStr(reciveBuffer, reciveBuffer.Length)}"); + if (reciveBuffer[3] == 0x72) + { + byte[] bDB = new byte[2]; + bDB[0] = reciveBuffer[6]; + bDB[1] = reciveBuffer[7]; + DB = Convert.ToInt32(_stringChange.bytesToHexStr(bDB, 2), 16) / 100; + return DB; + } } + return DB; } @@ -469,12 +425,12 @@ namespace SlnMesnac.Rfid.Factory { try { - _tcpClient.SafeDispose(); + _tcpClient.CloseAsync(); + _tcpClient.Dispose(); } catch (Exception ex) { - - throw; + _logger.Error(ex.Message); } } @@ -842,6 +798,93 @@ namespace SlnMesnac.Rfid.Factory } return epcLength; } + /// + /// 设置过滤参数 + /// + /// + /// + public override async Task 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 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; + } + } #endregion diff --git a/SlnMesnac.Rfid/MeshttpClient.cs b/SlnMesnac.Rfid/MeshttpClient.cs index bdb6ab2..29cfdd9 100644 --- a/SlnMesnac.Rfid/MeshttpClient.cs +++ b/SlnMesnac.Rfid/MeshttpClient.cs @@ -17,6 +17,7 @@ using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Tasks; +using TouchSocket.Core; using TouchSocket.Rpc; using TouchSocket.Sockets; using TouchSocket.WebApi; @@ -38,13 +39,19 @@ namespace SlnMesnac.TouchSocket public static WebApiClient MESHttpClient; - public WebApiClient CreateWebApiClient(string IpHost) + public async Task CreateWebApiClientAsync(string IpHost) { - MESHttpClient = new WebApiClient(); try { + MESHttpClient = new WebApiClient(); + await MESHttpClient.SetupAsync(new TouchSocketConfig() + .SetRemoteIPHost(IpHost) + .ConfigurePlugins(a => + { + })); _logger.Info("正在连接:" + IpHost); - MESHttpClient.Connect(IpHost); + await MESHttpClient.ConnectAsync(); + Console.WriteLine("连接成功"); _logger.Info(IpHost + "连接成功"); return MESHttpClient; } @@ -83,7 +90,7 @@ namespace SlnMesnac.TouchSocket /// /// /// - public ApiResponse autoread(MesParaData requestValue) + public async Task> autoread(MesParaData requestValue) { try { @@ -91,8 +98,8 @@ namespace SlnMesnac.TouchSocket { return null; } - JToken responseValue = MESHttpClient.InvokeT("POST:/autoread", null, requestValue); - //JToken responseValue = MESHttpClient.InvokeT("POST:/ApiServer/autoread", null, requestValue); + JToken responseValue = await MESHttpClient.InvokeTAsync("POST:/autoread", null, requestValue); + _RefreshLogMessageAction?.Invoke("发送MES自动读取指令"+JsonSerializer.Serialize(requestValue)); _logger.Info("发送MES自动读取指令"+ JsonSerializer.Serialize(requestValue)); diff --git a/SlnMesnac.Rfid/RfidAbsractFactory.cs b/SlnMesnac.Rfid/RfidAbsractFactory.cs index 45f227a..b538d73 100644 --- a/SlnMesnac.Rfid/RfidAbsractFactory.cs +++ b/SlnMesnac.Rfid/RfidAbsractFactory.cs @@ -37,6 +37,8 @@ namespace SlnMesnac.Rfid public int port; public string deviceid; public string ConfigKey { get; set; } + + /// /// 异步建立连接 /// @@ -59,13 +61,10 @@ namespace SlnMesnac.Rfid /// public abstract bool GetOnlineStatus(); - public abstract void Close(); /// - /// 按时间段盘点 + /// 关闭连接 /// - /// - /// - public abstract List TimePeriodRead(int timeout = 3000); + public abstract void Close(); /// /// 使用--异步按时间段盘点 @@ -82,10 +81,28 @@ namespace SlnMesnac.Rfid /// /// public abstract Task WriteAlarmLight(int port, UInt16 Timedout); - + /// + /// 设置功率 + /// + /// 功率 + /// public abstract Task Set_Rf(int iDbi); - + /// + /// 获取功率 + /// + /// public abstract Task Get_Rf(); + /// + /// 设置过滤数据 + /// + /// 过滤数据 + /// + public abstract Task Set_FilterData(string Filter); + /// + /// 获取过滤数据 + /// + /// + public abstract Task Get_FilterData(); } } \ No newline at end of file diff --git a/SlnMesnac.Rfid/SlnMesnac.Rfid.csproj b/SlnMesnac.Rfid/SlnMesnac.Rfid.csproj index 8652722..442926b 100644 --- a/SlnMesnac.Rfid/SlnMesnac.Rfid.csproj +++ b/SlnMesnac.Rfid/SlnMesnac.Rfid.csproj @@ -5,6 +5,11 @@ enable + + + + + diff --git a/SlnMesnac.Rfid/TouchSocketSetup.cs b/SlnMesnac.Rfid/TouchSocketSetup.cs index 9a1f484..c4071e3 100644 --- a/SlnMesnac.Rfid/TouchSocketSetup.cs +++ b/SlnMesnac.Rfid/TouchSocketSetup.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Builder; using TouchSocket.Sockets; using TouchSocket.WebApi; using SlnMesnac.Config; +using System.Threading.Tasks; #region << 版 本 注 释 >> /*-------------------------------------------------------------------- @@ -37,14 +38,14 @@ namespace SlnMesnac.TouchSocket public static class TouchSocketSetup { - public static void UseTouchSocketExtensions(this IServiceProvider service) + public static async Task UseTouchSocketExtensions(this IServiceProvider service) { //var _server = app.ApplicationServices.GetService(); var _httpclient = service.GetService(); var _apiServer = service.GetService(); _apiServer.Init(); //_server.Init(6001); - _httpclient.CreateWebApiClient("172.16.0.106:9880"); + await _httpclient.CreateWebApiClientAsync("172.16.0.106:9880"); //_httpclient.CreateWebApiClient("127.0.0.1:9880"); } } diff --git a/SlnMesnac.Rfid/WebApiServer.cs b/SlnMesnac.Rfid/WebApiServer.cs index cd57a9e..f646d43 100644 --- a/SlnMesnac.Rfid/WebApiServer.cs +++ b/SlnMesnac.Rfid/WebApiServer.cs @@ -53,7 +53,7 @@ namespace SlnMesnac.TouchSocket //获取汇集软件服务端口号 string port = _real_WorkdataService.GetPort(_appConfig.StationCode); var service = new HttpService(); - service.Setup(new TouchSocketConfig() + service.SetupAsync(new TouchSocketConfig() .SetListenIPHosts(int.Parse(port)) .ConfigureContainer(a => { @@ -80,22 +80,27 @@ namespace SlnMesnac.TouchSocket }) .ConfigurePlugins(a => { - a.UseCheckClear(); + //a.UseTcpSessionCheckClear(options => + //{ + // options.CheckClearType = CheckClearType.All; + // options.Tick = TimeSpan.FromSeconds(60); + // options.OnClose = async (c, t) => + // { + // await c.CloseAsync("超时无数据"); + // }; + //}); a.Add(); a.UseWebApi() - .ConfigureConverter(converter => - { - converter.AddJsonSerializerFormatter(new Newtonsoft.Json.JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.None }); - }); + ; a.UseSwagger();//使用Swagger页面 //.UseLaunchBrowser(); a.UseDefaultHttpServicePlugin(); })); - service.Start(); + service.StartAsync(); Console.WriteLine("以下连接用于测试webApi"); Console.WriteLine($"使用:http://127.0.0.1:7789/swagger/index.html"); @@ -111,10 +116,15 @@ namespace SlnMesnac.TouchSocket internal class AuthenticationPlugin : PluginBase, IHttpPlugin { - public async Task OnHttpRequest(IHttpSocketClient client, HttpContextEventArgs e) + public async Task OnHttpRequest(HttpSessionClient client, HttpContextEventArgs e) { await e.InvokeNext(); } + + public Task OnHttpRequest(IHttpSessionClient client, HttpContextEventArgs e) + { + throw new NotImplementedException(); + } } diff --git a/SlnMesnac.WPF/SlnMesnac.WPF.csproj b/SlnMesnac.WPF/SlnMesnac.WPF.csproj index 9d616c8..dc4df9f 100644 --- a/SlnMesnac.WPF/SlnMesnac.WPF.csproj +++ b/SlnMesnac.WPF/SlnMesnac.WPF.csproj @@ -12,7 +12,6 @@ - @@ -27,7 +26,6 @@ - diff --git a/SlnMesnac.WPF/ViewModel/IndexPage/MiddleWareViewModel.cs b/SlnMesnac.WPF/ViewModel/IndexPage/MiddleWareViewModel.cs index de4c004..284e566 100644 --- a/SlnMesnac.WPF/ViewModel/IndexPage/MiddleWareViewModel.cs +++ b/SlnMesnac.WPF/ViewModel/IndexPage/MiddleWareViewModel.cs @@ -200,13 +200,13 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage { try { - //device.Close(); bool status = device.GetOnlineStatus(); if (!status) { status = await device.ConnectAsync(device.ip, device.port,device.ConfigKey); if (!status) { + device.Close(); Deviceinfo.FirstOrDefault(x => x.Deviceid == device.deviceid).IsOnline = "未连接"; } @@ -272,6 +272,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage CollectId = appConfig.StationCode, CollectState = 1, CollectTime = DateTime.Now, + EidtTime = DateTime.Now, }; sqlSugarClient.Ado.Context.CopyNew().Insertable(base_Collect_State).ExecuteCommand(); #endregion 汇集软件状态 diff --git a/SlnMesnac.WPF/appsettings.json b/SlnMesnac.WPF/appsettings.json index 45fbc93..6a45dec 100644 --- a/SlnMesnac.WPF/appsettings.json +++ b/SlnMesnac.WPF/appsettings.json @@ -72,7 +72,7 @@ "ComPort": "COM1", - "StationCode": "101" + "StationCode": "102" }, "ProductConfig": { diff --git a/SlnMesnac.WPF/cloud.ico b/SlnMesnac.WPF/cloud.ico deleted file mode 100644 index d608918e31215db3f3049527ea8f35b05f27ab95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67646 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