using Edge.Core.Processor;using Edge.Core.IndustryStandardInterface.Pump; using SinoChemFC2PosProxy; using SinoChemFC2PosProxy.Communicator; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SinochemInternetPlusApp { public class App : IAppProcessor { public string MetaConfigName { get; set; } static NLog.Logger logger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("Application"); public static string PosDatabaseConnString { get; set; } public readonly static Dictionary AppSettings = new Dictionary(); private Eps eps; /// /// fdc pump handler is the entry for manage pumps. /// private List fdcPumpControllers = new List(); private IEnumerable processors = null; public App(string SinochemSiteId, string SinochemSiteName, string SinochemCloudUrlPrefix, string SinochemCloudBalanceApi, string SinochemCloudPaymentApi, string SinochemCloudTrxStatusApi, string SinochemCloudRefundApi, string SinochemPosUrlPrefix, string SinochemPosNotifyApi, int __FP_Idle, int __FP_Shared_AuthorizePump, int __FP_Shared_WaitForPayableTrx, int __FP_Shared_NotifyPOS, int __FP_Shared_PayTrx, int __FP_Shared_WaitForFueling, int __FP_CarPlateMode_CalculateMAC, int __FP_CarPlateMode_DisableICCardReader, int __FP_CarPlateMode_Error, int __FP_CarPlateMode_OpenCardReader, int __FP_CarPlateMode_SendPaymentResult, int __FP_CarPlateMode_SendTrxDoneToCardReader, int __FP_CarPlateMode_SendTrxListFillingPaid, int __FP_CarPlateMode_SendWelcomeScreen, int __FP_CarPlateMode_ShowTrxListFueling, int __FP_CarPlateMode_ShowTrxListPendingFueling, int __FP_CarPlateMode_ShowTrxListReadyForPay, int __FP_CarPlateMode_WaitForCardReaderBackToIdle, int __FP_ICCardMode_AbortTransaction, int __FP_ICCardMode_CheckCardBalance, int __FP_ICCardMode_HandleExternalCheckFailure, int __FP_ICCardMode_HandleUserTimeout, int __FP_ICCardMode_SendCalculateMacRequest, int __FP_ICCardMode_SendCardBalanceToCardReader, int __FP_ICCardMode_SendPaymentResult, int __FP_ICCardMode_SendTrxDoneToCardReader, int __FP_ICCardMode_WaitForCardData, int __FP_ICCardMode_WaitForCardEject, int __FP_ICCardMode_WaitForMacData, int __ETC_WaitForWork, int __Misc_BigScreenBackToIdle, int NeedConfirmEpsTrxExpirationInMinutes, int AlreadyDoneEpsTrxCountPerDisplay, string ListOfFuelingPoints, string AssociatedNozzlesForFuelingPoints, string SupportMultiFusions, int ResendPosNotifyExpirationInMinutes, int EpsTrxHistoryArchiveInDays, int ICCardPaymentResultDisplayTimeoutInSeconds, string PrintReceiptEnabled, string PrintQrCodeOnReceiptEnabled, string PosDatabaseConnString, string PumpSideMapping) { AppSettings.Add("SinochemSiteId", SinochemSiteId); AppSettings.Add("SinochemSiteName", SinochemSiteName); AppSettings.Add("SinochemCloudUrlPrefix", SinochemCloudUrlPrefix); AppSettings.Add("SinochemCloudBalanceApi", SinochemCloudBalanceApi); AppSettings.Add("SinochemCloudPaymentApi", SinochemCloudPaymentApi); AppSettings.Add("SinochemCloudTrxStatusApi", SinochemCloudTrxStatusApi); AppSettings.Add("SinochemCloudRefundApi", SinochemCloudRefundApi); AppSettings.Add("SinochemPosUrlPrefix", SinochemPosUrlPrefix); AppSettings.Add("SinochemPosNotifyApi", SinochemPosNotifyApi); 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()); 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()); AppSettings.Add("__FP_CarPlateMode_CalculateMAC", __FP_CarPlateMode_CalculateMAC.ToString()); AppSettings.Add("__FP_CarPlateMode_DisableICCardReader", __FP_CarPlateMode_DisableICCardReader.ToString()); AppSettings.Add("__FP_CarPlateMode_Error", __FP_CarPlateMode_Error.ToString()); AppSettings.Add("__FP_CarPlateMode_OpenCardReader", __FP_CarPlateMode_OpenCardReader.ToString()); AppSettings.Add("__FP_CarPlateMode_SendPaymentResult", __FP_CarPlateMode_SendPaymentResult.ToString()); AppSettings.Add("__FP_CarPlateMode_SendTrxDoneToCardReader", __FP_CarPlateMode_SendTrxDoneToCardReader.ToString()); AppSettings.Add("__FP_CarPlateMode_SendTrxListFillingPaid", __FP_CarPlateMode_SendTrxListFillingPaid.ToString()); AppSettings.Add("__FP_CarPlateMode_SendWelcomeScreen", __FP_CarPlateMode_SendWelcomeScreen.ToString()); AppSettings.Add("__FP_CarPlateMode_ShowTrxListFueling", __FP_CarPlateMode_ShowTrxListFueling.ToString()); AppSettings.Add("__FP_CarPlateMode_ShowTrxListPendingFueling", __FP_CarPlateMode_ShowTrxListPendingFueling.ToString()); AppSettings.Add("__FP_CarPlateMode_ShowTrxListReadyForPay", __FP_CarPlateMode_ShowTrxListReadyForPay.ToString()); AppSettings.Add("__FP_CarPlateMode_WaitForCardReaderBackToIdle", __FP_CarPlateMode_WaitForCardReaderBackToIdle.ToString()); AppSettings.Add("__FP_ICCardMode_AbortTransaction", __FP_ICCardMode_AbortTransaction.ToString()); AppSettings.Add("__FP_ICCardMode_CheckCardBalance", __FP_ICCardMode_CheckCardBalance.ToString()); AppSettings.Add("__FP_ICCardMode_HandleExternalCheckFailure", __FP_ICCardMode_HandleExternalCheckFailure.ToString()); AppSettings.Add("__FP_ICCardMode_HandleUserTimeout", __FP_ICCardMode_HandleUserTimeout.ToString()); AppSettings.Add("__FP_ICCardMode_SendCalculateMacRequest", __FP_ICCardMode_SendCalculateMacRequest.ToString()); AppSettings.Add("__FP_ICCardMode_SendCardBalanceToCardReader", __FP_ICCardMode_SendCardBalanceToCardReader.ToString()); AppSettings.Add("__FP_ICCardMode_SendPaymentResult", __FP_ICCardMode_SendPaymentResult.ToString()); AppSettings.Add("__FP_ICCardMode_SendTrxDoneToCardReader", __FP_ICCardMode_SendTrxDoneToCardReader.ToString()); AppSettings.Add("__FP_ICCardMode_WaitForCardData", __FP_ICCardMode_WaitForCardData.ToString()); AppSettings.Add("__FP_ICCardMode_WaitForCardEject", __FP_ICCardMode_WaitForCardEject.ToString()); AppSettings.Add("__FP_ICCardMode_WaitForMacData", __FP_ICCardMode_WaitForMacData.ToString()); AppSettings.Add("__ETC_WaitForWork", __ETC_WaitForWork.ToString()); AppSettings.Add("__Misc_BigScreenBackToIdle", __Misc_BigScreenBackToIdle.ToString()); AppSettings.Add("NeedConfirmEpsTrxExpirationInMinutes", NeedConfirmEpsTrxExpirationInMinutes.ToString()); AppSettings.Add("AlreadyDoneEpsTrxCountPerDisplay", AlreadyDoneEpsTrxCountPerDisplay.ToString()); AppSettings.Add("ListOfFuelingPoints", ListOfFuelingPoints); AppSettings.Add("AssociatedNozzlesForFuelingPoints", AssociatedNozzlesForFuelingPoints); AppSettings.Add("SupportMultiFusions", SupportMultiFusions); AppSettings.Add("ResendPosNotifyExpirationInMinutes", ResendPosNotifyExpirationInMinutes.ToString()); AppSettings.Add("EpsTrxHistoryArchiveInDays", EpsTrxHistoryArchiveInDays.ToString()); AppSettings.Add("ICCardPaymentResultDisplayTimeoutInSeconds", ICCardPaymentResultDisplayTimeoutInSeconds.ToString()); AppSettings.Add("PrintReceiptEnabled", PrintReceiptEnabled); AppSettings.Add("PrintQrCodeOnReceiptEnabled", PrintQrCodeOnReceiptEnabled); AppSettings.Add("PosDatabaseConnString", PosDatabaseConnString); AppSettings.Add("PumpSideMapping", PumpSideMapping); AppSettings.Add("forceMappingFusionHoseToHuiTianHose", null); App.PosDatabaseConnString = PosDatabaseConnString; } public void Dispose() { //throw new NotImplementedException(); } public void Init(IEnumerable processors) { this.processors = processors; foreach (dynamic p in processors) { if (p is IAppProcessor) continue; var handler = p.Context.Handler; if (handler is IFdcPumpController) this.fdcPumpControllers.Add(handler); else if (handler is IEnumerable) { //pumpControllers.AddRange(handler); foreach (var c in handler) { this.fdcPumpControllers.Add(c); } } } //Start(); } public async Task Start() { //Wayne.Lib.Log.Logger.SetConfigFile("SinochemAppLogConfig.xml", "SinochemEventLogConfig.xml"); //Wayne.Lib.Log.Logger.RefreshConfig(); this.SetupPumpStatusToSinoChemPosDatabaseCommunicator(this.fdcPumpControllers); var carPlateProcessors = this.processors.OfType>>(); var icCardReaderProcessors = processors.OfType>(); eps = new Eps(ConfigurationValues.ListOfFuelingPoints, ConfigurationValues.FuelingPointNozzlesDict, this.fdcPumpControllers, carPlateProcessors, icCardReaderProcessors); eps.Run(); return true; } public async Task Stop() { if (eps != null) { eps.Shutdown(); eps.Dispose(); } return true; //Wayne.Lib.Log.Logger.Close(); } private void SetupPumpStatusToSinoChemPosDatabaseCommunicator(IEnumerable pumpControllers) { var c = new SiteConfigScannerCommunicator(6000 * 60 * 5); var mustSucceed = c.Start(); if (!mustSucceed) { logger.Error("Failed to init the site configuration, pls check log. Will quit..."); } else { var init = new InitSiteCommunicator(); init.Start(); //var msgRouterComm = new MessageRouterCommunicator(msgRouterClient); //msgRouterComm.Start(); var FdcComm = new FdcCommunicator(); //FdcComm.Start(); //var logPurge = new LogPurge(); //logPurge.Start(); logger.Info("SinoChemFC2PosProxy is on running..."); } } } }