using System; using System.Collections.Concurrent; using System.Collections.Generic; namespace SharedLibrary.Helpers { public class ConfigurationManager { ConcurrentDictionary> ConfigurationSet; ConcurrentDictionary ConfigSet; Type PluginType; Server ServerInstance; public ConfigurationManager(Type PluginType) { ConfigurationSet = new ConcurrentDictionary>(); this.PluginType = PluginType; } public ConfigurationManager(Server S) { try { ConfigSet = Interfaces.Serialize>.Read($"config/Plugins_{S}.cfg"); } catch (Exception) { S.Logger.WriteInfo("ConfigurationManager could not deserialize configuration file, so initializing default config set"); ConfigSet = new ConcurrentDictionary(); } ServerInstance = S; } private void SaveChanges() { Interfaces.Serialize>.Write($"config/Plugins_{ServerInstance}.cfg", ConfigSet); } public void AddConfiguration(Server S) { /* if (ConfigurationSet.ContainsKey(S.ToString())) { S.Logger.WriteWarning($"not adding server configuration for {S} as it already exists"); return; }*/ try { var Config = Interfaces.Serialize>.Read($"config/{PluginType.ToString()}_{S.ToString()}.cfg"); ConfigurationSet.TryAdd(S.ToString(), Config); } catch (Exceptions.SerializeException) { ConfigurationSet.TryAdd(S.ToString(), new Dictionary()); } } public void AddProperty(Server S, KeyValuePair Property) { ConfigurationSet[S.ToString()].Add(Property.Key, Property.Value); Interfaces.Serialize>.Write($"config/{PluginType.ToString()}_{S.ToString()}.cfg", ConfigurationSet[S.ToString()]); } public void AddProperty(KeyValuePair prop) { if (!ConfigSet.ContainsKey(prop.Key)) ConfigSet.TryAdd(prop.Key, prop.Value); SaveChanges(); } public void UpdateProperty(Server S, KeyValuePair Property) { ConfigurationSet[S.ToString()][Property.Key] = Property.Value; Interfaces.Serialize>.Write($"config/{PluginType.ToString()}_{S.ToString()}.cfg", ConfigurationSet[S.ToString()]); } public void UpdateProperty(KeyValuePair prop) { if (ConfigSet.ContainsKey(prop.Key)) ConfigSet[prop.Key] = prop.Value; SaveChanges(); } public IDictionary GetConfiguration(Server S) { return ConfigurationSet[S.ToString()]; } public object GetProperty(string prop) { try { return ConfigSet[prop]; } catch (Exception) { return null; } } } }