private void ReadMetaData()
        {
            // RDP mit unterschiedlichen Variablentabellen wird aktuell nicht untersützt
            if (data.Count > 0)
            {
                throw new NotSupportedException("Server responds with meta data after sending data commands. Subsequent changes of field lists are not yet supported.");
            }

            MetaDataTypeHelper.TryParse(currentCmd[CommandFields.Responses.DM.MetaDataType], out MetaDataType type);

            // neue nicht untersützte Metadaten ignorieren
            if (type == MetaDataType.Undefined)
            {
                return;
            }

            if (fields == null)
            {
                fields = new FieldList();
            }

            for (int i = 1; i < currentCmd.Fields.Length; i++)
            {
                string value = currentCmd[i];
                // die erste Angabe in den Metadaten ist der Typ und wird hier übersprungen, die Feldliste beginnt aber bei 0
                int fieldIdx = i - 1;

                if (type == MetaDataType.Name && !fields.Contains(value))
                {
                    fields.Add(new Field(value));
                }
                else if (fieldIdx < fields.Count)
                {
                    // Die Metadaten kommen ohne Bezug zu den Feldnamen aber immer in der gleichen Reihenfolge
                    Field f = fields[fieldIdx];
                    f.SetMetaData(type, value);
                }
            }
        }
Exemple #2
0
 /// <summary>
 /// Instanziert eine nicht veränderbare Feldliste aus einer bestehenden.
 /// </summary>
 /// <param name="fieldList"></param>
 public FieldList(FieldList fieldList)
 {
     set      = new List <Field>(fieldList);
     readOnly = true;
 }
 public DataCommandReader(FieldList fields) : this()
 {
     this.fields = fields;
 }
        private Field FillRecord(IDictionary <Field, string> record, EPICommand data, FieldList fieldList, int offset)
        {
            Field  lastField = null;
            string fieldValue;

            for (int i = offset; i < data.Fields.Length; i++)
            {
                if (i < fieldList.Count)
                {
                    Field f = fieldList[i];
                    fieldValue = data[i];
                    record.Add(f, fieldValue);

                    lastField = f;
                }
            }

            return(lastField);
        }
Exemple #5
0
 /// <summary>
 /// Erzeugt eine Abfrage, welche über Linq angesteuert werden kann.
 /// </summary>
 /// <param name="db">Datenbanknummer</param>
 /// <param name="group">Gruppennummer</param>
 /// <param name="fieldList">Feldliste</param>
 /// <returns></returns>
 public QueryProxy <Record> Get(int db, int group, FieldList fieldList)
 {
     return(Get(db, new int[] { group }, fieldList));
 }