App.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using Edge.Core.Processor;using Edge.Core.IndustryStandardInterface.Pump;
  2. using SinoChemFC2PosProxy;
  3. using SinoChemFC2PosProxy.Communicator;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Configuration;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace SinochemInternetPlusApp
  11. {
  12. public class App : IAppProcessor
  13. {
  14. public string MetaConfigName { get; set; }
  15. static NLog.Logger logger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("Application");
  16. public static string PosDatabaseConnString { get; set; }
  17. public readonly static Dictionary<string, string> AppSettings = new Dictionary<string, string>();
  18. private Eps eps;
  19. /// <summary>
  20. /// fdc pump handler is the entry for manage pumps.
  21. /// </summary>
  22. private List<IFdcPumpController> fdcPumpControllers = new List<IFdcPumpController>();
  23. private IEnumerable<IProcessor> processors = null;
  24. public App(string SinochemSiteId, string SinochemSiteName,
  25. string SinochemCloudUrlPrefix, string SinochemCloudBalanceApi,
  26. string SinochemCloudPaymentApi, string SinochemCloudTrxStatusApi,
  27. string SinochemCloudRefundApi, string SinochemPosUrlPrefix,
  28. string SinochemPosNotifyApi,
  29. int __FP_Idle, int __FP_Shared_AuthorizePump, int __FP_Shared_WaitForPayableTrx,
  30. int __FP_Shared_NotifyPOS, int __FP_Shared_PayTrx, int __FP_Shared_WaitForFueling,
  31. int __FP_CarPlateMode_CalculateMAC, int __FP_CarPlateMode_DisableICCardReader,
  32. int __FP_CarPlateMode_Error, int __FP_CarPlateMode_OpenCardReader,
  33. int __FP_CarPlateMode_SendPaymentResult, int __FP_CarPlateMode_SendTrxDoneToCardReader,
  34. int __FP_CarPlateMode_SendTrxListFillingPaid, int __FP_CarPlateMode_SendWelcomeScreen,
  35. int __FP_CarPlateMode_ShowTrxListFueling, int __FP_CarPlateMode_ShowTrxListPendingFueling,
  36. int __FP_CarPlateMode_ShowTrxListReadyForPay, int __FP_CarPlateMode_WaitForCardReaderBackToIdle,
  37. int __FP_ICCardMode_AbortTransaction, int __FP_ICCardMode_CheckCardBalance,
  38. int __FP_ICCardMode_HandleExternalCheckFailure, int __FP_ICCardMode_HandleUserTimeout,
  39. int __FP_ICCardMode_SendCalculateMacRequest, int __FP_ICCardMode_SendCardBalanceToCardReader,
  40. int __FP_ICCardMode_SendPaymentResult, int __FP_ICCardMode_SendTrxDoneToCardReader,
  41. int __FP_ICCardMode_WaitForCardData, int __FP_ICCardMode_WaitForCardEject,
  42. int __FP_ICCardMode_WaitForMacData,
  43. int __ETC_WaitForWork,
  44. int __Misc_BigScreenBackToIdle,
  45. int NeedConfirmEpsTrxExpirationInMinutes, int AlreadyDoneEpsTrxCountPerDisplay,
  46. string ListOfFuelingPoints, string AssociatedNozzlesForFuelingPoints,
  47. string SupportMultiFusions, int ResendPosNotifyExpirationInMinutes,
  48. int EpsTrxHistoryArchiveInDays, int ICCardPaymentResultDisplayTimeoutInSeconds,
  49. string PrintReceiptEnabled, string PrintQrCodeOnReceiptEnabled,
  50. string PosDatabaseConnString,
  51. string PumpSideMapping)
  52. {
  53. AppSettings.Add("SinochemSiteId", SinochemSiteId); AppSettings.Add("SinochemSiteName", SinochemSiteName);
  54. AppSettings.Add("SinochemCloudUrlPrefix", SinochemCloudUrlPrefix); AppSettings.Add("SinochemCloudBalanceApi", SinochemCloudBalanceApi);
  55. AppSettings.Add("SinochemCloudPaymentApi", SinochemCloudPaymentApi); AppSettings.Add("SinochemCloudTrxStatusApi", SinochemCloudTrxStatusApi);
  56. AppSettings.Add("SinochemCloudRefundApi", SinochemCloudRefundApi); AppSettings.Add("SinochemPosUrlPrefix", SinochemPosUrlPrefix);
  57. AppSettings.Add("SinochemPosNotifyApi", SinochemPosNotifyApi);
  58. AppSettings.Add("__FP_Idle", __FP_Idle.ToString()); AppSettings.Add("__FP_Shared_AuthorizePump", __FP_Shared_AuthorizePump.ToString()); AppSettings.Add("__FP_Shared_WaitForPayableTrx", __FP_Shared_WaitForPayableTrx.ToString());
  59. AppSettings.Add("__FP_Shared_NotifyPOS", __FP_Shared_NotifyPOS.ToString()); AppSettings.Add("__FP_Shared_PayTrx", __FP_Shared_PayTrx.ToString()); AppSettings.Add("__FP_Shared_WaitForFueling", __FP_Shared_WaitForFueling.ToString());
  60. AppSettings.Add("__FP_CarPlateMode_CalculateMAC", __FP_CarPlateMode_CalculateMAC.ToString()); AppSettings.Add("__FP_CarPlateMode_DisableICCardReader", __FP_CarPlateMode_DisableICCardReader.ToString());
  61. AppSettings.Add("__FP_CarPlateMode_Error", __FP_CarPlateMode_Error.ToString()); AppSettings.Add("__FP_CarPlateMode_OpenCardReader", __FP_CarPlateMode_OpenCardReader.ToString());
  62. AppSettings.Add("__FP_CarPlateMode_SendPaymentResult", __FP_CarPlateMode_SendPaymentResult.ToString()); AppSettings.Add("__FP_CarPlateMode_SendTrxDoneToCardReader", __FP_CarPlateMode_SendTrxDoneToCardReader.ToString());
  63. AppSettings.Add("__FP_CarPlateMode_SendTrxListFillingPaid", __FP_CarPlateMode_SendTrxListFillingPaid.ToString()); AppSettings.Add("__FP_CarPlateMode_SendWelcomeScreen", __FP_CarPlateMode_SendWelcomeScreen.ToString());
  64. AppSettings.Add("__FP_CarPlateMode_ShowTrxListFueling", __FP_CarPlateMode_ShowTrxListFueling.ToString()); AppSettings.Add("__FP_CarPlateMode_ShowTrxListPendingFueling", __FP_CarPlateMode_ShowTrxListPendingFueling.ToString());
  65. AppSettings.Add("__FP_CarPlateMode_ShowTrxListReadyForPay", __FP_CarPlateMode_ShowTrxListReadyForPay.ToString()); AppSettings.Add("__FP_CarPlateMode_WaitForCardReaderBackToIdle", __FP_CarPlateMode_WaitForCardReaderBackToIdle.ToString());
  66. AppSettings.Add("__FP_ICCardMode_AbortTransaction", __FP_ICCardMode_AbortTransaction.ToString()); AppSettings.Add("__FP_ICCardMode_CheckCardBalance", __FP_ICCardMode_CheckCardBalance.ToString());
  67. AppSettings.Add("__FP_ICCardMode_HandleExternalCheckFailure", __FP_ICCardMode_HandleExternalCheckFailure.ToString()); AppSettings.Add("__FP_ICCardMode_HandleUserTimeout", __FP_ICCardMode_HandleUserTimeout.ToString());
  68. AppSettings.Add("__FP_ICCardMode_SendCalculateMacRequest", __FP_ICCardMode_SendCalculateMacRequest.ToString()); AppSettings.Add("__FP_ICCardMode_SendCardBalanceToCardReader", __FP_ICCardMode_SendCardBalanceToCardReader.ToString());
  69. AppSettings.Add("__FP_ICCardMode_SendPaymentResult", __FP_ICCardMode_SendPaymentResult.ToString()); AppSettings.Add("__FP_ICCardMode_SendTrxDoneToCardReader", __FP_ICCardMode_SendTrxDoneToCardReader.ToString());
  70. AppSettings.Add("__FP_ICCardMode_WaitForCardData", __FP_ICCardMode_WaitForCardData.ToString()); AppSettings.Add("__FP_ICCardMode_WaitForCardEject", __FP_ICCardMode_WaitForCardEject.ToString());
  71. AppSettings.Add("__FP_ICCardMode_WaitForMacData", __FP_ICCardMode_WaitForMacData.ToString());
  72. AppSettings.Add("__ETC_WaitForWork", __ETC_WaitForWork.ToString());
  73. AppSettings.Add("__Misc_BigScreenBackToIdle", __Misc_BigScreenBackToIdle.ToString());
  74. AppSettings.Add("NeedConfirmEpsTrxExpirationInMinutes", NeedConfirmEpsTrxExpirationInMinutes.ToString()); AppSettings.Add("AlreadyDoneEpsTrxCountPerDisplay", AlreadyDoneEpsTrxCountPerDisplay.ToString());
  75. AppSettings.Add("ListOfFuelingPoints", ListOfFuelingPoints); AppSettings.Add("AssociatedNozzlesForFuelingPoints", AssociatedNozzlesForFuelingPoints);
  76. AppSettings.Add("SupportMultiFusions", SupportMultiFusions); AppSettings.Add("ResendPosNotifyExpirationInMinutes", ResendPosNotifyExpirationInMinutes.ToString());
  77. AppSettings.Add("EpsTrxHistoryArchiveInDays", EpsTrxHistoryArchiveInDays.ToString()); AppSettings.Add("ICCardPaymentResultDisplayTimeoutInSeconds", ICCardPaymentResultDisplayTimeoutInSeconds.ToString());
  78. AppSettings.Add("PrintReceiptEnabled", PrintReceiptEnabled); AppSettings.Add("PrintQrCodeOnReceiptEnabled", PrintQrCodeOnReceiptEnabled);
  79. AppSettings.Add("PosDatabaseConnString", PosDatabaseConnString);
  80. AppSettings.Add("PumpSideMapping", PumpSideMapping);
  81. AppSettings.Add("forceMappingFusionHoseToHuiTianHose", null);
  82. App.PosDatabaseConnString = PosDatabaseConnString;
  83. }
  84. public void Dispose()
  85. {
  86. //throw new NotImplementedException();
  87. }
  88. public void Init(IEnumerable<IProcessor> processors)
  89. {
  90. this.processors = processors;
  91. foreach (dynamic p in processors)
  92. {
  93. if (p is IAppProcessor) continue;
  94. var handler = p.Context.Handler;
  95. if (handler is IFdcPumpController)
  96. this.fdcPumpControllers.Add(handler);
  97. else if (handler is IEnumerable<IFdcPumpController>)
  98. {
  99. //pumpControllers.AddRange(handler);
  100. foreach (var c in handler)
  101. {
  102. this.fdcPumpControllers.Add(c);
  103. }
  104. }
  105. }
  106. //Start();
  107. }
  108. public async Task<bool> Start()
  109. {
  110. //Wayne.Lib.Log.Logger.SetConfigFile("SinochemAppLogConfig.xml", "SinochemEventLogConfig.xml");
  111. //Wayne.Lib.Log.Logger.RefreshConfig();
  112. this.SetupPumpStatusToSinoChemPosDatabaseCommunicator(this.fdcPumpControllers);
  113. var carPlateProcessors =
  114. this.processors.OfType<Edge.Core.Processor.GenericDeviceProcessor<System.String, Edge.Core.Parser.HttpMessageParser.BaseHttpMessage<System.String>>>();
  115. var icCardReaderProcessors =
  116. processors.OfType<GenericDeviceProcessor<System.Byte[], WayneChina_IcCardReader_SinoChem.MessageEntity.IcCardReaderMessageBase>>();
  117. eps = new Eps(ConfigurationValues.ListOfFuelingPoints, ConfigurationValues.FuelingPointNozzlesDict,
  118. this.fdcPumpControllers, carPlateProcessors, icCardReaderProcessors);
  119. eps.Run();
  120. return true;
  121. }
  122. public async Task<bool> Stop()
  123. {
  124. if (eps != null)
  125. {
  126. eps.Shutdown();
  127. eps.Dispose();
  128. }
  129. return true;
  130. //Wayne.Lib.Log.Logger.Close();
  131. }
  132. private void SetupPumpStatusToSinoChemPosDatabaseCommunicator(IEnumerable<IFdcPumpController> pumpControllers)
  133. {
  134. var c = new SiteConfigScannerCommunicator(6000 * 60 * 5);
  135. var mustSucceed = c.Start();
  136. if (!mustSucceed)
  137. {
  138. logger.Error("Failed to init the site configuration, pls check log. Will quit...");
  139. }
  140. else
  141. {
  142. var init = new InitSiteCommunicator();
  143. init.Start();
  144. //var msgRouterComm = new MessageRouterCommunicator(msgRouterClient);
  145. //msgRouterComm.Start();
  146. var FdcComm = new FdcCommunicator();
  147. //FdcComm.Start();
  148. //var logPurge = new LogPurge();
  149. //logPurge.Start();
  150. logger.Info("SinoChemFC2PosProxy is on running...");
  151. }
  152. }
  153. }
  154. }