/// <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; }
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(); }
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; }
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); }
/// <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); }
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); } } }
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); } } }
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)); } }
void EmberToXml(EmberReader reader, XmlWriter writer) { if(reader.Read()) EmberToXml_ProcessNode(reader, writer, 0); }
void EmberToXml_Recurse(EmberReader reader, XmlWriter writer, int indent) { while(reader.Read()) EmberToXml_ProcessNode(reader, writer, indent); }