123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml.Serialization;
- using Wayne.Lib.StateEngine;
- using Wayne.Lib.StateEngine.Generic;
- namespace SinochemInternetPlusApp.States.CarPlateMode
- {
- public class SendWelcomeScreen : TimeoutState<FuelingPoint>
- {
- private byte sqNo;
- private bool bigScreenReplied = false;
- private bool cardReaderReplied = false;
- private int? requestId;
- protected override void Enter(StateEntry stateEntry, ref Transition transition)
- {
- base.Enter(stateEntry, ref transition);
- Main.CurrentEpsTrx.UpdateTrxStatusToDb(EpsTrxStatus.BeforeFueling);
- bigScreenReplied = false;
- cardReaderReplied = false;
- DebugLog($"为车牌号: {Main.CurrentEpsTrx.Model.car_number}, 卡号: {Main.CurrentEpsTrx.Model.card_no} 发送欢迎屏幕");
- if (Main.Eps.CarPlateHandler != null)
- {
- string text = CreateDisplayWelcomeCommand(Main.CurrentEpsTrx.Model);
- DebugLog(text);
- Main.Eps.CarPlateHandler.BroadcastMessageViaFdc(text);
- if (requestId.HasValue)
- {
- DebugLog($"Adding RequestId: {requestId.Value} to the list");
- Main.AddRequestId(requestId.Value);
- }
- }
- Main.SendICCardDisplay(Main.CurrentEpsTrx.Model.car_number, out sqNo);
- }
- protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
- {
- if (stateEngineEvent.Type.Equals(EventType.DisplayResponseReceived))
- {
- var e = stateEngineEvent as GenericEvent<DisplayResponseEventArgs>;
- if (e != null && e.EventArgs != null)
- {
- if (requestId.HasValue && requestId.Value == e.EventArgs.DispResponse.RequestId)
- {
- e.Handled = true;
- bigScreenReplied = true;
- if (Main.ContainsRequestId(requestId.Value))
- {
- DebugLog($"Removed RequestId: {requestId.Value} from the list");
- Main.RemoveRequestId(requestId.Value);
- }
-
- requestId = null;
- }
- }
- }
- var ackEvent = stateEngineEvent as GenericEvent<CardReaderAckEventArgs>;
- if (ackEvent != null && ackEvent.EventArgs != null)
- {
- if (ackEvent.EventArgs.Ack.MessageSeqNumber == sqNo)
- {
- ackEvent.Handled = true;
- cardReaderReplied = true;
- }
- }
- if (bigScreenReplied && cardReaderReplied)
- {
- //Main.PrepareCardReaderResetToCarPlateIdle();
- transition = new Transition(this, TransitionType.Done);
- }
- }
- protected override void Timeout(ref Transition transition)
- {
- transition = new Transition(this, TransitionType.Timeout);
- }
- protected override int TimeoutInterval =>
- TimeoutValues.GetValueInMilliSec(TimeoutValues.FuelingPoint.CarPlateMode_SendWelcomeScreen, 20);
- private string CreateDisplayWelcomeCommand(EpsTransactionModel epsTrxModel)
- {
- Display display;
- string cmdText = "";
- XmlSerializer serializer = new XmlSerializer(typeof(Display));
- MemoryStream ms;
- StreamReader sr;
- display = new Display();
- display.ScreenType = ScreenType.Welcome;
- display.RequestId = Main.Eps.GetNextRequestId();
- requestId = display.RequestId;
- display.MemberInfo = new DisplayMemberInfo
- {
- LicensePlateNo = epsTrxModel.car_number,
- Id = "" // empty for now
- };
- display.PumpInfo = new DisplayPumpInfo
- {
- Id = 1,
- NozzleId = epsTrxModel.jihao
- };
- ms = new MemoryStream();
- serializer.Serialize(ms, display);
- ms.Position = 0;
- sr = new StreamReader(ms, true);
- cmdText = sr.ReadToEnd();
- ms.Close();
- sr.Close();
- return cmdText;
- }
- }
- }
|