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
- {
- /// <summary>
- /// A POS like component against ChangGi (Gilbarco China) dispenser with Sinopec IC card protocol.
- /// 长吉加油机带中石化卡机联动协议的后台类POS模块。
- /// </summary>
- 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
- }
- }
|