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