public bool GetDataWriterData(List <string> signalNames, DateTime lasttime, out List <Signal> signals, out DateTime stime) { signals = new List <Signal>(); stime = StartTimeStamps.Find(x => x > lasttime); if (stime != DateTime.MinValue) { #if DEBUG Console.WriteLine("start time stamp in GetDataWriterData: " + stime.ToString("yyyyMMdd_HHmmss")); Console.WriteLine("number of timestamps in StartTimeStamps: " + StartTimeStamps.Count()); #endif DateTime etime; if (TimePairs.TryGetValue(stime, out etime)) { lock (_theInputSignalsLock) { foreach (var name in signalNames) { if (Signals.TryGetValue(name, out Dictionary <DateTime, Signal> sdict)) { if (sdict.TryGetValue(etime, out Signal sig)) { signals.Add(sig); } } } } } if (signals.Count == signalNames.Count) { lock (_theDataWriterLock) { if (_doneDataWriterFlags.TryGetValue(etime, out List <bool> list)) { list.Add(true); if (list.Count == NumberOfDataWriters) { _doneDataWriterFlags.Remove(etime); TimePairs.Remove(stime); StartTimeStamps.Remove(stime); } } } return(true); } else { return(false); } } else { return(false); } }
public void Clean() { Signals.Clear(); StartTimeStamps.Clear(); EndTimeStamps.Clear(); TimePairs.Clear(); FirstFile = true; ResumedTask = false; DataCompleted = false; FinishedSignatures.Clear(); _results.Clear(); _doneDataWriterFlags.Clear(); //FirstFileRead = false; }
public void AddData(List <Signal> e) { if (e != null && e.Count > 0) { var startT = e.FirstOrDefault().TimeStamps.FirstOrDefault(); if (FirstFile) { TimeZero = startT; //FirstFileRead = true; FirstFile = false; } //else if (TimeZero >= startT) //{ // throw new Exception("Possible data source files time order problem."); //} var endT = e.FirstOrDefault().TimeStamps.LastOrDefault(); //Console.WriteLine("Added end timestamp: " + endT.ToString("yyyyMMdd_HHmmss.ffffff") + " in " + e.FirstOrDefault().TimeStamps.Count() + " timestamps."); foreach (var sig in e) { var name = sig.PMUName + "_" + sig.SignalName; lock (_theInputSignalsLock) { if (!Signals.ContainsKey(name)) { Signals[name] = new Dictionary <DateTime, Signal>(); } Signals[name][endT] = sig; } } lock (_theDataWriterLock) { if (!_doneDataWriterFlags.ContainsKey(endT)) { _doneDataWriterFlags[endT] = new List <bool>(); } TimePairs[startT] = endT; StartTimeStamps.Add(startT); } lock (_theEndTimeStampsLock) { EndTimeStamps.Add(endT); } } }