using System;
using System.Runtime.Serialization;
namespace WingServerCommon.Config.Parameters
{
///
/// Range parameter base type
///
/// Type of T
[DataContract]
public abstract class RangeParameterBase : IParameter where T : struct
{
private T _value;
private T _initialValue;
///
/// The value saved in setting file.Some times the value will be set but not saved to setting file.
///
public T SavedValue { get; protected set; }
///
/// value changed event
///
public event EventHandler ValueChanged;
///
/// Min value
///
[DataMember]
public T MinValue { get; set; }
///
/// Max value
///
[DataMember]
public T MaxValue { get; set; }
public T InitialValue => _initialValue;
///
/// parameter value
///
[DataMember]
public T Value
{
get
{
return _value;
}
set
{
if (!Equals(_value, value))
{
_value = value;
OnValueChanged();
}
}
}
///
/// parameter name
///
public string Name { get; set; }
///
/// parameter section
///
public string Section { get; set; }
///
/// parameter value changed state
///
public bool IsChanged => !Equals(_initialValue, Value);
///
/// notify value changed
///
private void OnValueChanged()
{
ValueChanged?.Invoke(this, EventArgs.Empty);
}
///
/// change initial value
///
public void ChangeInitialValue()
{
_initialValue = Value;
SavedValue = Value;
}
public void ChangeSavedValue()
{
SavedValue = Value;
}
///
/// Set user value.
///
/// user value.
public abstract void ChangeParameterValue(object value);
}
///
/// Range long parameter.
///
[DataContract]
public class RangeLongParameter : RangeParameterBase
{
public override void ChangeParameterValue(object value)
{
var longParameter = value as LongParameter;
if (longParameter != null)
{
Value = longParameter.Value;
SavedValue = Value;
}
}
}
///
/// Range int parameter.
///
[DataContract]
public class RangeIntParameter : RangeParameterBase
{
public override void ChangeParameterValue(object value)
{
var intParameter = value as IntParameter;
if (intParameter != null)
{
Value = intParameter.Value;
SavedValue = Value;
}
}
}
}