/// <summary> /// Parses response from a current or sample request, updates changed data items and fires events /// </summary> /// <param name="response">IRestResponse from the MTConnect request</param> private void ParseStream(IRestResponse response) { using (StringReader sr = new StringReader(response.Content)) { var xdoc = XDocument.Load(sr); _lastSequence = Convert.ToInt64(xdoc.Descendants().First(e => e.Name.LocalName == "Header") .Attribute("lastSequence").Value); var xmlDataItems = xdoc.Descendants() .Where(e => e.Attributes().Any(a => a.Name.LocalName == "dataItemId")); if (xmlDataItems.Any()) { var dataItems = xmlDataItems.Select(e => new { id = e.Attribute("dataItemId").Value, timestamp = DateTime.Parse(e.Attribute("timestamp").Value, null, System.Globalization.DateTimeStyles.RoundtripKind), value = e.Value }) .OrderBy(i => i.timestamp) .ToList(); foreach (var item in dataItems) { var dataItem = _dataItemsDictionary[item.id]; var sample = new DataItemSample(item.value.ToString(), item.timestamp); dataItem.AddSample(sample); } } } }
/// <summary> /// Adds a sample to the value buffer and removes the oldest value if the buffer is full /// </summary> /// <param name="newSample">The new sample to add</param> internal void AddSample(DataItemSample newSample) { dataItemSamples.Enqueue(newSample); while (dataItemSamples.Count > BufferSize) { dataItemSamples.Dequeue(); } sampleAddedHandler(); }
/// <summary> /// Adds a sample to the value buffer and removes the oldest value if the buffer is full /// </summary> /// <param name="newSample">The new sample to add</param> internal void AddSample(DataItemSample newSample) { dataItemSamples.Enqueue(newSample); while(dataItemSamples.Count > BufferSize) { dataItemSamples.Dequeue(); } sampleAddedHandler(); }
/// <summary> /// Adds a sample to the value buffer and removes the oldest value if the buffer is full /// </summary> /// <param name="newSample">The new sample to add</param> internal void AddSample(DataItemSample newSample) { _dataItemSamples.Add(newSample); _dataItemSamples.RemoveRange(0, Math.Max(0, _dataItemSamples.Count - BufferSize)); }