/// <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();
 }
示例#3
0
        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));
        }