protected override ServiceResult ReadValueAttribute(
ISystemContext context,
NumericRange indexRange,
QualifiedName dataEncoding,
ref object value,
ref DateTime sourceTimestamp)
{
value = m_value;
ServiceResult result = ServiceResult.Good;
VariableCopyPolicy copyPolicy = VariableCopyPolicy.CopyOnRead;
// use default behavoir.
if (OnSimpleReadValue != null)
{
result = OnSimpleReadValue(
context,
this,
ref value);
if (ServiceResult.IsBad(result))
{
return result;
}
copyPolicy = VariableCopyPolicy.Never;
}
else
{
// check if a valid value exists.
if (value == null)
{
return StatusCodes.BadAttributeIdInvalid;
}
}
// apply the index range and encoding.
result = BaseVariableState.ApplyIndexRangeAndDataEncoding(context, indexRange, dataEncoding, ref value);
if (ServiceResult.IsBad(result))
{
return result;
}
// copy returned value.
if (copyPolicy == VariableCopyPolicy.CopyOnRead)
{
value = Utils.Clone(value);
}
return result;
}
#endregion