1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Wayne.Lib.StateEngine;
- namespace SinochemInternetPlusApp.States.ICCardMode
- {
- static class CONFIGURATION
- {
- // make sure entry point is Init, and exit point is Final
- public static void Config(StateTransitionLookup sl)
- {
- sl.AddTransition<Init, WaitForCardData>(TransitionType.Init);
- ////IC卡外部验证
- sl.AddTransition<WaitForCardData, CheckCardBalance>(TransitionType.Done);
- sl.AddTransition<WaitForCardData, Error>(TransitionType.Abort);
- sl.AddTransition<WaitForCardData, HandleExternalCheckFailure>(TransitionType.Error);
- sl.AddTransition<WaitForCardData, HandleUserTimeout>(TransitionType.Timeout);
- sl.AddTransition<HandleUserTimeout, HandleExternalCheckFailure>(TransitionType.Done);
- sl.AddTransition<HandleUserTimeout, HandleExternalCheckFailure>(TransitionType.Timeout);
- sl.AddTransition<HandleExternalCheckFailure, Error>(TransitionType.Done);
- sl.AddTransition<HandleExternalCheckFailure, Error>(TransitionType.Timeout);
- ////查询IC卡余额
- sl.AddTransition<CheckCardBalance, SendCardBalanceToCardReader>(TransitionType.CloudBalanceOk);
- sl.AddTransition<CheckCardBalance, AbortTransaction>(TransitionType.CloudBalanceFailed);
- sl.AddTransition<AbortTransaction, WaitForCardEject>(TransitionType.Done);
- sl.AddTransition<AbortTransaction, Error>(TransitionType.Timeout);
- ////返回卡余额给读卡器
- sl.AddTransition<SendCardBalanceToCardReader, WaitForFueling>(TransitionType.Done);
- sl.AddTransition<SendCardBalanceToCardReader, Error>(TransitionType.Timeout);
- ////等待加油
- sl.AddTransition<WaitForFueling, Shared.AuthorizePump>(TransitionType.NozzleLifted);
- sl.AddTransition<WaitForFueling, Error>(TransitionType.Abort);
- sl.AddTransition<WaitForFueling, Error>(TransitionType.Timeout);
- ////授权油机
- sl.AddTransition<Shared.AuthorizePump, Shared.Fueling>(TransitionType.PumpAuthOk);
- sl.AddTransition<Shared.AuthorizePump, AbortAndEjectCard>(TransitionType.PumpAuthFailed);
- sl.AddTransition<Shared.AuthorizePump, AbortAndEjectCard>(TransitionType.Timeout);
- sl.AddTransition<AbortAndEjectCard, WaitForCardEject>(TransitionType.Done);
- ////加油中
- sl.AddTransition<Shared.Fueling, Shared.WaitForPayableTrx>(TransitionType.NozzleReplaced);
- ////等待“待支付交易”
- sl.AddTransition<Shared.WaitForPayableTrx, SendCalculateMacRequest>(TransitionType.FuelingDone);
- sl.AddTransition<Shared.WaitForPayableTrx, SendPaymentResult>(TransitionType.Timeout);
- ////计算MAC
- sl.AddTransition<SendCalculateMacRequest, WaitForMacData>(TransitionType.Done);
- sl.AddTransition<SendCalculateMacRequest, WaitForMacData>(TransitionType.Timeout);
- sl.AddTransition<WaitForMacData, Shared.PayTrx>(TransitionType.Done);
- sl.AddTransition<WaitForMacData, Shared.PayTrx>(TransitionType.Timeout); // rarely happen
- ////向中化云发送IC卡扣款
- sl.AddTransition<Shared.PayTrx, Shared.NotifyPOS>(TransitionType.CloudPaymentOk);
- sl.AddTransition<Shared.PayTrx, SendPaymentResult>(TransitionType.CloudPaymentFailed);
- sl.AddTransition<Shared.NotifyPOS, SendPaymentResult>(TransitionType.PosNotifyOk);
- sl.AddTransition<Shared.NotifyPOS, SendPaymentResult>(TransitionType.PosNotifyFailed);
- ////通知读卡器扣款结果
- sl.AddTransition<SendPaymentResult, Shared.PrintReceipt>(TransitionType.Done);
- sl.AddTransition<SendPaymentResult, WaitForCardEject>(TransitionType.Timeout);
- ////打印小票
- sl.AddTransition<Shared.PrintReceipt, Shared.WaitForPrinterIdle>(TransitionType.Abort);
- sl.AddTransition<Shared.WaitForPrinterIdle, Shared.PrintReceipt>(TransitionType.Timeout);
- sl.AddTransition<Shared.WaitForPrinterIdle, Shared.PrintReceipt>(TransitionType.Done);
- sl.AddTransition<Shared.PrintReceipt, Shared.PrintReceipt>(TransitionType.Next);
- sl.AddTransition<Shared.PrintReceipt, WaitForCardEject>(TransitionType.Done);
- sl.AddTransition<Shared.PrintReceipt, Error>(TransitionType.Timeout);
- ////退卡
- sl.AddTransition<WaitForCardEject, Final>(TransitionType.Done);
- sl.AddTransition<WaitForCardEject, Final>(TransitionType.Timeout);
- sl.AddTransition<Error, Final>(TransitionType.Done);
- sl.AddTransition<AnyState, Final>(BasicTransitionType.Error);
- }
- }
- }
|