Пример #1
0
        public void Save(ConfigurationResponse configurationResponse)
        {
            var tempFilePath  = this.GetConfigTempFilePath(configurationResponse);
            var tempTokenPath = tempFilePath + tokenFileExt;

            using (var fileStream = File.OpenWrite(tempFilePath))
            {
                if (fileStream.Length > configurationResponse.StartPosition)
                {
                    fileStream.SetLength(configurationResponse.StartPosition);
                }

                fileStream.Seek(configurationResponse.StartPosition, SeekOrigin.Begin);

                fileStream.Write(configurationResponse.Stream, 0, configurationResponse.Stream.Length);

                //configurationResponse.Stream.CopyTo(fileStream);
            }

            if (configurationResponse.StartPosition == 0)
            {
                FileSystemHelper.WriteAllText(tempTokenPath, configurationResponse.Token);
            }

            if (configurationResponse.IsFinal)
            {
                var configPath      = this.GetConfigFilePath(configurationResponse);
                var configTokenPath = configPath + tokenFileExt;
                var bakFile         = configPath + ".bak";
                var bakTokenFile    = configTokenPath + ".bak";

                if (File.Exists(configPath))
                {
                    FileSystemHelper.DeleteFile(bakFile);
                    FileSystemHelper.MoveFile(configPath, bakFile);
                }

                FileSystemHelper.DeleteFile(configPath);
                FileSystemHelper.MoveFile(tempFilePath, configPath);
                FileSystemHelper.DeleteFile(tempFilePath);

                if (File.Exists(configTokenPath))
                {
                    FileSystemHelper.DeleteFile(bakTokenFile);
                    FileSystemHelper.MoveFile(configTokenPath, bakTokenFile);
                }

                FileSystemHelper.DeleteFile(configTokenPath);
                FileSystemHelper.MoveFile(tempTokenPath, configTokenPath);
                FileSystemHelper.DeleteFile(tempTokenPath);

                // нотификации
                foreach (var subscriber in subscribers)
                {
                    if (subscriber.ProviderKey == configurationResponse.ProviderKey)
                    {
                        try
                        {
                            subscriber.OnUpdate(() => File.OpenRead(configPath));
                        }
                        catch (Exception)
                        {
                            // TODO instrumentation
                            // ignore ?
                            //throw;
                        }
                    }
                }
            }
            else
            {
            }
        }
Пример #2
0
 private string GetConfigFilePath(ConfigurationResponse configurationResponse)
 {
     return(Path.Combine(this.configsDir, configurationResponse.ProviderKey + configExt));
 }