private Dictionary <string, IDataFactory> GetFactories() { Dictionary <string, IDataFactory> returnList = new Dictionary <string, IDataFactory>(); XmlNodeList Factories = this.ConfigXML.SelectNodes("//Factories/Factory"); foreach (XmlNode factory in Factories) { switch (factory.Attributes["Type"].Value.ToLower()) { case "sql": SQLDataFactory sqlf = new SQLDataFactory(); sqlf.Name = factory.Attributes["Name"].Value; sqlf.RefreshValues = Convert.ToBoolean(factory.Attributes["Refresh"].Value); sqlf.RefreshRate = Convert.ToInt32(factory.Attributes["RefreshRate"].Value); sqlf.ConnectionString = factory["ConnectionString"].InnerText; sqlf.FillQuery = factory["FillQuery"].InnerText; returnList.Add(sqlf.Name, sqlf); break; case "json": JSONDataFactory jsonf = new JSONDataFactory(); jsonf.Name = factory.Attributes["Name"].Value; jsonf.RefreshValues = Convert.ToBoolean(factory.Attributes["Refresh"].Value); jsonf.RefreshRate = Convert.ToInt32(factory.Attributes["RefreshRate"].Value); jsonf.LoadPath = factory["LoadPath"].InnerText; returnList.Add(jsonf.Name, jsonf); break; } } return(returnList); }
private void SetupFactory(IDataFactory factory) { Log returnLog = new Log() { Type = LogType.Message, Source = factory.Name }; try { switch (factory.Type) { case DataFactoryType.SQL: SQLDataFactory sqlFac = (SQLDataFactory)factory; if (sqlFac.ConnectionString.ToLower() == "{parent}") { sqlFac.ConnectionString = this._config.SourceConnectionString; } factory.Load(ref returnLog); _dm.DataFactories.TryAdd(factory.Name, factory); if (factory.RefreshValues) { Timer facTimer = new Timer(factory.RefreshRate * 1000); facTimer.Elapsed += (sender, e) => RefreshFactory(sender, e, factory); facTimer.AutoReset = true; facTimer.Enabled = false; facTimer.Enabled = true; } break; case DataFactoryType.JSON: JSONDataFactory jsonFac = (JSONDataFactory)factory; factory.Load(ref returnLog); _dm.DataFactories.TryAdd(factory.Name, factory); if (factory.RefreshValues) { Timer facTimer = new Timer(factory.RefreshRate * 1000); facTimer.Elapsed += (sender, e) => RefreshFactory(sender, e, factory); facTimer.AutoReset = true; facTimer.Enabled = false; facTimer.Enabled = true; } break; } returnLog.EndTime = DateTime.Now; returnLog.Message = "Factory added successfully"; } catch (Exception ex) { returnLog.Successful = false; returnLog.EndTime = DateTime.Now; returnLog.Message = "Factory add failed - " + ex.Message; } Parallel.ForEach(observers, observer => { observer.OnNext(returnLog); }); }