Class2.cs 4.0 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Asa.RFID
{
    /// <summary>
    /// 读取所有RFID
    /// </summary>
    public class ReadAll2 : IReadAll
    {
        private HiStation[] _device;
        private Dictionary<string, string> _id;  //RFID编号
        private string _logName;

        public event IReadAll.ReceivedEvent Received;
        public event IReadAll.ReceiveBufferEvent ReceiveBuffer;


        /// <summary>
        /// 读取所有RFID
        /// </summary>
        /// <param name="logName">日志名称</param>
        public ReadAll2(string logName = "HFReader")
        {
            _logName = logName;
            _id = new Dictionary<string, string>();
            if (Common.log == null)
                Common.log = log4net.LogManager.GetLogger(logName);
        }

        public void Start(int port)
        {
        }

        /// <summary>
        /// 开启
        /// </summary>
        /// <param name="ip"></param>
        public void Start(string[] ip)
        {
            try
            {
                _id.Clear();
                _device = new HiStation[ip.Length];
                for (int i = 0; i < _device.Length; i++)
                {
                    _id.Add(ip[i], "000");
                    _device[i] = new HiStation(_logName) { IP = ip[i] };
                    _device[i].Connected += ReadAll_Connected;
                    _device[i].Received += ReadAll_Received;
                    _device[i].Open();
                }

                Common.log.Info("Server Start");
            }
            catch (Exception ex)
            {
                Common.log.Error("Start", ex);
            }
        }

        /// <summary>
        /// 停止
        /// </summary>
        public void Stop()
        {
            if (_device != null)
            {
                for (int i = 0; i < _device.Length; i++)
                {
                    try
                    {
                        _device[i].TriggerMode(false);
                        System.Threading.Thread.Sleep(50);
                        _device[i].Close();
                    }
                    catch (Exception ex)
                    {
                        Common.log.Error("Stop", ex);
                    }
                }
            }
            _device = null;
            Common.log.Info("Server Stop");

        }

        /// <summary>
        /// 读取ID号
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public string Read(string ip)
        {
            if (_id.TryGetValue(ip, out string value))
            {
                Common.log.Info("[" + ip + "]Read " + value);
                return value;
            }
            else
            {
                Common.log.Info("[" + ip + "]Read 没有找到");
                return "000";
            }
        }

        /// <summary>
        /// 清除缓存
        /// </summary>
        /// <param name="ip"></param>
        public void Clear(string ip)
        {
            if (_id.ContainsKey(ip))
            {
                _id[ip] = "000";
                Common.log.Info("[" + ip + "]Clear");
            }
            else
            {
                Common.log.Info("[" + ip + "]Clear 没有找到");
            }

        }



        private void ReadAll_Connected(string ip)
        {
            int index = -1;
            foreach (var ss in _id.Keys)
            {
                index++;
                if (ss == ip)
                    break;
            }
            if (index != -1)
                _device[index].TriggerMode(true);

        }

        private void ReadAll_Received(string ip, string uid, string data)
        {
            Common.log.Debug("Received IP=" + ip + " uid=" + uid + " data=" + data);

            if (_id[ip] == data)
            {
            }
            else
            {
                _id[ip] = data;
                Received?.Invoke(ip, data);
            }
        }

    }
}