Opc.Ua.Com.Server.ComHdaProxy.ProcessReadResults C# (CSharp) Method

ProcessReadResults() private method

Processes the results of a history read operation.
private ProcessReadResults ( Session session, HistoryReadResult result, uint attributeId, List values, List modificationInfos ) : int
session Opc.Ua.Client.Session
result HistoryReadResult
attributeId uint
values List
modificationInfos List
return int
        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