private int ProcessReadResults(
Session session,
HistoryReadResult result,
uint attributeId,
List<DaValue> values,
List<ModificationInfo> modificationInfos)
{
// check for item level error.
int error = MapReadStatusToErrorCode(result.StatusCode);
if (error < 0)
{
return error;
}
// check if no data found.
if (result.StatusCode == StatusCodes.GoodNoData)
{
return ResultIds.S_NODATA;
}
// extract the history data.
HistoryData data = ExtensionObject.ToEncodeable(result.HistoryData) as HistoryData;
if (data == null)
{
return ResultIds.E_FAIL;
}
// check for modified data.
HistoryModifiedData modifiedData = data as HistoryModifiedData;
if (modificationInfos != null)
{
if (modifiedData == null)
{
return ResultIds.E_FAIL;
}
modificationInfos.AddRange(modifiedData.ModificationInfos);
}
// convert the values.
for (int ii = 0; ii < data.DataValues.Count; ii++)
{
DaValue value = GetAttributeValue(session, m_mapper, attributeId, data.DataValues[ii]);
values.Add(value);
// ensure matching modification info record exists.
if (modificationInfos != null)
{
if (modifiedData == null || ii >= modifiedData.ModificationInfos.Count)
{
modificationInfos.Add(new ModificationInfo());
}
else
{
modificationInfos.Add(modifiedData.ModificationInfos[ii]);
}
}
}
// check if no data found.
if (result.StatusCode == StatusCodes.GoodMoreData)
{
return ResultIds.S_MOREDATA;
}
return ResultIds.S_OK;
}
#endregion