118 lines
2.6 KiB
C#
118 lines
2.6 KiB
C#
using System;
|
||
using System.Collections.Concurrent;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Text;
|
||
using Aitex.Common.Util;
|
||
using Aitex.Core.RT.DataCenter;
|
||
using Aitex.Core.RT.Log;
|
||
using Aitex.Core.RT.OperationCenter;
|
||
using Aitex.Core.Util;
|
||
|
||
namespace Aitex.Core.RT.ConfigCenter
|
||
{
|
||
public class ConfigManager : Singleton<ConfigManager>, ICommonConfig
|
||
{
|
||
private Dictionary<string, object> _dic = new Dictionary<string, object>();
|
||
|
||
private ConcurrentDictionary<string, DataItem<object>> _keyValueMap = new ConcurrentDictionary<string, DataItem<object>>(StringComparer.OrdinalIgnoreCase);
|
||
|
||
private object _locker = new object();
|
||
|
||
public void Initialize()
|
||
{
|
||
CONFIG.InnerConfigManager = this;
|
||
OP.Subscribe("SetConfig", InvokeSetConfig);
|
||
}
|
||
|
||
private bool InvokeSetConfig(string arg1, object[] arg2)
|
||
{
|
||
return true;
|
||
}
|
||
|
||
public void Terminate()
|
||
{
|
||
}
|
||
|
||
public string GetFileContent(string fileName)
|
||
{
|
||
if (!Path.IsPathRooted(fileName))
|
||
{
|
||
fileName = PathManager.GetCfgDir() + "\\" + fileName;
|
||
}
|
||
if (!File.Exists(fileName))
|
||
{
|
||
return null;
|
||
}
|
||
StringBuilder stringBuilder = new StringBuilder();
|
||
try
|
||
{
|
||
using StreamReader streamReader = new StreamReader(fileName);
|
||
while (!streamReader.EndOfStream)
|
||
{
|
||
stringBuilder.Append(streamReader.ReadLine());
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LOG.Write(ex);
|
||
return "";
|
||
}
|
||
return stringBuilder.ToString();
|
||
}
|
||
|
||
public object GetConfig(string config)
|
||
{
|
||
return _dic.ContainsKey(config) ? _dic[config] : null;
|
||
}
|
||
|
||
public void SetConfig(string config, object value)
|
||
{
|
||
_dic[config] = value;
|
||
}
|
||
|
||
public void Subscribe(string module, string key, Func<object> getter)
|
||
{
|
||
if (string.IsNullOrWhiteSpace(key))
|
||
{
|
||
throw new ArgumentNullException("key");
|
||
}
|
||
if (!string.IsNullOrEmpty(module))
|
||
{
|
||
key = module + "." + key;
|
||
}
|
||
if (_keyValueMap.ContainsKey(key))
|
||
{
|
||
throw new Exception($"Duplicated Key:{key}");
|
||
}
|
||
if (getter == null)
|
||
{
|
||
throw new ArgumentNullException("getter");
|
||
}
|
||
_keyValueMap.TryAdd(key, new DataItem<object>(getter));
|
||
}
|
||
|
||
public object Poll(string key)
|
||
{
|
||
return _keyValueMap.ContainsKey(key) ? _keyValueMap[key].Value : null;
|
||
}
|
||
|
||
public Dictionary<string, object> PollConfig(IEnumerable<string> keys)
|
||
{
|
||
Dictionary<string, object> dictionary = new Dictionary<string, object>();
|
||
foreach (string key in keys)
|
||
{
|
||
if (_keyValueMap.ContainsKey(key))
|
||
{
|
||
dictionary[key] = _keyValueMap[key].Value;
|
||
}
|
||
else
|
||
{
|
||
LOG.Error("undefined config:" + key);
|
||
}
|
||
}
|
||
return dictionary;
|
||
}
|
||
}
|
||
}
|