SendWelcomeScreen.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Timers;
  8. using System.Xml.Serialization;
  9. using Wayne.Lib.StateEngine;
  10. using Wayne.Lib.StateEngine.Generic;
  11. namespace SinochemInternetPlusApp.States
  12. {
  13. public class SendWelcomeScreen : TimeoutState<FuelingPoint>
  14. {
  15. private byte sqNo;
  16. private bool bigScreenReplied = false;
  17. private int? requestId;
  18. protected override void Enter(StateEntry stateEntry, ref Transition transition)
  19. {
  20. base.Enter(stateEntry, ref transition);
  21. //Main.CurrentEpsTrx.UpdateTrxStatusToDb(EpsTrxStatus.BeforeFueling);
  22. bigScreenReplied = false;
  23. DebugLog($"为车牌号: {Main.NewEpsTrx.Model.car_number}, 卡号: {Main.NewEpsTrx.Model.card_no} 发送欢迎屏幕");
  24. //Don't need send rquest to BigScreen
  25. if (!Main.HasBigSreen())
  26. {
  27. transition = new Transition(this, TransitionType.Done);
  28. return;
  29. }
  30. if (Main.Eps.CarPlateHandler != null)
  31. {
  32. string text = CreateDisplayWelcomeCommand(Main.NewEpsTrx.Model);
  33. DebugLog(text);
  34. Main.Eps.CarPlateHandler.BroadcastMessageViaFdc(text);
  35. if (requestId.HasValue)
  36. {
  37. DebugLog($"Adding RequestId: {requestId.Value} in SendWelcomeScreen Enter");
  38. Main.AddRequestId(requestId.Value);
  39. }
  40. }
  41. }
  42. protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
  43. {
  44. if (stateEngineEvent.Type.Equals(EventType.DisplayResponseReceived))
  45. {
  46. var e = stateEngineEvent as GenericEvent<DisplayResponseEventArgs>;
  47. if (e != null && e.EventArgs != null)
  48. {
  49. if (requestId.HasValue && requestId.Value == e.EventArgs.DispResponse.RequestId)
  50. {
  51. e.Handled = true;
  52. bigScreenReplied = true;
  53. if (Main.ContainsRequestId(requestId.Value))
  54. {
  55. DebugLog($"Removed RequestId: {requestId.Value} from the list");
  56. Main.RemoveRequestId(requestId.Value);
  57. }
  58. }
  59. }
  60. }
  61. else if (stateEngineEvent.Type.Equals(EventType.NozzleLifted))
  62. {
  63. transition = new Transition(this, TransitionType.Done);
  64. }
  65. if (bigScreenReplied)
  66. {
  67. transition = new Transition(this, TransitionType.Done);
  68. System.Threading.Thread.Sleep(2 * 1000);
  69. }
  70. }
  71. protected override void Timeout(ref Transition transition)
  72. {
  73. transition = new Transition(this, TransitionType.Timeout);
  74. }
  75. protected override int TimeoutInterval =>
  76. TimeoutValues.GetValueInMilliSec(TimeoutValues.FuelingPoint.CarPlateMode_SendWelcomeScreen, 20);
  77. private string CreateDisplayWelcomeCommand(EpsTransactionModel epsTrxModel)
  78. {
  79. Display display;
  80. string cmdText = "";
  81. XmlSerializer serializer = new XmlSerializer(typeof(Display));
  82. MemoryStream ms;
  83. StreamReader sr;
  84. display = new Display();
  85. display.ScreenType = ScreenType.Welcome;
  86. display.RequestId = Main.Eps.GetNextRequestId();
  87. requestId = display.RequestId;
  88. display.MemberInfo = new DisplayMemberInfo
  89. {
  90. LicensePlateNo = epsTrxModel.car_number,
  91. Id = "" // empty for now
  92. };
  93. display.PumpInfo = new DisplayPumpInfo
  94. {
  95. Id = 1,
  96. NozzleId = epsTrxModel.jihao,
  97. GradeName = epsTrxModel.youpin
  98. };
  99. ms = new MemoryStream();
  100. serializer.Serialize(ms, display);
  101. ms.Position = 0;
  102. sr = new StreamReader(ms, true);
  103. cmdText = sr.ReadToEnd();
  104. ms.Close();
  105. sr.Close();
  106. return cmdText;
  107. }
  108. }
  109. }