DisableICCardReader.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Collections.Generic;
  3. using Wayne.Lib;
  4. using Wayne.Lib.StateEngine;
  5. using Wayne.Lib.StateEngine.Generic;
  6. namespace SinochemInternetPlusApp.States.CarPlateMode
  7. {
  8. class DisableICCardReader : TimeoutState<FuelingPoint>
  9. {
  10. private byte sqNo;
  11. protected override void Enter(StateEntry stateEntry, ref Transition transition)
  12. {
  13. base.Enter(stateEntry, ref transition);
  14. //transition = new Transition(this, TransitionType.ICCardReaderDisabled);
  15. //return;
  16. Main.CloseICCardReader(out sqNo);
  17. }
  18. protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
  19. {
  20. GenericEvent<CardReaderAckEventArgs> ackEvent = stateEngineEvent as GenericEvent<CardReaderAckEventArgs>;
  21. if (ackEvent != null && ackEvent.EventArgs != null)
  22. {
  23. if (ackEvent.EventArgs.Ack.MessageSeqNumber == sqNo)
  24. {
  25. DebugLog($"Ack for previous req arrived, SqNo: {sqNo}");
  26. Main.CardReaderDisabled = true;
  27. ackEvent.Handled = true;
  28. transition = new Transition(this, TransitionType.ICCardReaderDisabled);
  29. }
  30. else
  31. {
  32. DebugLog($"SqNo not matched, Sent: {sqNo}, Received: {ackEvent.EventArgs.Ack.MessageSeqNumber}");
  33. Main.CardReaderDisabled = true;
  34. ackEvent.Handled = true;
  35. transition = new Transition(this, TransitionType.ICCardReaderDisabled);
  36. }
  37. }
  38. }
  39. protected override void Timeout(ref Transition transition)
  40. {
  41. transition = new Transition(this, TransitionType.Timeout);
  42. }
  43. protected override int TimeoutInterval =>
  44. TimeoutValues.GetValueInMilliSec(TimeoutValues.FuelingPoint.CarPlateMode_DisableICCardReader, 10);
  45. }
  46. }