using Microsoft.CSharp.RuntimeBinder; using System; using System.Collections.Concurrent; using System.Collections.Generic; namespace SharedLibrary.Helpers { public class ConfigurationManager { ConcurrentDictionary<string, dynamic> ConfigSet; Server ServerInstance; public ConfigurationManager(Server S) { try { ConfigSet = Interfaces.Serialize<ConcurrentDictionary<string, dynamic>>.Read($"{Utilities.OperatingDirectory}config/plugins_{S.ToString()}.cfg"); } catch (Exception) { S.Logger.WriteInfo("ConfigurationManager could not deserialize configuration file, so initializing default config set"); ConfigSet = new ConcurrentDictionary<string, dynamic>(); } ServerInstance = S; SaveChanges(); } private void SaveChanges() { Interfaces.Serialize<ConcurrentDictionary<string, dynamic>>.Write($"{Utilities.OperatingDirectory}config/plugins_{ServerInstance.ToString()}.cfg", ConfigSet); } public void AddProperty(KeyValuePair<string, dynamic> prop) { if (!ConfigSet.ContainsKey(prop.Key)) ConfigSet.TryAdd(prop.Key, prop.Value); SaveChanges(); } public void UpdateProperty(KeyValuePair<string, dynamic> prop) { if (ConfigSet.ContainsKey(prop.Key)) ConfigSet[prop.Key] = prop.Value; SaveChanges(); } public T GetProperty<T>(string prop) { try { return ConfigSet[prop].ToObject<T>(); } catch (RuntimeBinderException) { return ConfigSet[prop]; } catch (Exception) { return default(T); } } } }