DLScanSocket.cs 5.6 KB
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    public class DLScanSocket
    {    /// <summary>
         /// 扫码枪链接
         /// </summary>
        private TcpClient scannerSocket;
        /// <summary>
        /// 扫描枪 是否开始运行
        /// </summary>
        private bool isScannerRun = false;
        private string ScannerIP = "";
        private int ScannerPort = 0;
        public delegate void  OnCodeRevice(string[] codeList);
        public event OnCodeRevice CodeReviceEvent;
        public DLScanSocket(string serverIp, int port,OnCodeRevice revicePro)
        {
            this.ScannerIP = serverIp;
            this.ScannerPort = port;
            this.CodeReviceEvent += revicePro;
        }
        /// <summary>
        /// 开启扫码枪
        /// </summary> 
        public bool StartConnect(  bool isMustCon = false)
        {
            bool result = true;
            try
            {
                if (!isScannerRun || isMustCon)
                {
                    if (scannerSocket == null)
                    {
                        scannerSocket = new TcpClient();
                    }
                    result = scannerSocket.connect(ScannerIP, ScannerPort, new TcpClient.HandleMessage(onCodeReceived));
                    if (result)
                    {
                        isScannerRun = true;
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:" + ex);
            }
            return result;
        }
        public void TimerCheck()
        { 
            if (!scannerSocket.IsConnected()) 
            {
                StartConnect( true);
                LogUtil.info( "重新连接扫码枪【" + ScannerIP + "】 ");
            }
        }
        /// <summary>
        /// 停止扫码枪
        /// </summary>
        public void Close()
        {
            try
            {
                scannerSocket.close();
                isScannerRun = false;
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:" + ex);
            }
        }
        /// <summary>
        /// 发送扫码命令开始扫码
        /// </summary> 
        public void BeginScan()
        {
            try
            {
                string str = ConfigAppSettings.GetValue(Setting_Init.scanner_start_command);
                scannerSocket.send(str);
            }
            catch (Exception ex)
            {
                LogUtil.error("【" + ScannerIP + "】开始扫码错误:" + ex.ToString());
            }
        }


        public  string spiltStr = "##";
        /// <summary>
        /// 扫码枪数据接收
        /// </summary>
        /// <param name="message"></param>
        protected virtual void  onCodeReceived(string message)
        {
            try
            {
                //message = message.Replace("\r", "");
                //message = message.Replace("\n", "");
                //char a = (char)02;
                //message = message.Replace(a.ToString(), "");
                //message = message.Trim();
                //if (!string.IsNullOrEmpty(message))
                //{
                //    LogUtil.info("收到DL数据<< \n" + message);
                //}
                //else
                //{
                //    LogUtil.error("没有收到二维码信息,请重新放入料盘");
                //    return;
                //}
                message = message.Trim();
                message = message.Replace("\r", "");
                message = message.Replace("\n", "");
                char a = (char)02;
                message = message.Replace(a.ToString(), "");
                message = message.Trim();
                System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                byte[] bytes = asciiEncoding.GetBytes(message);
                List<byte> newBytes = new List<byte>();
                foreach (byte by in bytes)
                {
                    if (!by.Equals(24))
                    {
                        newBytes.Add(by);
                    }
                }
                message = asciiEncoding.GetString(newBytes.ToArray());
               string[] codeList = message.Split(new string[] { spiltStr},StringSplitOptions.RemoveEmptyEntries);
                CodeReviceEvent?.Invoke(codeList);
             //   return message;
            }
            catch (Exception ex)
            {
                LogUtil.error(ex.ToString());
            }
        }

        /// <summary>
        /// 处理接收后的二维码
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public static string ReplaceCode(string message)
        {
            message = message.Trim();
            message = message.Replace("\r", "");
            message = message.Replace("\n", "");
            char a = (char)02;
            message = message.Replace(a.ToString(), "");
            message = message.Trim();
            System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
            byte[] bytes = asciiEncoding.GetBytes(message);
            List<byte> newBytes = new List<byte>();
            foreach (byte by in bytes)
            {
                if (!by.Equals(24))
                {
                    newBytes.Add(by);
                }
            }
            message = asciiEncoding.GetString(newBytes.ToArray());

            return message;
        }

    }
}