Example #1
0
        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);
            }
        }
Example #2
0
 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;
 }
Example #3
0
        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);
                }
            }
        }