DLScanSocket.cs 5.3 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>
        public bool isScannerRun = false;
        private string ScannerIP = "";
        private int ScannerPort = 0;
        public delegate void  OnCodeRevice(string src,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)
        {
            if (ScannerIP.Length<4)
                return 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;
                    }
                    LogUtil.error("datalogic Connect:" + result);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:" + ex);
            }
            return result;
        }
        //public void TimerCheck()
        //{ 
        //    if (!scannerSocket.IsConnected()) 
        //    {
        //        StartConnect( false );
        //        LogUtil.info( "重新连接扫码枪【" + ScannerIP + "】 ");
        //    }
        //}
        /// <summary>
        /// 停止扫码枪
        /// </summary>
        public void Close()
        {
            try
            {
                if (scannerSocket != null)
                {
                    scannerSocket.close();
                }
                isScannerRun = false;
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:" + ex);
            }
        }
        /// <summary>
        /// 发送扫码命令开始扫码
        /// </summary> 
        public bool BeginScan()
        {
            if (!isScannerRun)
                return false;
            try
            {
                string str = ConfigAppSettings.GetValue(Setting_Init.StartScan_CMD);
                scannerSocket.send(str);
            }
            catch (Exception ex)
            {
                LogUtil.error("【" + ScannerIP + "】开始扫码错误:" + ex.ToString());
            }
            return true;
        }


        public  string spiltStr = "##";
        /// <summary>
        /// 扫码枪数据接收
        /// </summary>
        /// <param name="message"></param>
        protected virtual 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("datalogic",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;
        }

    }
}