private List<HdaReadRequest> CreateReadRequests(
Session session,
DateTime startTime,
DateTime endTime,
int serverHandle,
uint[] attributeIds,
ReadRawModifiedDetails details)
{
if (startTime == DateTime.MinValue)
{
throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
}
// check for the special case where current values are requested.
if (endTime == DateTime.MinValue && startTime.AddSeconds(10) < DateTime.UtcNow)
{
throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
}
// specify the parameters for the request.
details.StartTime = startTime;
details.EndTime = endTime;
details.IsReadModified = false;
details.NumValuesPerNode = 0;
details.ReturnBounds = true;
// look up server handle.
HdaItemHandle handle = m_itemManager.LookupHandle(serverHandle);
if (handle == null)
{
throw ComUtils.CreateComException(ResultIds.E_INVALIDHANDLE);
}
// get the node ids for the requested attributes.
NodeId[] nodeIds = null;
int[] errors = m_itemManager.GetAttributeHistoryNodeIds(
session,
handle,
attributeIds,
out nodeIds);
// build the list of requests.
List<HdaReadRequest> requests = new List<HdaReadRequest>();
for (int ii = 0; ii < attributeIds.Length; ii++)
{
HdaReadRequest request = new HdaReadRequest();
requests.Add(request);
// initialize request.
request.Handle = handle;
request.AttributeId = attributeIds[ii];
if (request.Handle == null)
{
request.Error = ResultIds.E_INVALIDHANDLE;
continue;
}
request.ClientHandle = request.Handle.ClientHandle;
// check for errors.
if (errors[ii] != ResultIds.S_OK)
{
request.Error = errors[ii];
request.IsComplete = true;
continue;
}
request.NodeId = nodeIds[ii];
}
return requests;
}