Пример #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="share"></param>
 /// <param name="fileInfo"></param>
 /// <param name="keyValueFinder"></param>
 public JsonConfigurationBuilder(IEnumerable <ShareConfigurationBuilder> share, ConfigFileInfo fileInfo, ICustomKeyValueFinder keyValueFinder)
 {
     this.share          = share;
     this.File           = fileInfo;
     this.Name           = this.File.File.Name.Replace(this.File.File.Extension, "").Trim(new[] { ' ', '.' });
     this.usingShareInfo = new List <ShareFileInfo>();
     this.keyValueFinder = keyValueFinder;
 }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        public ConfigurationWatcher(IEnumerable <ShareConfigurationBuilder> shareConfiguration, IEnumerable <IShareFileReference> appConfiguration, ICustomKeyValueFinder keyValueFinder, TimeSpan sleepTimeSpan) : base(null, typeof(ConfigurationWatcher).Name)
        {
            this.shareConfiguration = shareConfiguration == null ? new List <ShareConfigurationBuilder>() : shareConfiguration.ToList();
            this.appConfiguration   = appConfiguration == null ? new List <IShareFileReference>() : appConfiguration.ToList();
            this.keyValueFinder     = keyValueFinder;
            this.sleepTimeSpan      = sleepTimeSpan;
            this.appUniqueName      = new List <string>();
            this.encodings          = new Dictionary <string, Encoding>();
            this.moreTimeLimit      = new Dictionary <string, DateTime>();
            this.changeQueue        = new System.Collections.Concurrent.ConcurrentQueue <ChangeQueue>();
            this.fileWather         = new Dictionary <string, FileSystemWatcher>(StringComparer.OrdinalIgnoreCase);

            if (shareConfiguration != null)
            {
                foreach (var share in shareConfiguration)
                {
                    if (this.fileWather.ContainsKey(share.File.FullName) == false)
                    {
                        this.encodings[share.File.FullName] = share.Encoding;
                        var watcher = new Never.IO.FileWatcher(share.File)
                        {
                            EnableRaisingEvents = true
                        };
                        this.fileWather.Add(share.File.FullName, watcher);
                        this.moreTimeLimit.Add(share.File.FullName, DateTime.Now);
                        watcher.Created += ShareWatcher_Created;
                        watcher.Changed += ShareWatcher_Changed;
                        watcher.Deleted += ShareWatcher_Deleted;
                        watcher.Renamed += ShareWatcher_Renamed;
                    }
                }
            }

            if (appConfiguration != null)
            {
                foreach (var config in appConfiguration)
                {
                    if (this.fileWather.ContainsKey(config.Builder.File.File.FullName) == false)
                    {
                        this.encodings[config.Builder.File.File.FullName] = config.Builder.File.Encoding;
                        var watcher = new Never.IO.FileWatcher(config.Builder.File.File)
                        {
                            EnableRaisingEvents = true
                        };
                        this.fileWather.Add(config.Builder.File.File.FullName, watcher);
                        this.moreTimeLimit.Add(config.Builder.File.File.FullName, DateTime.Now);
                        watcher.Created += AppWatcher_Created;
                        watcher.Changed += AppWatcher_Changed;
                        watcher.Deleted += AppWatcher_Deleted;
                        watcher.Renamed += AppWatcher_Renamed;
                    }
                }
            }

            this.Replace(Change).Start();
        }
Пример #3
0
        /// <summary>
        /// 服务端
        /// </summary>
        /// <param name="startup"></param>
        /// <param name="shareFiles"></param>
        /// <param name="shareFileEventHandler"></param>
        /// <param name="fileChangeTimer">fileChangeTimer</param>
        /// <param name="appFiles"></param>
        /// <param name="keyValueFinder"></param>
        /// <param name="listenPoint"></param>
        /// <param name="configFileServer"></param>
        /// <param name="configurationWatcher"></param>
        /// <returns></returns>
        public static ApplicationStartup UseJsonConfigServer(this ApplicationStartup startup, IEnumerable <ConfigFileInfo> shareFiles, EventHandler <ShareFileEventArgs> shareFileEventHandler, IEnumerable <ConfigFileInfo> appFiles, ICustomKeyValueFinder keyValueFinder, EndPoint listenPoint, TimeSpan fileChangeTimer, out ConfigFileServer configFileServer, out ConfigurationWatcher configurationWatcher)
        {
            var shareBuilders = shareFiles == null ? new List <ShareConfigurationBuilder>() : shareFiles.Select(ta => new Never.Configuration.ConfigCenter.ShareConfigurationBuilder(ta)).ToList();

            shareBuilders.UseForEach(builder =>
            {
                if (shareFileEventHandler != null)
                {
                    builder.OnBuilding += shareFileEventHandler;
                }

                builder.Build();
            });

            var jsonBuilders = appFiles == null ? new List <JsonConfigurationBuilder>() : appFiles.Select(ta => new Never.Configuration.ConfigCenter.JsonConfigurationBuilder(shareBuilders, ta, keyValueFinder)).ToList();

            jsonBuilders.UseForEach(builder => { builder.Build(); });

            configurationWatcher = new Never.Configuration.ConfigCenter.ConfigurationWatcher(shareBuilders, jsonBuilders, keyValueFinder, fileChangeTimer)
            {
                ShareFileEventHandler = shareFileEventHandler,
            };
            var server = new Never.Configuration.ConfigCenter.Remoting.ConfigFileServer(listenPoint, configurationWatcher);

            configFileServer = server;
            return(startup);
        }
Пример #4
0
 /// <summary>
 /// 服务端
 /// </summary>
 /// <param name="startup"></param>
 /// <param name="shareFiles"></param>
 /// <param name="shareFileEventHandler"></param>
 /// <param name="appFiles"></param>
 /// <param name="keyValueFinder"></param>
 /// <param name="listenPoint"></param>
 /// <param name="configFileServer"></param>
 /// <param name="configurationWatcher"></param>
 /// <returns></returns>
 public static ApplicationStartup UseJsonConfigServer(this ApplicationStartup startup, IEnumerable <ConfigFileInfo> shareFiles, EventHandler <ShareFileEventArgs> shareFileEventHandler, IEnumerable <ConfigFileInfo> appFiles, ICustomKeyValueFinder keyValueFinder, EndPoint listenPoint, out ConfigFileServer configFileServer, out ConfigurationWatcher configurationWatcher)
 {
     return(UseJsonConfigServer(startup, shareFiles, shareFileEventHandler, appFiles, keyValueFinder, listenPoint, TimeSpan.FromMinutes(1), out configFileServer, out configurationWatcher));
 }
Пример #5
0
 /// <summary>
 ///
 /// </summary>
 public ConfigurationWatcher(IEnumerable <ShareConfigurationBuilder> shareConfiguration, IEnumerable <IShareFileReference> appConfiguration, ICustomKeyValueFinder keyValueFinder)
     : this(shareConfiguration, appConfiguration, keyValueFinder, TimeSpan.FromSeconds(60))
 {
 }