private ServiceResult HistoryReadAttribute(
ServerSystemContext context,
ComHdaClient client,
ReadRawModifiedDetails details,
TimestampsToReturn timestampsToReturn,
HistoryReadValueId nodeToRead,
HdaParsedNodeId parsedNodeId,
HistoryReadResult result)
{
// create the request or load it from a continuation point.
HdaHistoryReadAttributeRequest request = null;
if (nodeToRead.ContinuationPoint == null)
{
// create a new request.
request = new HdaHistoryReadAttributeRequest(parsedNodeId.RootId, parsedNodeId.AttributeId, details, nodeToRead);
// fetch all of the data at once.
result.StatusCode = client.ReadAttributeHistory(request);
}
else
{
request = LoadContinuationPoint(context, nodeToRead.ContinuationPoint) as HdaHistoryReadAttributeRequest;
if (request == null)
{
return StatusCodes.BadContinuationPointInvalid;
}
}
// select a subset of the results.
if (StatusCode.IsGood(result.StatusCode))
{
request.Results = new DataValueCollection();
request.GetHistoryResults(context, nodeToRead, request.Results);
}
// fill in the results.
if (request.Results != null)
{
HistoryData data = new HistoryData();
data.DataValues = request.Results;
result.HistoryData = new ExtensionObject(data);
}
// create a new continuation point.
if (!request.Completed)
{
result.ContinuationPoint = SaveContinuationPoint(context, request);
}
return result.StatusCode;
}