Esempio n. 1
0
        /// <summary>
        /// Creates a nested reader from another EmberReader instance.
        /// The passed <paramref name="parentReader"/> must be positioned
        /// on a container.
        /// The newly created nested reader will signal Eof when all bytes
        /// of this container have been read.
        /// </summary>
        /// <param name="parentReader">The base reader.</param>
        public EmberReader(EmberReader parentReader)
        {
            if(parentReader == null)
            throw new ArgumentNullException("parentReader");

             if(parentReader.IsContainer == false)
            throw new ArgumentException("parentReader is not positioned on a container");

             _input = parentReader._input;
             _parentReader = parentReader;

             _bytesAvailable = parentReader.Length;
        }
Esempio n. 2
0
        void Run(string path)
        {
            using(var stream = File.OpenRead(path))
             {
            var reader = new EmberReader(new BerStreamInput(stream));
            var app = new GlowApplicationInterface();

            _glow = (GlowContainer)EmberNode.Decode(reader, app);
             }

             //var settings = new XmlWriterSettings
             //{
             //   Indent = true,
             //   IndentChars = "  ",
             //   OmitXmlDeclaration = true,
             //};
             //using(var writer = XmlWriter.Create(Console.Out, settings))
             //   XmlExport.Export(_glow, writer);

             //var children = _glow[GlowTags.CollectionItem][GlowTags.Node.Children];
             //for(int index = 0; index < 2000; index++)
             //{
             //   var node = new GlowNode(5 + index)
             //   {
             //      Identifier = "abc" + index,
             //      Description = "Hallo ich bin Node " + index,
             //   };
             //   children.Insert(node);
             //}

             //using(var output = new BerStreamOutput(File.Create("big.ember")))
             //   _glow.Encode(output);

             var listener = new TcpListener(IPAddress.Any, 9097);
             listener.Start();
             listener.BeginAcceptSocket(AcceptCallback, listener);

             Console.WriteLine("Press Enter to quit...");
             Console.ReadLine();

             lock(_sync)
             {
            foreach(var client in _clients)
               client.Close();
             }

             listener.Stop();
        }
Esempio n. 3
0
        void AssertCodecSanity(EmberNode ember)
        {
            var originalXml = GetXml(ember);
             var output = new BerMemoryOutput();

             ember.Encode(output);

             var input = new BerMemoryInput(output.Memory);
             var reader = new EmberReader(input);

             var decoded = EmberNode.Decode(reader, new GlowApplicationInterface());
             var decodedXml = GetXml(decoded);

             if(originalXml != decodedXml)
            throw new Exception("Codec error!");
        }
        /// <summary>
        /// Creates a nested reader from another EmberReader instance.
        /// The passed <paramref name="parentReader"/> must be positioned
        /// on a container.
        /// The newly created nested reader will signal Eof when all bytes
        /// of this container have been read.
        /// </summary>
        /// <param name="parentReader">The base reader.</param>
        public EmberReader(EmberReader parentReader)
        {
            if (parentReader == null)
            {
                throw new ArgumentNullException("parentReader");
            }

            if (parentReader.IsContainer == false)
            {
                throw new ArgumentException("parentReader is not positioned on a container");
            }

            _input        = parentReader._input;
            _parentReader = parentReader;

            _bytesAvailable = parentReader.Length;
        }
Esempio n. 5
0
        void EmberToXml_ProcessNode(EmberReader reader, XmlWriter writer, int indent)
        {
            var isContainer = reader.IsContainer;
             var indentStr = new String(' ', 2 * indent);

             writer.WriteWhitespace(indentStr);
             writer.WriteStartElement(reader.Tag.ToString());

             writer.WriteStartAttribute("type");
             writer.WriteString(BerDefinitions.GetTypeName(reader.Type));
             writer.WriteEndAttribute();

             if(isContainer)
             {
            writer.WriteWhitespace(Environment.NewLine);

            EmberToXml_Recurse(new EmberReader(reader), writer, indent + 1);

            writer.WriteWhitespace(indentStr);
             }
             else
             {
            switch(reader.Type)
            {
               case BerType.Boolean:
                  writer.WriteValue(reader.GetBoolean());
                  break;

               case BerType.Integer:
                  writer.WriteValue(reader.GetLong());
                  break;

               case BerType.Real:
                  writer.WriteValue(reader.GetReal());
                  break;

               case BerType.UTF8String:
                  writer.WriteValue(reader.GetString());
                  break;
            }
             }

             writer.WriteEndElement();
             writer.WriteWhitespace(Environment.NewLine);
        }
Esempio n. 6
0
        /// <summary>
        /// Recursively builds a node tree from the specified reader, advancing the reader in the process.
        /// Throws an exception if the first node on the reader (which will become the tree's root cannot
        /// be decoded or is not a container.
        /// </summary>
        /// <param name="reader">The BER reader to build the tree from.</param>
        /// <param name="application">The application interface responsible for creating nodes
        /// with application-defined types. If null, containers with application-defined types
        /// will be decoded to objects of type EmberContainer.</param>
        /// <returns>The root node of the decoded tree.</returns>
        public static EmberNode Decode(EmberReader reader, EmberApplicationInterface application)
        {
            var root = null as EmberContainer;

            if (reader.Read())
            {
                root = FromReader(reader, application) as EmberContainer;

                if (root == null)
                {
                    throw new BerException(4, "Root node is not a container");
                }

                var childReader = new EmberReader(reader);

                Decode_Recurse(childReader, root, application);
            }

            return(root);
        }
Esempio n. 7
0
        static void Decode_Recurse(EmberReader reader, EmberContainer parent, EmberApplicationInterface application)
        {
            while (reader.Read())
            {
                var node = FromReader(reader, application);

                if (node != null)
                {
                    var container = node as EmberContainer;

                    if (container != null)
                    {
                        var childReader = new EmberReader(reader);

                        Decode_Recurse(childReader, container, application);
                    }

                    node.ValidateAfterDecode();
                    parent.InsertChildNode(node);
                }
            }
        }
Esempio n. 8
0
        void loadButton_Click(object sender, RoutedEventArgs e)
        {
            var dialog = new OpenFileDialog
             {
            Filter = EmberFileDialogFilter,
             };

             if(dialog.ShowDialog() == true)
             {
            using(var stream = dialog.File.OpenRead())
            {
               var input = new BerStreamInput(stream);
               var reader = new EmberReader(input);
               var glow = EmberNode.Decode(reader, new GlowApplicationInterface()) as GlowContainer;

               if(glow != null)
                  DecodeGlow(glow);
            }
             }
        }
Esempio n. 9
0
        void Test_InteropDom()
        {
            Console.WriteLine("\r\n------------------------ Interop DOM");

             var testFilePath = @"N:\Temp\test.ber";
             using(var stream = File.OpenRead(testFilePath))
             {
            var input = new BerStreamInput(stream);
            var reader = new EmberReader(input);

            var root = EmberNode.Decode(reader, this);
            Console.WriteLine(GetXml(root));
             }
        }
Esempio n. 10
0
 void EmberToXml(EmberReader reader, XmlWriter writer)
 {
     if(reader.Read())
     EmberToXml_ProcessNode(reader, writer, 0);
 }
Esempio n. 11
0
 void EmberToXml_Recurse(EmberReader reader, XmlWriter writer, int indent)
 {
     while(reader.Read())
     EmberToXml_ProcessNode(reader, writer, indent);
 }