private List<HdaReadRequest> CreateReadRequests(
Session session,
DateTime startTime,
DateTime endTime,
uint numValues,
bool returnBounds,
int[] serverHandles,
ReadRawModifiedDetails details)
{
// start time or end time must be specified.
if (startTime == DateTime.MinValue && endTime == DateTime.MinValue)
{
throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
}
// num values must be specified if start or end time is missing.
if (numValues == 0 && (startTime == DateTime.MinValue || endTime == DateTime.MinValue))
{
throw ComUtils.CreateComException(ResultIds.E_INVALIDARG);
}
// can't exceed the limits imposed by the server configuration.
if (m_configuration.MaxReturnValues > 0 && numValues > m_configuration.MaxReturnValues)
{
throw ComUtils.CreateComException(ResultIds.E_MAXEXCEEDED);
}
details.StartTime = startTime;
details.EndTime = endTime;
details.IsReadModified = false;
details.NumValuesPerNode = numValues;
details.ReturnBounds = returnBounds;
// build the list of requests.
List<HdaReadRequest> requests = new List<HdaReadRequest>();
for (int ii = 0; ii < serverHandles.Length; ii++)
{
HdaReadRequest request = new HdaReadRequest();
requests.Add(request);
// look up server handle.
request.Handle = m_itemManager.LookupHandle(serverHandles[ii]);
if (request.Handle == null)
{
request.Error = ResultIds.E_INVALIDHANDLE;
continue;
}
// initialize request.
request.NodeId = request.Handle.NodeId;
request.ClientHandle = request.Handle.ClientHandle;
}
return requests;
}