| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | using Dfs.WayneChina.GilbarcoDispenserPayTerminal;using Dfs.WayneChina.GilbarcoDispenserPayTerminal.MessageEntities.Incoming;using Edge.Core.Processor;using NLog.LayoutRenderers;using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;namespace Dfs.WayneChina.GilbarcoPos{                    public class GilbarcoPosApp : IAppProcessor    {        #region IApplication implementation        public string MetaConfigName { get; set; }                private List<GilbarcoPayTerminalHandler> paymentTerminalHandlers;        private List<TerminalManager> terminalManagers;        private int _posId;        private int _interval;        private string _versionInfoList;        public VersionInfo CurrentVersionInfo { get; private set; }        #region Logger        private NLog.Logger logger = NLog.LogManager.LoadConfiguration("NLog.config").GetLogger("IPosPlusApp");        #endregion        public GilbarcoPosApp(int posId, int interval, string versionInfoList)        {            _posId = posId;            _interval = interval;            _versionInfoList = versionInfoList;            SetVersionInfo(_versionInfoList);            MetaConfigName = "GilbarcoPosApp";            paymentTerminalHandlers = new List<GilbarcoPayTerminalHandler>();            terminalManagers = new List<TerminalManager>();        }        public void Init(IEnumerable<IProcessor> processors)        {            foreach (dynamic p in processors)            {                if (p is IAppProcessor)                    continue;                var handler = p.Context.Handler;                if (handler is GilbarcoPayTerminalHandler)                {                    paymentTerminalHandlers.Add(handler);                }            }            SetupTerminalManagers();        }        public Task<bool> Start()        {            foreach (var handler in paymentTerminalHandlers)            {                logger.Info("Hooking up the terminal message event handler");                handler.OnTerminalMessageReceived += IcCardPaymentTerminalMessageReceived;            }            foreach (var terminalManager in terminalManagers)            {                terminalManager.Start();            }            return Task.FromResult(true);        }        public Task<bool> Stop()        {            foreach (var handler in paymentTerminalHandlers)            {                logger.Info("Unhooking the terminal message event handler");                handler.OnTerminalMessageReceived -= IcCardPaymentTerminalMessageReceived;            }            return Task.FromResult(true);        }        #endregion        private void SetVersionInfo(string versionInfoList)        {            var versions = versionInfoList.Split(',');            if (versions.Length == 8)            {                CurrentVersionInfo = new VersionInfo();                CurrentVersionInfo.BaseBlacklistVersion = ushort.Parse(versions[0]);                CurrentVersionInfo.AddBlacklistVersion = Convert.ToByte(versions[1]);                CurrentVersionInfo.DeleteBlacklistVersion = Convert.ToByte(versions[2]);                CurrentVersionInfo.WhitelistVersion = Convert.ToByte(versions[3]);                CurrentVersionInfo.PriceVersion = Convert.ToByte(versions[4]);                CurrentVersionInfo.StationGeneralInfoVersion = Convert.ToByte(versions[5]);                CurrentVersionInfo.PrivateDataDownloadFlag = Convert.ToByte(versions[6]);                CurrentVersionInfo.SoftwareDownloadFlag = Convert.ToByte(versions[7]);            }        }        private void IcCardPaymentTerminalMessageReceived(object sender, TerminalMessageEventArgs e)        {            HandlerTerminalMessage(e);        }        private void HandlerTerminalMessage(TerminalMessageEventArgs messageEventArgs)        {            var currentTerminalManager = terminalManagers.FirstOrDefault(m => m.PumpId == messageEventArgs.PumpId);            if (currentTerminalManager != null)            {                if (messageEventArgs.Message is InfoCommand)                {                    currentTerminalManager.HandleInfoCommand((InfoCommand)messageEventArgs.Message);                }                else if (messageEventArgs.Message is TransactionData)                {                    currentTerminalManager.HandleTransactionData((TransactionData)messageEventArgs.Message);                }            }        }        #region Set up terminals        private void SetupTerminalManagers()        {            foreach (var handler in paymentTerminalHandlers)            {                var terminalManager = new TerminalManager(this, handler, _interval);                if (!terminalManagers.Contains(terminalManager))                    terminalManagers.Add(terminalManager);            }        }        #endregion    }}
 |