示例#1
0
        // YDataSet parser for stream list
        protected internal virtual async Task <int> _parse(string json_str)
        {
            YJSONObject json;
            YJSONArray  jstreams;
            double      streamStartTime;
            double      streamEndTime;

            json = new YJSONObject(json_str);
            json.parse();
            _functionId = json.getString("id");
            _unit       = json.getString("unit");
            if (json.has("calib"))
            {
                _calib    = YAPIContext.imm_decodeFloats(json.getString("calib"));
                _calib[0] = _calib[0] / 1000;
            }
            else
            {
                _calib = YAPIContext.imm_decodeWords(json.getString("cal"));
            }
            _streams  = new List <YDataStream>();
            _preview  = new List <YMeasure>();
            _measures = new List <YMeasure>();
            jstreams  = json.getYJSONArray("streams");
            for (int i = 0; i < jstreams.Length; i++)
            {
                YDataStream stream = _parent.imm_findDataStream(this, jstreams.getString(i));
                // the timestamp in the data streams is the end of the measure, so the actual
                // measurement start time is computed as one interval before the first timestamp
                streamStartTime = await stream.get_realStartTimeUTC() * 1000;

                streamEndTime = streamStartTime + await stream.get_realDuration() * 1000;

                if (_startTimeMs > 0 && streamEndTime <= _startTimeMs)
                {
                    // this stream is too early, drop it
                }
                else if (_endTimeMs > 0 && streamStartTime >= _endTimeMs)
                {
                    // this stream is too late, drop it
                }
                else
                {
                    _streams.Add(stream);
                }
            }
            _progress = 0;
            return(await this.get_progress());
        }