예제 #1
0
        public void LoadConfig(string configPath)
        {
            XmlReaderSettings xrs = new XmlReaderSettings();

            xrs.IgnoreWhitespace = true;
            xrs.IgnoreComments   = true;

            try{
                XmlReader reader = XmlReader.Create(configPath, xrs);

                reader.ReadStartElement("sensor-track");
                var id   = reader.GetAttribute("id");
                var name = reader.GetAttribute("name");

                while (true)
                {
                    if (reader.NodeType != XmlNodeType.Element)
                    {
                        if (!reader.Read())
                        {
                            break;
                        }
                        continue;
                    }
                    switch (reader.Name)
                    {
                    case "track-passive":
                        this.TrackPassive = "true" == reader.ReadElementContentAsString();
                        break;

                    case "track-accumulator":
                        this.TrackAccum = "true" == reader.ReadElementContentAsString();
                        break;

                    case "track":
                        SensorTrackData set = new SensorTrackData();
                        set.id     = reader.GetAttribute("sensor");
                        set.period = ParseTimeSpan(reader.GetAttribute("period"));
                        set.gap    = ParseTimeSpan(reader.GetAttribute("gap"));
                        set.length = ParseTimeSpan(reader.GetAttribute("length"));
                        if (set.id != null && !Settings.ContainsKey(set.id))
                        {
                            Settings.Add(set.id, set);
                        }
                        reader.Read();
                        break;

                    default:
                        reader.Read();
                        break;
                    }
                }
                reader.Close();
            }catch (FileNotFoundException) {
            }catch (Exception e) {
                Logger.error("SensorTrack", "failed init", e);
            }
        }
예제 #2
0
        protected virtual void SensorChanged(Sensor sensor)
        {
            SensorTrackData set;

            if (!Settings.TryGetValue(sensor.ID, out set))
            {
                set    = new SensorTrackData();
                set.id = sensor.ID;
                Settings.Add(set.id, set);
            }

            if (set.LastTimeStamp == sensor.TimeStamp)
            {
                return;
            }

            if (Logger.DUMP)
            {
                Logger.dump("SensorTrack", "SensorChanged " + sensor.ID);
            }

            lock (set)
            {
                if (set.length > 0 && set.stopat == 0)
                {
                    set.stopat = sensor.TimeStamp + set.length;
                }
                if (set.stopat != 0 && sensor.TimeStamp >= set.stopat)
                {
                    set.startat = sensor.TimeStamp + set.gap;
                    set.stopat  = 0;
                    Registry.RemoveListener(sensor, this.SensorChanged);
                    //TODO: raise timer
                }

                StoreSensor(sensor);
            }
        }
예제 #3
0
        protected virtual void StoreSensorData(SensorTrackData set)
        {
            lock (set)
            {
                try
                {
                    var fs = new FileStream(Path.Combine(DataPath, VersionID + set.id), FileMode.Append);
                    var sw = new BinaryWriter(fs);

                    for (int i = 0; i < set.history_t.Count(); i++)
                    {
                        sw.Write(set.history_t[i]);
                        sw.Write(set.history_v[i]);
                    }
                    set.history_t.Clear();
                    set.history_v.Clear();
                    sw.Close();
                    fs.Close();
                }catch (Exception e) {
                    Logger.error("StoreSensorData", "fail", e);
                }
            }
        }
예제 #4
0
파일: SensorTrack.cs 프로젝트: cail/hobd
        protected virtual void StoreSensorData(SensorTrackData set)
        {
            lock(set)
             {
             try
             {
                 var fs = new FileStream(Path.Combine(DataPath, VersionID + set.id), FileMode.Append);
                 var sw = new BinaryWriter(fs);

                 for(int i = 0; i < set.history_t.Count(); i++)
                 {
                     sw.Write(set.history_t[i]);
                     sw.Write(set.history_v[i]);
                 }
                 set.history_t.Clear();
                 set.history_v.Clear();
                 sw.Close();
                 fs.Close();
             }catch(Exception e){
                 Logger.error("StoreSensorData", "fail", e);
             }
             }
        }
예제 #5
0
파일: SensorTrack.cs 프로젝트: cail/hobd
        protected virtual void SensorChanged(Sensor sensor)
        {
            SensorTrackData set;
            if (!Settings.TryGetValue(sensor.ID, out set))
            {
            set = new SensorTrackData();
            set.id = sensor.ID;
            Settings.Add(set.id, set);
            }

            if (set.LastTimeStamp == sensor.TimeStamp)
            return;

            if (Logger.DUMP) Logger.dump("SensorTrack", "SensorChanged " +sensor.ID);

            lock(set)
            {
            if (set.length > 0 && set.stopat == 0)
            {
                set.stopat = sensor.TimeStamp + set.length;
            }
            if (set.stopat != 0 && sensor.TimeStamp >= set.stopat)
            {
                set.startat = sensor.TimeStamp + set.gap;
                set.stopat = 0;
                Registry.RemoveListener(sensor, this.SensorChanged);
                //TODO: raise timer
            }

            StoreSensor(sensor);
            }
        }
예제 #6
0
파일: SensorTrack.cs 프로젝트: cail/hobd
        public void LoadConfig(string configPath)
        {
            XmlReaderSettings xrs = new XmlReaderSettings();
            xrs.IgnoreWhitespace = true;
            xrs.IgnoreComments = true;

            try{
            XmlReader reader = XmlReader.Create(configPath, xrs);

            reader.ReadStartElement("sensor-track");
            var id = reader.GetAttribute("id");
            var name = reader.GetAttribute("name");

            while(true){
                if (reader.NodeType != XmlNodeType.Element){
                    if (!reader.Read())
                        break;
                    continue;
                }
                switch (reader.Name) {
                    case "track-passive":
                        this.TrackPassive = "true" == reader.ReadElementContentAsString();
                        break;
                    case "track-accumulator":
                        this.TrackAccum = "true" == reader.ReadElementContentAsString();
                        break;
                    case "track":
                        SensorTrackData set = new SensorTrackData();
                        set.id = reader.GetAttribute("sensor");
                        set.period = ParseTimeSpan(reader.GetAttribute("period"));
                        set.gap = ParseTimeSpan(reader.GetAttribute("gap"));
                        set.length = ParseTimeSpan(reader.GetAttribute("length"));
                        if (set.id != null && !Settings.ContainsKey(set.id))
                            Settings.Add(set.id, set);
                        reader.Read();
                        break;
                    default:
                        reader.Read();
                        break;
                }
            }
            reader.Close();
            }catch(FileNotFoundException){
            }catch(Exception e){
            Logger.error("SensorTrack", "failed init", e);
            }
        }