using Dfs.WayneChina.GilbarcoDispenserPayTerminal.MessageEntities; using Edge.Core.IndustryStandardInterface.Pump; using Edge.Core.Processor; using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Wayne.FDCPOSLibrary; namespace Dfs.WayneChina.GilbarcoDispenserPayTerminal { public class GilbarcoPayTerminalHandler : IEnumerable, IDeviceHandler { public byte PumpId { get; set; } private IContext _context; public event EventHandler OnTerminalMessageReceived; private GilbarcoPumpHandler pumpHandler; public byte Address { get; } public byte TerminalAddress { get; } private List pumpHandlers = new List(); #region Logger private static NLog.Logger logger = NLog.LogManager.LoadConfiguration("NLog.config").GetLogger("IPosPlusApp"); #endregion public GilbarcoPayTerminalHandler(int pumpId, int address, int terminalAddress) { PumpId = Convert.ToByte(pumpId); Address = Convert.ToByte(address); TerminalAddress = Convert.ToByte(terminalAddress); pumpHandler = new GilbarcoPumpHandler(pumpId); pumpHandlers = new List(); pumpHandlers.Add(pumpHandler); } public void Init(IContext context) { _context = context; } public Task Process(IContext context) { OnTerminalMessageReceived.Invoke(this, new TerminalMessageEventArgs(PumpId, context.Incoming.Message)); return Task.CompletedTask; } public void Write(CardMessageBase cardMessage) { _context.Outgoing.Write(cardMessage); } public async Task WriteAsync(CardMessageBase request, Func responseCapture, int timeout) { var resp = await _context.Outgoing.WriteAsync(request, responseCapture, timeout); return resp; } public void UpdatePumpState(LogicalDeviceState state) { logger.Info($"Update pump {PumpId} state, {state}"); pumpHandler.FirePumpStateChange(state); } public void UpdateFuelingStatus(FdcTransaction fdcTransaction) { logger.Info($"Update pump {PumpId} fueling status"); pumpHandler.FireFuelingStatusChange(fdcTransaction); } public IEnumerator GetEnumerator() { return pumpHandlers.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return pumpHandlers.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return pumpHandlers.GetEnumerator(); } } }