Ejemplo n.º 1
0
        private Dump DoLoad(Stream stream, AsyncOperation asyncOp)
        {
            Dump dump = new Dump();

            BinaryReader reader = new BinaryReader(stream, System.Text.Encoding.ASCII);

            string magic        = new string(reader.ReadChars(4));
            uint   version      = reader.ReadUInt32();
            uint   isCompressed = reader.ReadUInt32();
            uint   numEvents    = reader.ReadUInt32();

            if (magic != "oSpy")
            {
                throw new InvalidDataException("invalid signature '" + magic + "'");
            }
            else if (version != 2)
            {
                throw new InvalidDataException("unsupported version " + version);
            }
            else if (isCompressed != 0 && isCompressed != 1)
            {
                throw new InvalidDataException("invalid value for isCompressed");
            }

            if (isCompressed == 1)
            {
                stream = new BZip2InputStream(stream);
            }

            XmlTextReader xmlReader = new XmlTextReader(stream);

            uint eventCount;
            uint prevId = 0;

            for (eventCount = 0; xmlReader.Read() && eventCount < numEvents;)
            {
                if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "event")
                {
                    if (asyncOp != null)
                    {
                        int percentComplete        = (int)(((float)(eventCount + 1) / (float)numEvents) * 100.0f);
                        ProgressChangedEventArgs e = new ProgressChangedEventArgs(percentComplete, asyncOp.UserSuppliedState);
                        asyncOp.Post(m_onProgressReportDelegate, e);
                    }

                    Event ev;

                    try
                    {
                        XmlReader rdr = xmlReader.ReadSubtree();
                        ev = m_eventFactory.CreateEvent(rdr);
                        m_tagBuilder.Process(ev);
                        dump.AddEvent(ev);
                    }
                    catch (Exception ex)
                    {
                        Exception outerEx = new Exception("Error processing event following id " + prevId, ex);
                        throw outerEx;
                    }

                    eventCount++;
                    prevId = ev.Id;
                }
            }

            if (eventCount != numEvents)
            {
                throw new InvalidDataException(String.Format("expected {0} events, read {1}", numEvents, eventCount));
            }

            return(dump);
        }
Ejemplo n.º 2
0
        public static Event CreateFromXml(string xml)
        {
            EventFactory factory = new EventFactory();

            return(factory.CreateEvent(xml));
        }
Ejemplo n.º 3
0
 public static Event CreateFromXml(string xml)
 {
     EventFactory factory = new EventFactory();
     return factory.CreateEvent(xml);
 }