CONFIGURATION.cs 4.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Wayne.Lib.StateEngine;
  5. namespace SinochemInternetPlusApp.States.ICCardMode
  6. {
  7. static class CONFIGURATION
  8. {
  9. // make sure entry point is Init, and exit point is Final
  10. public static void Config(StateTransitionLookup sl)
  11. {
  12. sl.AddTransition<Init, WaitForCardData>(TransitionType.Init);
  13. ////IC卡外部验证
  14. sl.AddTransition<WaitForCardData, CheckCardBalance>(TransitionType.Done);
  15. sl.AddTransition<WaitForCardData, Error>(TransitionType.Abort);
  16. sl.AddTransition<WaitForCardData, HandleExternalCheckFailure>(TransitionType.Error);
  17. sl.AddTransition<WaitForCardData, HandleUserTimeout>(TransitionType.Timeout);
  18. sl.AddTransition<HandleUserTimeout, HandleExternalCheckFailure>(TransitionType.Done);
  19. sl.AddTransition<HandleUserTimeout, HandleExternalCheckFailure>(TransitionType.Timeout);
  20. sl.AddTransition<HandleExternalCheckFailure, Error>(TransitionType.Done);
  21. sl.AddTransition<HandleExternalCheckFailure, Error>(TransitionType.Timeout);
  22. ////查询IC卡余额
  23. sl.AddTransition<CheckCardBalance, SendCardBalanceToCardReader>(TransitionType.CloudBalanceOk);
  24. sl.AddTransition<CheckCardBalance, AbortTransaction>(TransitionType.CloudBalanceFailed);
  25. sl.AddTransition<AbortTransaction, WaitForCardEject>(TransitionType.Done);
  26. sl.AddTransition<AbortTransaction, Error>(TransitionType.Timeout);
  27. ////返回卡余额给读卡器
  28. sl.AddTransition<SendCardBalanceToCardReader, WaitForFueling>(TransitionType.Done);
  29. sl.AddTransition<SendCardBalanceToCardReader, Error>(TransitionType.Timeout);
  30. ////等待加油
  31. sl.AddTransition<WaitForFueling, Shared.AuthorizePump>(TransitionType.NozzleLifted);
  32. sl.AddTransition<WaitForFueling, Error>(TransitionType.Abort);
  33. sl.AddTransition<WaitForFueling, Error>(TransitionType.Timeout);
  34. ////授权油机
  35. sl.AddTransition<Shared.AuthorizePump, Shared.Fueling>(TransitionType.PumpAuthOk);
  36. sl.AddTransition<Shared.AuthorizePump, AbortAndEjectCard>(TransitionType.PumpAuthFailed);
  37. sl.AddTransition<Shared.AuthorizePump, AbortAndEjectCard>(TransitionType.Timeout);
  38. sl.AddTransition<AbortAndEjectCard, WaitForCardEject>(TransitionType.Done);
  39. ////加油中
  40. sl.AddTransition<Shared.Fueling, Shared.WaitForPayableTrx>(TransitionType.NozzleReplaced);
  41. ////等待“待支付交易”
  42. sl.AddTransition<Shared.WaitForPayableTrx, SendCalculateMacRequest>(TransitionType.FuelingDone);
  43. sl.AddTransition<Shared.WaitForPayableTrx, SendPaymentResult>(TransitionType.Timeout);
  44. ////计算MAC
  45. sl.AddTransition<SendCalculateMacRequest, WaitForMacData>(TransitionType.Done);
  46. sl.AddTransition<SendCalculateMacRequest, WaitForMacData>(TransitionType.Timeout);
  47. sl.AddTransition<WaitForMacData, Shared.PayTrx>(TransitionType.Done);
  48. sl.AddTransition<WaitForMacData, Shared.PayTrx>(TransitionType.Timeout); // rarely happen
  49. ////向中化云发送IC卡扣款
  50. sl.AddTransition<Shared.PayTrx, Shared.NotifyPOS>(TransitionType.CloudPaymentOk);
  51. sl.AddTransition<Shared.PayTrx, SendPaymentResult>(TransitionType.CloudPaymentFailed);
  52. sl.AddTransition<Shared.NotifyPOS, SendPaymentResult>(TransitionType.PosNotifyOk);
  53. sl.AddTransition<Shared.NotifyPOS, SendPaymentResult>(TransitionType.PosNotifyFailed);
  54. ////通知读卡器扣款结果
  55. sl.AddTransition<SendPaymentResult, Shared.PrintReceipt>(TransitionType.Done);
  56. sl.AddTransition<SendPaymentResult, WaitForCardEject>(TransitionType.Timeout);
  57. ////打印小票
  58. sl.AddTransition<Shared.PrintReceipt, Shared.WaitForPrinterIdle>(TransitionType.Abort);
  59. sl.AddTransition<Shared.WaitForPrinterIdle, Shared.PrintReceipt>(TransitionType.Timeout);
  60. sl.AddTransition<Shared.WaitForPrinterIdle, Shared.PrintReceipt>(TransitionType.Done);
  61. sl.AddTransition<Shared.PrintReceipt, Shared.PrintReceipt>(TransitionType.Next);
  62. sl.AddTransition<Shared.PrintReceipt, WaitForCardEject>(TransitionType.Done);
  63. sl.AddTransition<Shared.PrintReceipt, Error>(TransitionType.Timeout);
  64. ////退卡
  65. sl.AddTransition<WaitForCardEject, Final>(TransitionType.Done);
  66. sl.AddTransition<WaitForCardEject, Final>(TransitionType.Timeout);
  67. sl.AddTransition<Error, Final>(TransitionType.Done);
  68. sl.AddTransition<AnyState, Final>(BasicTransitionType.Error);
  69. }
  70. }
  71. }