// 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()); }