using System; using System.Collections.Generic; using Wayne.Lib; using Wayne.Lib.StateEngine; using Wayne.Lib.StateEngine.Generic; namespace SinochemInternetPlusApp.States.CarPlateMode { class DisableICCardReader : TimeoutState<FuelingPoint> { private byte sqNo; protected override void Enter(StateEntry stateEntry, ref Transition transition) { base.Enter(stateEntry, ref transition); //transition = new Transition(this, TransitionType.ICCardReaderDisabled); //return; Main.CloseICCardReader(out sqNo); } protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition) { GenericEvent<CardReaderAckEventArgs> ackEvent = stateEngineEvent as GenericEvent<CardReaderAckEventArgs>; if (ackEvent != null && ackEvent.EventArgs != null) { if (ackEvent.EventArgs.Ack.MessageSeqNumber == sqNo) { DebugLog($"Ack for previous req arrived, SqNo: {sqNo}"); Main.CardReaderDisabled = true; ackEvent.Handled = true; transition = new Transition(this, TransitionType.ICCardReaderDisabled); } else { DebugLog($"SqNo not matched, Sent: {sqNo}, Received: {ackEvent.EventArgs.Ack.MessageSeqNumber}"); Main.CardReaderDisabled = true; ackEvent.Handled = true; transition = new Transition(this, TransitionType.ICCardReaderDisabled); } } } protected override void Timeout(ref Transition transition) { transition = new Transition(this, TransitionType.Timeout); } protected override int TimeoutInterval => TimeoutValues.GetValueInMilliSec(TimeoutValues.FuelingPoint.CarPlateMode_DisableICCardReader, 10); } }