Beispiel #1
0
 public static dynamic GetDynamicConfig()
 {
     if (config == emptyobj)
     {
         config = TinyJsonConfig.LoadConfig("CmdConfig.json", null, false);
     }
     return(config);
 }
Beispiel #2
0
        public static FileSystemWatcher WatchUserConfig(string filePath, UserConfigFileChangedHandler OnUserConfigFileChanged)
        {
            FileInfo          info = new FileInfo(filePath);
            FileSystemWatcher userConfigWatcher;

            var lastRead = File.GetLastWriteTime(info.FullName);

            userConfigWatcher = new FileSystemWatcher(info.Directory.FullName, info.Name);
            userConfigWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.CreationTime | NotifyFilters.Size | NotifyFilters.Attributes;
            userConfigWatcher.Changed     += delegate
            {
                DateTime lastWriteTime = File.GetLastWriteTime(info.FullName);
                if (lastWriteTime.Subtract(lastRead).TotalMilliseconds > 200)
                {
                    WatcherConfig watchConfig = null;
                    try
                    {
                        watchConfig = ConfigPool[filePath];
                        var encoding = watchConfig.Encode;

                        string content = LoadText(info.FullName, encoding);

                        watchConfig.Config         = TinyJsonConfig.Parse(content, encoding);
                        watchConfig.LastChangeTime = DateTime.Now;
                        Console.WriteLine("User configuration has changed, updated successfully :" + info.FullName);
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Updating user config failed:" + info.FullName);
                        throw;
                    }

                    // trigger our event
                    if (OnUserConfigFileChanged != null)
                    {
                        OnUserConfigFileChanged(watchConfig);
                    }
                }
                lastRead = lastWriteTime;
            };
            userConfigWatcher.EnableRaisingEvents = true;

            return(userConfigWatcher);
        }
Beispiel #3
0
        //public static event UserConfigFileChangedHandler OnUserConfigFileChanged;
        /// <summary>
        /// 加载json配置文件
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="enableWatch"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public static dynamic LoadConfig(string filePath, Encoding encoding = null, bool enableWatch = true, UserConfigFileChangedHandler OnUserConfigFileChanged = null)
        {
            filePath = FormatAbsFilePath(filePath);

            if (ConfigPool.ContainsKey(filePath))
            {
                return(ConfigPool[filePath].Config);
            }
            if (!File.Exists(filePath))
            {
                throw new ArgumentException("不存在Json配置文件:" + filePath);
            }
            if (encoding == null)
            {
                encoding = Encoding.Unicode;
            }

            string content = LoadText(filePath, encoding);

            var arrayJson = TinyJsonConfig.Parse(content, encoding);
            FileSystemWatcher userConfigWatcher = null;

            if (enableWatch)
            {
                userConfigWatcher = WatchUserConfig(filePath, OnUserConfigFileChanged);//监听配置文件变化
            }

            WatcherConfig _watchConfig = new WatcherConfig();

            _watchConfig.FilePath       = filePath;
            _watchConfig.Encode         = encoding;
            _watchConfig.Config         = arrayJson;
            _watchConfig.Watcher        = userConfigWatcher;
            _watchConfig.LastChangeTime = DateTime.Now;
            ConfigPool[filePath]        = _watchConfig;

            return(arrayJson);
        }