コード例 #1
0
        EmberNode CreateNode(string tagName, string typeName)
        {
            BerTag    tag;
            EmberNode node = null;

            if (BerTag.TryParse(tagName, out tag) &&
                typeName != null)
            {
                uint type;

                if (BerDefinitions.GetTypeFromName(typeName, true, out type))
                {
                    switch (type)
                    {
                    case BerType.Null:
                    {
                        node = new NullEmberLeaf(tag);
                        break;
                    }

                    case BerType.Boolean:
                    {
                        bool value;

                        if (bool.TryParse(_reader.ReadContentAsString(), out value))
                        {
                            node = new BooleanEmberLeaf(tag, value);
                        }

                        break;
                    }

                    case BerType.Integer:
                    {
                        long value;

                        if (long.TryParse(_reader.ReadContentAsString(), out value))
                        {
                            if ((ulong)value > int.MaxValue)
                            {
                                node = new LongEmberLeaf(tag, value);
                            }
                            else
                            {
                                node = new IntegerEmberLeaf(tag, (int)value);
                            }
                        }

                        break;
                    }

                    case BerType.Real:
                    {
                        double value;

                        if (double.TryParse(_reader.ReadContentAsString(), NumberStyles.Float, XmlExport.FormatProvider, out value))
                        {
                            node = new RealEmberLeaf(tag, value);
                        }

                        break;
                    }

                    case BerType.UTF8String:
                    {
                        node = new StringEmberLeaf(tag, _reader.ReadContentAsString());
                        break;
                    }

                    case BerType.OctetString:
                    {
                        var octets = System.Convert.FromBase64String(_reader.ReadContentAsString());
                        node = new OctetStringEmberLeaf(tag, octets);
                        break;
                    }

#pragma warning disable 618 // EmberFrame is obsolete
                    case BerType.Sequence:
                    {
                        if (tag == Legacy.EmberFrame.FrameTag)
                        {
                            node = new Legacy.EmberFrame();
                        }
                        else
                        {
                            node = new EmberSequence(tag);
                        }

                        break;
                    }
#pragma warning restore 618

                    case BerType.Set:
                    {
                        node = new EmberSet(tag);
                        break;
                    }

                    default:
                    {
                        if (_application != null)
                        {
                            node = _application.CreateNodeFromXml(type, tag, _reader);
                        }

                        if (node == null)
                        {
                            Debug.WriteLine("Unknown BER value type: " + type);

                            node = new EmberContainer(tag, null, type);
                        }

                        break;
                    }
                    }
                }
            }

            return(node);
        }