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

            XmlNode headerNode = XmlGetter.Child(rootNode, Properties.Resources.CommandHeader_Tag); //header 매칭..

            _header.LoadXml(HeaderPath + "\\" + _headerFileName, refLoad);
            if (headerNode != null) //Header 태그가 없으면 그냥 둔다.
            {
                foreach (String fieldName in _header.FieldList.Keys)
                {
                    String attr = XmlGetter.Attribute(headerNode, fieldName);
                    if (attr.Length > 0)
                    {
                        _header.FieldList[fieldName].Data = attr;
                    }
                }
            }
            //_header.LoadXml(_xDoc, headerNode);

            XmlNode dataNode = XmlGetter.Child(rootNode, Properties.Resources.CommandData_Tag);

            if (dataNode != null)
            {
                _data.LoadXml(_xDoc, dataNode);
            }
        }
Ejemplo n.º 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;
            }
        }