using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Wayne.Lib.StateEngine; using Wayne.Lib.StateEngine.Generic; using WayneChina_IcCardReader_SinoChem.MessageEntity.Incoming; namespace SinochemInternetPlusApp.States.ICCardMode { internal class WaitForFueling : TimeoutState { protected override void Enter(StateEntry stateEntry, ref Transition transition) { base.Enter(stateEntry, ref transition); Main.CurrentEpsTrx.UpdateTrxStatusToDb(EpsTrxStatus.BeforeFueling); } protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition) { 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("What? Card ejected when waiting for nozzole lift? Fuck, man!"); readerEvent.Handled = true; transition = new Transition(this, TransitionType.Abort); } } } else if (stateEngineEvent.Type is EventType) { switch ((EventType)stateEngineEvent.Type) { case EventType.NozzleLifted: var nlEvent = stateEngineEvent as GenericEvent; Main.CurrentNozzleId = nlEvent.EventArgs.NozzleId; //Update the nozzle id for trx when it's known Main.CurrentEpsTrx.Model.jihao = Main.CurrentNozzleId; Main.CurrentEpsTrx.SaveToDb(); transition = new Transition(this, TransitionType.NozzleLifted); stateEngineEvent.Handled = true; break; } } } protected override void Timeout(ref Transition transition) { transition = new Transition(this, TransitionType.Timeout); } protected override int TimeoutInterval => TimeoutValues.GetValueInMilliSec(TimeoutValues.FuelingPoint.Shared_WaitForFueling, 30 * 60); } }