GilbarcoPayTerminalHandler.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Dfs.WayneChina.GilbarcoDispenserPayTerminal.MessageEntities;
  2. using Edge.Core.IndustryStandardInterface.Pump;
  3. using Edge.Core.Processor;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using Wayne.FDCPOSLibrary;
  10. namespace Dfs.WayneChina.GilbarcoDispenserPayTerminal
  11. {
  12. public class GilbarcoPayTerminalHandler : IEnumerable<IFdcPumpController>, IDeviceHandler<byte[], CardMessageBase>
  13. {
  14. public byte PumpId { get; set; }
  15. private IContext<byte[], CardMessageBase> _context;
  16. public event EventHandler<TerminalMessageEventArgs> OnTerminalMessageReceived;
  17. private GilbarcoPumpHandler pumpHandler;
  18. public byte Address { get; }
  19. public byte TerminalAddress { get; }
  20. private List<GilbarcoPumpHandler> pumpHandlers = new List<GilbarcoPumpHandler>();
  21. #region Logger
  22. private static NLog.Logger logger = NLog.LogManager.LoadConfiguration("NLog.config").GetLogger("IPosPlusApp");
  23. #endregion
  24. public GilbarcoPayTerminalHandler(int pumpId, int address, int terminalAddress)
  25. {
  26. PumpId = Convert.ToByte(pumpId);
  27. Address = Convert.ToByte(address);
  28. TerminalAddress = Convert.ToByte(terminalAddress);
  29. pumpHandler = new GilbarcoPumpHandler(pumpId);
  30. pumpHandlers = new List<GilbarcoPumpHandler>();
  31. pumpHandlers.Add(pumpHandler);
  32. }
  33. public void Init(IContext<byte[], CardMessageBase> context)
  34. {
  35. _context = context;
  36. }
  37. public Task Process(IContext<byte[], CardMessageBase> context)
  38. {
  39. OnTerminalMessageReceived.Invoke(this, new TerminalMessageEventArgs(PumpId, context.Incoming.Message));
  40. return Task.CompletedTask;
  41. }
  42. public void Write(CardMessageBase cardMessage)
  43. {
  44. _context.Outgoing.Write(cardMessage);
  45. }
  46. public async Task<CardMessageBase> WriteAsync(CardMessageBase request,
  47. Func<CardMessageBase, CardMessageBase, bool> responseCapture,
  48. int timeout)
  49. {
  50. var resp = await _context.Outgoing.WriteAsync(request, responseCapture, timeout);
  51. return resp;
  52. }
  53. public void UpdatePumpState(LogicalDeviceState state)
  54. {
  55. logger.Info($"Update pump {PumpId} state, {state}");
  56. pumpHandler.FirePumpStateChange(state);
  57. }
  58. public void UpdateFuelingStatus(FdcTransaction fdcTransaction)
  59. {
  60. logger.Info($"Update pump {PumpId} fueling status");
  61. pumpHandler.FireFuelingStatusChange(fdcTransaction);
  62. }
  63. public IEnumerator<IFdcPumpController> GetEnumerator()
  64. {
  65. return pumpHandlers.GetEnumerator();
  66. }
  67. IEnumerator IEnumerable.GetEnumerator()
  68. {
  69. return pumpHandlers.GetEnumerator();
  70. }
  71. IEnumerator<IFdcPumpController> IEnumerable<IFdcPumpController>.GetEnumerator()
  72. {
  73. return pumpHandlers.GetEnumerator();
  74. }
  75. }
  76. }