ShowPaymentResult.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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.Xml.Serialization;
  8. using Wayne.Lib.StateEngine;
  9. using Wayne.Lib.StateEngine.Generic;
  10. namespace SinochemInternetPlusApp.States.CarPlateMode
  11. {
  12. public class ShowPaymentResult : TimeoutState<FuelingPoint>
  13. {
  14. private int requestId;
  15. protected override void Enter(StateEntry stateEntry, ref Transition transition)
  16. {
  17. base.Enter(stateEntry, ref transition);
  18. if (Main.Eps.CarPlateHandler != null && Main.CurrentEpsTrx != null)
  19. {
  20. string text = CreateDisplayTrxResultCommand(Main.CurrentEpsTrx.Model);
  21. DebugLog(text);
  22. Main.Eps.CarPlateHandler.BroadcastMessageViaFdc(text);
  23. if (!Main.ContainsRequestId(requestId))
  24. Main.AddRequestId(requestId);
  25. }
  26. }
  27. protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
  28. {
  29. if (stateEngineEvent.Type.Equals(EventType.DisplayResponseReceived))
  30. {
  31. var e = stateEngineEvent as GenericEvent<DisplayResponseEventArgs>;
  32. if (e != null && e.EventArgs != null)
  33. {
  34. if (requestId == e.EventArgs.DispResponse.RequestId)
  35. {
  36. e.Handled = true;
  37. if (Main.ContainsRequestId(requestId))
  38. Main.RemoveRequestId(requestId);
  39. }
  40. }
  41. }
  42. }
  43. protected override void Timeout(ref Transition transition)
  44. {
  45. transition = new Transition(this, TransitionType.Timeout);
  46. }
  47. protected override int TimeoutInterval =>
  48. TimeoutValues.GetValueInMilliSec(TimeoutValues.FuelingPoint.CarPlateMode_SendPaymentResult, 10);
  49. private string CreateDisplayTrxResultCommand(EpsTransactionModel epsTrxModel)
  50. {
  51. Display display;
  52. string cmdText = "";
  53. XmlSerializer serializer = new XmlSerializer(typeof(Display));
  54. MemoryStream ms;
  55. StreamReader sr;
  56. display = new Display();
  57. display.ScreenType = ScreenType.TrxResult;
  58. display.RequestId = Main.Eps.GetNextRequestId();
  59. requestId = display.RequestId;
  60. display.TimeoutSpecified = true;
  61. display.Timeout = 10;
  62. display.PumpInfo = new DisplayPumpInfo
  63. {
  64. Id = 1,
  65. NozzleId = Main.CurrentNozzleId
  66. };
  67. display.TrxList = new DisplayTrx[] {
  68. Main.Eps.ConvertEpsTrxModelToDisplayTrx(epsTrxModel)
  69. };
  70. ms = new MemoryStream();
  71. serializer.Serialize(ms, display);
  72. ms.Position = 0;
  73. sr = new StreamReader(ms, true);
  74. cmdText = sr.ReadToEnd();
  75. ms.Close();
  76. sr.Close();
  77. return cmdText;
  78. }
  79. }
  80. }