public void LoadXml(XmlDocument xDoc, XmlNode rootNode, Boolean refLoad = false)
        {
            if (rootNode == null)
            {
                return;
            }
            _xDoc = xDoc; XmlControlHandler.GetDefaultXmlItemAttributes(rootNode, xDoc, this);


            XmlNodeList fields = XmlGetter.Children(rootNode, "Field");
            int         count  = 0;

            foreach (XmlNode field in fields)
            {
                XmlCommandField xField = new XmlCommandField(null);
                xField.LoadXml(xDoc, field, refLoad);

                FieldList.Add(xField.Name, xField);
                if (xField.FieldType == FieldTypes.DataSize)
                {
                    _dataSizeField = xField;
                }
                else if (xField.Name.ToLower().Equals("id"))
                {
                    _idField = xField;
                }
                else if (xField.Name.ToLower().Equals("tag"))
                {
                    _tagField = xField;
                }

                addItem(count++, xField.DataSize, true);
            }
            setBuffSize();
            int offset = 0;

            foreach (XmlCommandField field in FieldList.Values)
            {
                field.SetTargetBuffer(this.buffer, offset);
                field.Data = field.Data;
                offset    += field.DataSize;
            }

            /*
             * XmlCommandFields xmlFields = new XmlCommandFields(null);
             * xmlFields.LoadXml(xDoc, fields, refLoad);
             */
        }
Example #2
0
        public void LoadXml(XmlDocument xDoc, XmlNode rootNode, Boolean refLoad = false)
        {
            if (rootNode == null)
            {
                return;
            }
            _xDoc = xDoc; XmlControlHandler.GetDefaultXmlItemAttributes(rootNode, xDoc, this);


            //int count = 0;
            //int index = 0;
            int count = 0;

            _pacektHandlingType = PacketHandlingTypes.Static;//default

            foreach (XmlNode fieldNode in rootNode.ChildNodes)
            {
                if (fieldNode.Name.Equals(Properties.Resources.Fields_Field_Tag))
                {
                    XmlCommandField field = new XmlCommandField(this);

                    field.LoadXml(xDoc, fieldNode);

                    addItem(count++, field.DataSize, field.FieldType == FieldTypes.Dynamic, field.DataType);
                    _fieldList.Add(field.Name, field);
                    if (field.FieldType == FieldTypes.LoopCount)
                    {
                        _loopCountField = field;
                        //field.DataValue = 0;
                        _pacektHandlingType = PacketHandlingTypes.Loop;
                    }
                    else if (field.FieldType == FieldTypes.VariableSize)
                    {
                        _variableSizeField  = field;
                        _pacektHandlingType = PacketHandlingTypes.Serial;
                    }
                    else if (field.FieldType == FieldTypes.Variable)
                    {
                        _variableField = field;
                        if (_structType == StructType.Command)
                        {
                            if (_variableSizeField == null)
                            {
                                throw new Exception("There's no FieldType[VariableSizeField] for this field[" + field.Name + "]");
                            }
                            else
                            {
                                _variableSizeField.DataValue = Buffer.ByteLength(field.TargetBuffer);
                            }
                        }
                    }
                }
                else if (fieldNode.Name.Equals(Properties.Resources.Fields_Loop_Tag))
                {
                    XmlCommandFields fields = new XmlCommandFields(_parentFields, _structType);

                    String name = XmlGetter.Attribute(fieldNode, Properties.Resources.Fields_Loop_Name_Attr);

                    fields.LoadXml(xDoc, fieldNode, refLoad);
                    TemplateFields      = fields;
                    fields.Name         = name;
                    fields.TemplateName = name;
                    //NumberOfFields = Convert.ToInt32(SizeDefineField.DataValue);//default로 지정된 크기를 만들어준다.

                    //_fieldsList.Add(name, fields);
                }
            }

            setBuffSize(); //size를 fix함..
            int offset = 0;

            for (int i = 0; i < _fieldList.Values.Count; i++)
            {
                _fieldList.ValueList[i].SetTargetBuffer(this.buffer, offset);
                if (_fieldList.ValueList[i].FieldType == FieldTypes.Dynamic)
                {
                    _fieldList.ValueList[i].Data = _fieldList.ValueList[i].Data;//실제 값을 넣어준다.
                }
                else if (_fieldList.ValueList[i].FieldType == FieldTypes.LoopCount)
                {
                    _fieldList.ValueList[i].Data = "0";
                }
                else
                {
                    _fieldList.ValueList[i].Data = _fieldList.ValueList[i].Data;//실제 값을 넣어준다.
                }
                offset += _fieldList.ValueList[i].DataSize;
            }
        }