DLScanSocket.cs 4.5 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: ScanManager
    {   
        /// <summary>
         /// 扫码枪链接
         /// </summary>
        private TcpClient scannerSocket;
        /// <summary>
        /// 扫描枪 是否开始运行
        /// </summary>
        private bool isScannerRun = false;
        private string ScannerIP = "";
        private int ScannerPort = 0;

        public event OnCodeRevice CodeReviceEvent;
        public DLScanSocket(string serverIp, int port,OnCodeRevice revicePro)
        {
            this.ScannerIP = serverIp;
            this.ScannerPort = port;
            this.CodeReviceEvent += revicePro;
        }
        /// <summary>
        /// 开启扫码枪
        /// </summary> 
        public override  bool StartConnect(  bool isMustCon = false)
        {
            bool result = true;
            try
            {
                if (!isScannerRun || isMustCon)
                {
                    if (scannerSocket == null)
                    {
                        scannerSocket = new TcpClient();
                    }
                    result = scannerSocket.StartConnect(ScannerIP, ScannerPort, new TcpClient.HandleMessage(onCodeReceived),2000);
                    if (result)
                    {
                        isScannerRun = true;
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:" + ex);
            }
            return result;
        }
       
        public override void Close()
        {
            try
            {
                scannerSocket.close();
                isScannerRun = false;
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:" + ex);
            }
        }
 
        public override void BeginScan()
        {
            try
            { 
                scannerSocket.send(StoreManager.Config.StartScan_CMD);
            }
            catch (Exception ex)
            {
                LogUtil.error("【" + ScannerIP + "】开始扫码错误:" + ex.ToString());
            }
        }

        /// <summary>
        /// 扫码枪数据接收
        /// </summary>
        /// <param name="message"></param>
        protected   void  onCodeReceived(string message)
        {
            try
            { 
                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;
        }

    }
}