/// <summary> /// Writes all changes down to persistence. /// </summary> /// <param name="persistentSerializer">The persistent serializer.</param> void IPersistentData.Write(IPersistentSerializer persistentSerializer) { lock (_persistentValues) { foreach (var persistentValue in _persistentValues.Values) { if (persistentValue.Dirty) Write(persistentValue, persistentSerializer); } } }
/// <summary> /// Writes all changes down to persistence. /// </summary> /// <param name="persistentSerializer">The persistent serializer.</param> void IPersistentData.Write(IPersistentSerializer persistentSerializer) { lock (_persistentValues) { foreach (var persistentValue in _persistentValues.Values) { if (persistentValue.Dirty) { Write(persistentValue, persistentSerializer); } } } }
/// <summary> /// Sets the value. /// </summary> /// <param name="name">The name.</param> /// <param name="value">The value.</param> /// <param name="valueType"></param> /// <param name="writeNow">if set to <c>true</c> persists the value immediately.</param> /// <param name="persistentSerializer">The persistent serializer.</param> void IPersistentData.SetValue(string name, object value, Type valueType, bool writeNow, IPersistentSerializer persistentSerializer) { lock (_persistentValues) { PersistentValue persistentValue; // if the value is not found (this is probably rare), then a container is created if (!_persistentValues.TryGetValue(name, out persistentValue)) { persistentValue = new PersistentValue { Name = name, ValueType = valueType, }; _persistentValues[name] = persistentValue; } // then the value is set anyway // TODO: conditional dirty (if value actually changes) persistentValue.Value = value; persistentValue.Dirty = true; // if it has to be written immediately, then do it if (writeNow) Write(persistentValue, persistentSerializer); } }
/// <summary> /// Gets the persistent value. /// </summary> /// <param name="name">The name.</param> /// <param name="valueType">Type of the value.</param> /// <param name="defaultValue">The default value.</param> /// <param name="persistentSerializer">The persistent serializer.</param> /// <returns></returns> private PersistentValue GetPersistentValue(string name, Type valueType, object defaultValue, IPersistentSerializer persistentSerializer) { lock (_persistentValues) { if (!_persistentValues.TryGetValue(name, out var persistentValue)) { // value is read from serializer only if not found in memory if (!persistentSerializer.TryLoadValue(name, valueType, out var value)) { value = defaultValue; } persistentValue = new PersistentValue { Name = name, Value = value, ValueType = valueType, Dirty = false, }; } return(persistentValue); } }
/// <summary> /// Gets a value, or default value. /// </summary> /// <param name="name">The name.</param> /// <param name="valueType"></param> /// <param name="defaultValue">The default value.</param> /// <param name="persistentSerializer">The persistent serializer.</param> /// <returns></returns> object IPersistentData.GetValue(string name, Type valueType, object defaultValue, IPersistentSerializer persistentSerializer) { return(GetPersistentValue(name, valueType, defaultValue, persistentSerializer).Value); }
/// <summary> /// Writes the specified persistent value. /// </summary> /// <param name="persistentValue">The persistent value.</param> /// <param name="persistentSerializer">The persistent serializer.</param> private static void Write(PersistentValue persistentValue, IPersistentSerializer persistentSerializer) { persistentSerializer.SaveValue(persistentValue.Name, persistentValue.ValueType, persistentValue.Value); persistentValue.Dirty = false; }
/// <summary> /// Sets the value. /// </summary> /// <param name="name">The name.</param> /// <param name="value">The value.</param> /// <param name="valueType"></param> /// <param name="writeNow">if set to <c>true</c> persists the value immediately.</param> /// <param name="persistentSerializer">The persistent serializer.</param> void IPersistentData.SetValue(string name, object value, Type valueType, bool writeNow, IPersistentSerializer persistentSerializer) { lock (_persistentValues) { // if the value is not found (this is probably rare), then a container is created if (!_persistentValues.TryGetValue(name, out var persistentValue)) { persistentValue = new PersistentValue { Name = name, ValueType = valueType, }; _persistentValues[name] = persistentValue; } // then the value is set anyway // TODO: conditional dirty (if value actually changes) persistentValue.Value = value; persistentValue.Dirty = true; // if it has to be written immediately, then do it if (writeNow) { Write(persistentValue, persistentSerializer); } } }
/// <summary> /// Gets a value, or default value. /// </summary> /// <param name="name">The name.</param> /// <param name="valueType"></param> /// <param name="defaultValue">The default value.</param> /// <param name="persistentSerializer">The persistent serializer.</param> /// <returns></returns> object IPersistentData.GetValue(string name, Type valueType, object defaultValue, IPersistentSerializer persistentSerializer) { return GetPersistentValue(name, valueType, defaultValue, persistentSerializer).Value; }
/// <summary> /// Gets the persistent value. /// </summary> /// <param name="name">The name.</param> /// <param name="valueType">Type of the value.</param> /// <param name="defaultValue">The default value.</param> /// <param name="persistentSerializer">The persistent serializer.</param> /// <returns></returns> private PersistentValue GetPersistentValue(string name, Type valueType, object defaultValue, IPersistentSerializer persistentSerializer) { lock (_persistentValues) { PersistentValue persistentValue; if (!_persistentValues.TryGetValue(name, out persistentValue)) { // value is read from serializer only if not found in memory object value; if (!persistentSerializer.TryLoadValue(name, valueType, out value)) value = defaultValue; persistentValue = new PersistentValue { Name = name, Value = value, ValueType = valueType, Dirty = false, }; } return persistentValue; } }