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); } } }