123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- using ProjectBase.Data.BaseDAL;
- using ProjectBase.Data.Logs;
- using SIMDP.BLL;
- using System;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Timers;
- namespace SIMDP.Device
- {
- public class RecvScanner
- {
- Socket socketScanner = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- System.Timers.Timer timerScanner = null;
- IPEndPoint epServer = null;
- string address = "";
- bool running = false;
- Action<string> receiveAct = null;
- public RecvScanner(double interval = 1000)
- {
- socketScanner.Blocking = true;
- timerScanner = new System.Timers.Timer(interval);
- timerScanner.AutoReset = false;
- timerScanner.Elapsed += ReceiveScanner;
- }
- /// <summary>
- /// 启动扫码枪接收线程
- /// </summary>
- /// <param name="Ip"></param>
- /// <param name="Port"></param>
- public void Start(string Ip, int Port, Action<string> action)
- {
- if (running)
- {
- LogHelper.log.Error($"接收扫码器({address})正在运行中,无法重复启动({Ip})");
- return;
- }
- address = $"{Ip}:{Port.ToString()}";
- LogHelper.log.Info($"接收扫码器({address})启动");
- epServer = new IPEndPoint(IPAddress.Parse(Ip), Port);
- receiveAct = action;
- running = true;
- timerScanner.Start();
- }
- public void Stop()
- {
- running = false;
- }
- private void ReceiveScanner(object sender, ElapsedEventArgs e)
- {
- if (!socketScanner.Connected)
- {
- try
- {
- socketScanner.Connect(epServer);
- LogHelper.log.Info($"接收扫码器({address})已连接,开始接收数据...");
- }
- catch
- {
- }
- }
- else
- {
- TryReceive();
- }
- if (running)
- timerScanner.Start();
- }
- private void TryReceive()
- {
- string data = "";
- try
- {
- byte[] temp = new byte[1024];
- while (socketScanner.Poll(2000, SelectMode.SelectRead))
- {
- int nRead = socketScanner.Receive(temp);
- if (nRead == 0)
- {
- LogHelper.log.Warn($"接收扫码器({address})通信断开,自动重连...");
- socketScanner.Close();
- return;
- }
- data += Encoding.UTF8.GetString(temp, 0, nRead).Trim('\n').Trim('\r');
- }
- }
- catch (Exception ex)
- {
- socketScanner.Close();
- LogHelper.log.Error($"接收扫码器({address})数据发生异常:{ex}");
- //Tool.LogAndNotice("生产过程报警", 3, $"接收扫码器({address})数据发生异常:{ex}");
- }
- if (data.Length > 0) // 收到数据后执行动作
- {
- receiveAct(data);
- }
- }
- }
- }
|