RFIDAutoReader.cs 2.6 KB
using log4net;
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Asa.RFID.RFIDAuto;

namespace Asa.RFID
{
    public class RFIDAutoReader
    {
        public static readonly ILog LOGGER = LogManager.GetLogger("TheRFID");

        private static Dictionary<string, RFIDAuto> rfidMap = new Dictionary<string, RFIDAuto>();

        public  static Dictionary<string, int> rfidErrorMap = new Dictionary<string, int>();

        /// <summary>
        /// 打开所有
        /// </summary>
        /// <param name="ipArr"></param>
        /// <param name="OnReceive"></param>
        /// <param name="ip"></param>
        public static void Open(Received_Event OnReceive, params string[] ipArr)
        {
            rfidErrorMap = new Dictionary<string, int>();
            foreach (var ip in ipArr)
            {
                int code = 0;
                if (rfidMap.ContainsKey(ip))
                {
                    code = rfidMap[ip].StartAutoScan(OnReceive);
                }
                else
                {
                    RFIDAuto rfid = new RFIDAuto(ip);
                    code = rfid.StartAutoScan(OnReceive);
                    rfidMap.Add(ip, rfid);
                }
                if (rfidErrorMap.ContainsKey(ip))
                {
                    rfidErrorMap.Remove(ip);
                } 
                rfidErrorMap.Add(ip, code);

                if (code.Equals(0).Equals(false))
                {
                    LogUtil.error("连接RFID【" + ip + "】ErrorCode=" + code);
                }
            }
        }

        /// <summary>
        /// 获取最后读到的标签并清理
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public static byte[] ReadAndClear(string ip)
        {
            if (rfidMap.ContainsKey(ip))
            {
                return rfidMap[ip].ReadAndClear();
            }
            return null;
        }

        /// <summary>
        /// 获取最后读到的标签
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public static byte[] Read(string ip)
        {
            if (rfidMap.ContainsKey(ip))
            {
                return rfidMap[ip].Read();
            }
            return null;
        }


        /// <summary>
        /// 关闭所有
        /// </summary>
        public static void CloseAll()
        {
            foreach(var rfid in rfidMap.Values)
            {
                rfid.StopAutoScan();
            }
        }
    }
}