using Wayne.Lib.StateEngine; using Wayne.Lib.StateEngine.Generic; using WayneChina_IcCardReader_SinoChem.MessageEntity.Incoming; namespace SinochemInternetPlusApp.States.ICCardMode { public class WaitForCardData : TimeoutState { protected override void Enter(StateEntry stateEntry, ref Transition transition) { base.Enter(stateEntry, ref transition); } protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition) { if (stateEngineEvent.Type.Equals(EventType.OnlineVerification)) { GenericEvent genericEvent = stateEngineEvent as GenericEvent; if (genericEvent != null && genericEvent.EventArgs != null) { genericEvent.Handled = true; Main.OnlineVerificationRequest = genericEvent.EventArgs.OnlineVerificationRequest; transition = new Transition(this, TransitionType.Done); } } else if (stateEngineEvent.Type.Equals(EventType.ReaderStateChanged)) { GenericEvent readerEvent = stateEngineEvent as GenericEvent; if (readerEvent != null && readerEvent.EventArgs != null) { if (readerEvent.EventArgs.CardReaderState.State == CardReaderState.Idle) { DebugLog("User aborts card processing before PIN"); readerEvent.Handled = true; transition = new Transition(this, TransitionType.Abort); } } } else if (stateEngineEvent.Type.Equals(EventType.ExternalCheckFailure)) { GenericEvent e = stateEngineEvent as GenericEvent; if (e != null && e.EventArgs != null) { //可能为:1、外部验证错误,2:PIN验证错误 DebugLog($"Error type: {e.EventArgs.ExternalCheckErrorRequest.ErrorType.ToString()}"); e.Handled = true; transition = new Transition(this, TransitionType.Error); } } } protected override void Timeout(ref Transition transition) { transition = new Transition(this, TransitionType.Timeout); } protected override int TimeoutInterval => TimeoutValues.GetValueInMilliSec(TimeoutValues.FuelingPoint.ICCardMode_WaitForCardData, 15); } }