123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Wayne.Lib;
- using Wayne.Lib.StateEngine;
- using Wayne.Lib.StateEngine.Generic;
- namespace SinochemInternetPlusApp.States.CarPlateMode
- {
- public class WaitForFueling : TimeoutState<FuelingPoint>
- {
- private byte sqNo;
- private bool cardReaderBackToIdle = false;
- private bool nozzleLifted = false;
- protected override void Enter(StateEntry stateEntry, ref Transition transition)
- {
- base.Enter(stateEntry, ref transition);
- cardReaderBackToIdle = false;
- nozzleLifted = false;
- Main.SetICCardReaderToCarPlateIdle(out sqNo);
- DebugLog($"Start to set card reader back to CarPlateIdle, SqNo={sqNo}\n Waiting for Ack");
- }
- protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
- {
- if (stateEngineEvent.Type.Equals(EventType.NozzleLifted))
- {
- var nlEvent = stateEngineEvent as GenericEvent<NozzleLiftedEventArgs>;
- if (nlEvent.EventArgs.NozzleId == Main.CurrentNozzleId)
- {
- DebugLog("Nozzle correctly lifted");
- nozzleLifted = true;
- }
- else
- {
- DebugLog("Nozzle lifted, but the nozzle was wrong: " + nlEvent.EventArgs.NozzleId);
- }
- stateEngineEvent.Handled = true;
- }
- if (stateEngineEvent.Type.Equals(EventType.NozzleReplaced))
- {
- var nrEvent = stateEngineEvent as GenericEvent<NozzleReplacedEventArgs>;
- if(nrEvent.EventArgs.NozzleId != Main.CurrentNozzleId)
- {
- DebugLog("Nozzle replaced, but the nozzle was wrong: " + nrEvent.EventArgs.NozzleId);
- stateEngineEvent.Handled = true;
- }
- }
- GenericEvent<CardReaderAckEventArgs> ackEvent = stateEngineEvent as GenericEvent<CardReaderAckEventArgs>;
- if (ackEvent != null && ackEvent.EventArgs != null)
- {
- if (ackEvent.EventArgs.Ack.MessageSeqNumber == sqNo)
- {
- DebugLog($" Set CardReader to CarPlateIdle ack'ed, SqNo={sqNo}\n");
- ackEvent.Handled = true;
- cardReaderBackToIdle = true;
- }
- }
- if (stateEngineEvent.Type.Equals(EventType.TrxOpRequest))
- {
- GenericEvent<TransactionOperationEventArgs> trxOpEvent = stateEngineEvent as GenericEvent<TransactionOperationEventArgs>;
- if (trxOpEvent != null && trxOpEvent.EventArgs != null && Main.ActiveTrx != null)
- {
- trxOpEvent.Handled = true;
- if (trxOpEvent.EventArgs.TrxOp.OpType == OpType.Delete)
- {
- int trxId = trxOpEvent.EventArgs.TrxOp.TrxId;
- foreach (var trx in Main.ActiveTrx)
- {
- if ((trx.id == trxId) && (Main.AssociatedNozzles.Contains(trx.jihao)))
- {
- EpsTransaction.RestroeEpsTrxFrom(trx).UpdateTrxStatusToDb(EpsTrxStatus.Removed);
- Main.CurrentEpsTrx = null;
- transition = new Transition(this, TransitionType.FuelingRemoved);
- }
- }
- }
- }
- }
- if (nozzleLifted && cardReaderBackToIdle)
- {
- transition = new Transition(this, TransitionType.NozzleLifted);
- }
- }
- 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);
- }
- }
|