Пример #1
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="settings">設定インスタンス</param>
 /// <param name="settingsFile">設定を保存するファイル名</param>
 /// <param name="saveDelay">保存ディレイを(ミリ秒単位)</param>
 public SettingsAutoSaver(
     SettingsImpl settings,
     string settingsFile,
     ICSLogger logger,
     int saveDelay = 300)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settigns");
     }
     if (settingsFile == null)
     {
         throw new ArgumentNullException("settingsFile");
     }
     if (logger == null)
     {
         throw new ArgumentNullException("logger");
     }
     if (saveDelay < 0)
     {
         throw new ArgumentOutOfRangeException("saveDelay", "saveDelayは0以上の整数である必要があります。");
     }
     Logger           = logger;
     SaveDelay        = saveDelay;
     SettingsFile     = settingsFile;
     SettingsTempFile = SettingsFile + ".temp";
     Settings         = settings;
     IsMonitoring     = false;
 }
        public void Serialize(System.IO.Stream stream, SettingsImpl settings)
        {
            var serializationInfoArray        = settings.SettingsData.Select(x => SerializeSerializaeInfo(x.Key, x.Value, settings.KnownTypes)).ToArray();
            DataContractSerializer serializer = new DataContractSerializer(typeof(KeyValueSerializationInfo[]));

            serializer.WriteObject(stream, serializationInfoArray);
        }
Пример #3
0
        public ICSSettings GetChildSettings(string tag, IEnumerable <Type> knownTypes)
        {
            if (settingsChildren_.ContainsKey(tag))
            {
                return(settingsChildren_[tag]);
            }
            else
            {
                var settings = new SettingsImpl(this, tag, knownTypes, Dispatcher);

                // 設定をロード
                var setTag = GetTaggedKey(settings.Tag, true);
                var setStr = Get <string>(setTag, null);
                if (setStr != null)
                {
                    using (var ms = new MemoryStream())
                        using (var writer = new StreamWriter(ms)) {
                            writer.Write(setStr);
                            writer.Flush();
                            ms.Seek(0, SeekOrigin.Begin);
                            childSettingsSerializer_.Deserialize(ms, settings);
                        }
                }

                // 子設定に追加
                settings.PropertyChanged       += settings_PropertyChanged;
                settingsChildren_[settings.Tag] = settings;
                return(settings);
            }
        }
        public void Deserialize(System.IO.Stream stream, SettingsImpl settings)
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(KeyValueSerializationInfo[]));
            var serializationInfoArray        = (KeyValueSerializationInfo[])serializer.ReadObject(stream);
            var deserialized = serializationInfoArray.Select(x => new { Key = x.Key, Value = DeserializSeserializeInfo(x, settings.KnownTypes) });

            settings.Clear();
            foreach (var des in deserialized)
            {
                settings.Set(des.Key, des.Value);
            }
        }
Пример #5
0
        protected SettingsImpl(SettingsImpl parentSettings, string tag, IEnumerable <Type> knownTypes, ICSActionDispatcher dispatcher = null)
            : this(tag, knownTypes, dispatcher)
        {
            if (parentSettings == null)
            {
                throw new ArgumentNullException("parentSettings");
            }
            ParentSettings = parentSettings;

            // タグ編集
            List <string> tags     = new List <string>();
            var           settings = this;

            while (settings != null)
            {
                tags.Add(settings.Tag);
                settings = settings.ParentSettings;
            }
            tags.Reverse();
            Tag = string.Join("_", tags);
        }