using System; using System.Collections.Generic; namespace Wayne.ForecourtControl.Fusion { public static class FUSIONFactory { public static Dictionary fusionForecourtControlList = new Dictionary(); // Methods public static IForecourtControl CreateForecourtControl(int deviceId, IForecourtConfiguration configuration, IPumpAuthorizationIdGenerator authorizationIdGenerator) { var fusionForecourtControl = CreateFUSIONForecourtControlLocal(deviceId, ForecourtEntityTypes.All, null, configuration, authorizationIdGenerator); return fusionForecourtControl; } // Methods public static IForecourtControl CreateForecourtControl(int deviceId, IPumpAuthorizationIdGenerator authorizationIdGenerator) { return CreateFUSIONForecourtControlLocal(deviceId, ForecourtEntityTypes.All, null, null, authorizationIdGenerator); } public static IForecourtControl CreateForecourtControl(int deviceId, ForecourtEntityTypes managedEntityTypes, IPumpAuthorizationIdGenerator authorizationIdGenerator) { IForecourtControl fusionForecourtControl = CreateFUSIONForecourtControlLocal(deviceId, managedEntityTypes, null, null, authorizationIdGenerator); return fusionForecourtControl; } public static IForecourtControl CreateForecourtControl(int deviceId, ForecourtEntityTypes managedEntityTypes, int[] managedPumpIds, IPumpAuthorizationIdGenerator authorizationIdGenerator) { IForecourtControl fusionForecourtControl = CreateFUSIONForecourtControlLocal(deviceId, managedEntityTypes, managedPumpIds, null, authorizationIdGenerator); return fusionForecourtControl; } public static bool SetForecourtConfiguration(int deviceId, IForecourtConfiguration config, IPumpAuthorizationIdGenerator authorizationIdGenerator) { IForecourtControl fusionForecourtControl = null; fusionForecourtControl = CreateForecourtControl(deviceId, authorizationIdGenerator); if ((FUSIONForecourtControl)fusionForecourtControl == null) return false; ((FUSIONForecourtControl)fusionForecourtControl).ForecourtConfiguration = config; return true; } private static FUSIONForecourtControl CreateFUSIONForecourtControlLocal(int deviceId, ForecourtEntityTypes managedEntityTypes, int[] managedPumpIds, IForecourtConfiguration config, IPumpAuthorizationIdGenerator authorizationIdGenerator) { FUSIONForecourtControl fusionForecourtControl = null; byte[] validationInfo = null; if (!fusionForecourtControlList.ContainsKey(deviceId)) { try { string softsealAssembly = ConfigurationParams.getSINPPath("bin\\") + "fusionSoftseal.dll"; System.Reflection.Assembly assembly = null; Trace.WriteLine(string.Format("softsealAssembly: '{0}'", softsealAssembly)); if (System.IO.File.Exists(softsealAssembly)) assembly = System.Reflection.Assembly.LoadFrom(softsealAssembly); if (assembly == null) { softsealAssembly = ConfigurationParams.getSINPPath("") + "fusionSoftseal.dll"; Trace.WriteLine(string.Format("NOT FOUND ... try softsealAssembly: '{0}'", softsealAssembly)); if (System.IO.File.Exists(softsealAssembly)) assembly = System.Reflection.Assembly.LoadFrom(softsealAssembly); } if (assembly != null) { Trace.WriteLine(string.Format("FOUND softsealAssembly: '{0}'", softsealAssembly)); Type fusionSoftsealType = assembly.GetType("Wayne.Softseal.FusionSoftseal"); Object fusionSoftsealObject = Activator.CreateInstance(fusionSoftsealType); object retVal; System.Reflection.MethodInfo mtdValidate = fusionSoftsealType.GetMethod("Validate"); retVal = mtdValidate.Invoke(fusionSoftsealObject, null); validationInfo = (byte[]) retVal; } else Trace.WriteLine(string.Format("NOT FOUND ! softsealAssembly: '{0}'", softsealAssembly)); fusionForecourtControl = new FUSIONForecourtControl(deviceId, managedEntityTypes, managedPumpIds, config, authorizationIdGenerator); FUSIONFactory.fusionForecourtControlList.Add(deviceId, fusionForecourtControl); Trace.WriteLine(string.Format("FUSIONForecourtControl created")); fusionForecourtControl.manager.ifsfManager.LogOnAddValidationInfo(validationInfo); } catch (Exception ex) { Trace.WriteLine(string.Format("Errore: {0}", ex.Message)); } } else fusionForecourtControl = fusionForecourtControlList[deviceId] as FUSIONForecourtControl; return fusionForecourtControl; } public static string getFUSIONFwRelease(int deviceId, string sConnectionString) { string sFwRelease = ""; // fwRelease string is composed by: version.release.hotfix var fusionForecourtControl = CreateForecourtControl(deviceId, NoPumpAuthorizationIdGenerator.Instance); if (((FUSIONForecourtControl)fusionForecourtControl).manager.Connect(sConnectionString)) { ((FUSIONForecourtControl)fusionForecourtControl).manager.versionInfoWakeUpEvent.Reset(); ((FUSIONForecourtControl)fusionForecourtControl).manager.ifsfManager.VersionInfo(null, null, null); ((FUSIONForecourtControl)fusionForecourtControl).manager.ifsfManager.GetCountrySettings(null, null, null); ((FUSIONForecourtControl)fusionForecourtControl).manager.versionInfoWakeUpEvent.WaitOne(); sFwRelease = ((FUSIONForecourtControl)fusionForecourtControl).manager.getFwRelease(); } return sFwRelease; } public static bool LogOnValidationInfo(int deviceId, byte[] validationInfo) { IForecourtControl fusionForecourtControl = null; fusionForecourtControl = CreateForecourtControl(deviceId, NoPumpAuthorizationIdGenerator.Instance); if ((FUSIONForecourtControl)fusionForecourtControl == null) return false; ((FUSIONForecourtControl)fusionForecourtControl).manager.ifsfManager.LogOnAddValidationInfo(validationInfo); return true; } public static void Remove(FUSIONForecourtControl fusionForecourtControl) { if (fusionForecourtControlList.ContainsKey(fusionForecourtControl.Id) && fusionForecourtControlList[fusionForecourtControl.Id] == fusionForecourtControl) { fusionForecourtControlList.Remove(fusionForecourtControl.Id); } } } }