/// <summary> /// Builds a list of all data streams hold by the data logger (legacy method). /// The caller must pass by reference an empty array to hold YDataStream /// objects, and the function fills it with objects describing available /// data sequences. /// /// This is the old way to retrieve data from the DataLogger. /// For new applications, you should rather use get_dataSets() /// method, or call directly get_recordedData() on the /// sensor object. /// </summary> /// <param name="v"> : an array of YDataStream objects to be filled in /// </param> /// <returns> YAPI.SUCCESS if the call succeeds. /// </returns> /// <exception cref="YAPI_Exception"> on error </exception> public virtual async Task <int> get_dataStreams(List <YDataStream> v) { byte[] loadval = await getData(null, null); YJSONArray jsonAllStreams = new YJSONArray(YAPI.DefaultEncoding.GetString(loadval)); jsonAllStreams.parse(); if (jsonAllStreams.Length == 0) { return(YAPI.SUCCESS); } if (jsonAllStreams.get(0) is YJSONArray) { // old datalogger format: [runIdx, timerel, utc, interval] _throw(YAPI.NOT_SUPPORTED, "Old datalogger is no more supported. Please upgrade your device."); return(YAPI.NOT_SUPPORTED); } else { // new datalogger format: {"id":"...","unit":"...","streams":["...",...]} List <YDataSet> sets = await this.parse_dataSets(YAPI.DefaultEncoding.GetBytes(jsonAllStreams.ToString())); for (int j = 0; j < sets.Count; j++) { List <YDataStream> ds = await sets[j].get_privateDataStreams(); for (int si = 0; si < ds.Count; si++) { v.Add(ds[si]); } } return(YAPI.SUCCESS); } }
public void parseWithRef(YJSONObject reference) { if (reference != null) { try { YJSONArray yzon = new YJSONArray(_data, _data_start, _data_boundary); yzon.parse(); convert(reference, yzon); return; } catch (Exception) { } } this.parse(); }
protected internal virtual List <string> imm_json_get_array(byte[] json) { YJSONArray array = new YJSONArray(YAPI.DefaultEncoding.GetString(json)); array.parse(); List <string> list = new List <string>(); int len = array.Length; for (int i = 0; i < len; i++) { YJSONContent o = array.get(i); list.Add(o.toJSON()); } return(list); }
public override int parse() { string current_name = ""; int name_start = _data_start; int cur_pos = SkipGarbage(_data, _data_start, _data_boundary); if (_data.Length <= cur_pos || _data[cur_pos] != '{') { throw new System.Exception(FormatError("Opening braces was expected", cur_pos)); } cur_pos++; Tjstate state = Tjstate.JWAITFORNAME; while (cur_pos < _data_boundary) { char sti = _data[cur_pos]; switch (state) { case Tjstate.JWAITFORNAME: if (sti == '"') { state = Tjstate.JWAITFORENDOFNAME; name_start = cur_pos + 1; } else if (sti == '}') { _data_len = cur_pos + 1 - _data_start; return(_data_len); } else { if (sti != ' ' && sti != '\n' && sti != '\r') { throw new System.Exception(FormatError("invalid char: was expecting \"", cur_pos)); } } break; case Tjstate.JWAITFORENDOFNAME: if (sti == '"') { current_name = _data.Substring(name_start, cur_pos - name_start); state = Tjstate.JWAITFORCOLON; } else { if (sti < 32) { throw new System.Exception(FormatError("invalid char: was expecting an identifier compliant char", cur_pos)); } } break; case Tjstate.JWAITFORCOLON: if (sti == ':') { state = Tjstate.JWAITFORDATA; } else { if (sti != ' ' && sti != '\n' && sti != '\r') { throw new System.Exception( FormatError("invalid char: was expecting \"", cur_pos)); } } break; case Tjstate.JWAITFORDATA: if (sti == '{') { YJSONObject jobj = new YJSONObject(_data, cur_pos, _data_boundary); int len = jobj.parse(); cur_pos += len; parsed.Add(current_name, jobj); _keys.Add(current_name); state = Tjstate.JWAITFORNEXTSTRUCTMEMBER; //cur_pos is already incremented continue; } else if (sti == '[') { YJSONArray jobj = new YJSONArray(_data, cur_pos, _data_boundary); int len = jobj.parse(); cur_pos += len; parsed.Add(current_name, jobj); _keys.Add(current_name); state = Tjstate.JWAITFORNEXTSTRUCTMEMBER; //cur_pos is already incremented continue; } else if (sti == '"') { YJSONString jobj = new YJSONString(_data, cur_pos, _data_boundary); int len = jobj.parse(); cur_pos += len; parsed.Add(current_name, jobj); _keys.Add(current_name); state = Tjstate.JWAITFORNEXTSTRUCTMEMBER; //cur_pos is already incremented continue; } else if (sti == '-' || (sti >= '0' && sti <= '9')) { YJSONNumber jobj = new YJSONNumber(_data, cur_pos, _data_boundary); int len = jobj.parse(); cur_pos += len; parsed.Add(current_name, jobj); _keys.Add(current_name); state = Tjstate.JWAITFORNEXTSTRUCTMEMBER; //cur_pos is already incremented continue; } else if (sti != ' ' && sti != '\n' && sti != '\r') { throw new System.Exception(FormatError("invalid char: was expecting \",0..9,t or f", cur_pos)); } break; case Tjstate.JWAITFORNEXTSTRUCTMEMBER: if (sti == ',') { state = Tjstate.JWAITFORNAME; name_start = cur_pos + 1; } else if (sti == '}') { _data_len = cur_pos + 1 - _data_start; return(_data_len); } else { if (sti != ' ' && sti != '\n' && sti != '\r') { throw new System.Exception(FormatError("invalid char: was expecting ,", cur_pos)); } } break; case Tjstate.JWAITFORNEXTARRAYITEM: case Tjstate.JWAITFORSTRINGVALUE: case Tjstate.JWAITFORINTVALUE: case Tjstate.JWAITFORBOOLVALUE: throw new System.Exception(FormatError("invalid state for YJSONObject", cur_pos)); } cur_pos++; } throw new System.Exception(FormatError("unexpected end of data", cur_pos)); }
public override int parse() { int cur_pos = SkipGarbage(_data, _data_start, _data_boundary); if (_data[cur_pos] != '[') { throw new System.Exception(FormatError("Opening braces was expected", cur_pos)); } cur_pos++; Tjstate state = Tjstate.JWAITFORDATA; while (cur_pos < _data_boundary) { char sti = _data[cur_pos]; switch (state) { case Tjstate.JWAITFORDATA: if (sti == '{') { YJSONObject jobj = new YJSONObject(_data, cur_pos, _data_boundary); int len = jobj.parse(); cur_pos += len; _arrayValue.Add(jobj); state = Tjstate.JWAITFORNEXTARRAYITEM; //cur_pos is already incremented continue; } else if (sti == '[') { YJSONArray jobj = new YJSONArray(_data, cur_pos, _data_boundary); int len = jobj.parse(); cur_pos += len; _arrayValue.Add(jobj); state = Tjstate.JWAITFORNEXTARRAYITEM; //cur_pos is already incremented continue; } else if (sti == '"') { YJSONString jobj = new YJSONString(_data, cur_pos, _data_boundary); int len = jobj.parse(); cur_pos += len; _arrayValue.Add(jobj); state = Tjstate.JWAITFORNEXTARRAYITEM; //cur_pos is already incremented continue; } else if (sti == '-' || (sti >= '0' && sti <= '9')) { YJSONNumber jobj = new YJSONNumber(_data, cur_pos, _data_boundary); int len = jobj.parse(); cur_pos += len; _arrayValue.Add(jobj); state = Tjstate.JWAITFORNEXTARRAYITEM; //cur_pos is already incremented continue; } else if (sti == ']') { _data_len = cur_pos + 1 - _data_start; return(_data_len); } else if (sti != ' ' && sti != '\n' && sti != '\r') { throw new System.Exception(FormatError("invalid char: was expecting \",0..9,t or f", cur_pos)); } break; case Tjstate.JWAITFORNEXTARRAYITEM: if (sti == ',') { state = Tjstate.JWAITFORDATA; } else if (sti == ']') { _data_len = cur_pos + 1 - _data_start; return(_data_len); } else { if (sti != ' ' && sti != '\n' && sti != '\r') { throw new System.Exception(FormatError("invalid char: was expecting ,", cur_pos)); } } break; default: throw new System.Exception(FormatError("invalid state for YJSONObject", cur_pos)); } cur_pos++; } throw new System.Exception(FormatError("unexpected end of data", cur_pos)); }