/// <summary>
/// Reads the item values and stores the results in the request object.
/// </summary>
/// <param name="requests">The requests.</param>
private void Da20ReadItemValues(List<ReadRequest> requests)
{
// lock (m_groupLock)
{
// if (m_group == null)
//{
ComDaGroup m_group = new ComDaGroup(this, false);
//}
try
{
int count1 = 0;
GroupItem[] items = new GroupItem[requests.Count];
ReadRequest[] addItemRequests = new ReadRequest[requests.Count];
// create the items in the temporary group.
for (int ii = 0; ii < requests.Count; ii++)
{
ReadRequest request = requests[ii];
if (request == null)
{
continue;
}
if (!request.ValueRequired)
{
continue;
}
// add the item.
items[count1] = m_group.CreateItem(request.ItemId, 0, 0, true);
addItemRequests[count1] = request;
count1++;
}
// create the items on the server.
m_group.ApplyChanges();
// build the list of values to write.
int count2 = 0;
int[] serverHandles = new int[count1];
ReadRequest[] readRequests = new ReadRequest[count1];
for (int ii = 0; ii < count1; ii++)
{
// check for error on create.
GroupItem item = items[ii];
ReadRequest request = addItemRequests[ii];
if (item.ErrorId < 0)
{
request.Value = new DaValue();
request.Value.Error = item.ErrorId;
continue;
}
serverHandles[count2] = item.ServerHandle;
readRequests[count2] = request;
count2++;
}
if (count2 > 0)
{
// write values to the server.
DaValue[] values = m_group.SyncRead(serverHandles, count2);
// read the values.
for (int ii = 0; ii < count2; ii++)
{
if (values != null && values.Length > ii)
{
readRequests[ii].Value = values[ii];
}
else
{
readRequests[ii].Value = new DaValue() { Error = ResultIds.E_FAIL, Timestamp = DateTime.UtcNow };
}
}
// delete the items.
for (int ii = 0; ii < count1; ii++)
{
GroupItem item = items[ii];
if (item.ErrorId >= 0)
{
m_group.RemoveItem(item);
}
}
m_group.ApplyChanges();
}
}
finally
{
// delete the group and items.
m_group.Delete();
}
}
}