Opc.Ua.Com.Client.ComDaClient.Da30ReadItemValues C# (CSharp) Method

Da30ReadItemValues() private method

Reads the values using the DA3 interfaces.
private Da30ReadItemValues ( List requests ) : void
requests List The requests.
return void
        private void Da30ReadItemValues(List<ReadRequest> requests)
        {
            string[] itemIds = new string[requests.Count];
            int[] maxAge = new int[requests.Count];
            List<int> requestIndexes = new List<int>();

            int count = 0;

            for (int ii = 0; ii < requests.Count; ii++)
            {
                if (!requests[ii].ValueRequired)
                {
                    continue;
                }

                itemIds[count] = requests[ii].ItemId;
                maxAge[count] = 0;
                requestIndexes.Add(ii);
                count++;
            }

            if (count <= 0)
            {
                return;
            }

            IntPtr ppValues = IntPtr.Zero;
            IntPtr ppQualities = IntPtr.Zero;
            IntPtr ppTimeStamps = IntPtr.Zero;
            IntPtr ppErrors = IntPtr.Zero;

            string methodName = "IOPCItemIO.Read";

            try
            {
                IOPCItemIO server = BeginComCall<IOPCItemIO>(methodName, true);
                
                server.Read(
                    requestIndexes.Count, 
                    itemIds, 
                    maxAge, 
                    out ppValues, 
                    out ppQualities, 
                    out ppTimeStamps, 
                    out ppErrors);
            }
            catch (Exception e)
            {
                ComUtils.TraceComError(e, methodName);
                return;
            }
            finally
            {
                EndComCall(methodName);
            }

            System.Runtime.InteropServices.ComTypes.FILETIME[] timeStamps = ComUtils.GetFILETIMEs(ref ppTimeStamps, requestIndexes.Count);
            object[] values = ComUtils.GetVARIANTs(ref ppValues, count, true);
            short[] qualities = ComUtils.GetInt16s(ref ppQualities, count, true);
            int[] errors = ComUtils.GetInt32s(ref ppErrors, count, true);

            DaValue[] daValues = ComDaGroup.GetItemValues(count, values, qualities, timeStamps, errors);

            for (int ii = 0; ii < requestIndexes.Count; ii++)
            {
                requests[requestIndexes[ii]].Value = daValues[ii];
            }
        }