Ejemplo n.º 1
0
 public UnityHeapDumper()
 {
     typeDataFactory     = new TypeDataFactory(this);
     instanceDataFactory = new InstanceDataFactory(this);
     fieldDataFactory    = new FieldDataFactory(this);
     dumpWriter          = new XMLDumpWriter();
 }
Ejemplo n.º 2
0
 public void PlaybackTo(IDumpWriter writer)
 {
     foreach (var record in this.records)
     {
         record.PlayOn(writer);
     }
 }
Ejemplo n.º 3
0
 public JSONDumpWriter()
 {
     thisDumpWriter = this;
 }
Ejemplo n.º 4
0
        private void launchProcessing(int threadCount, string outFileName)
        {
            var firstRead = true;
            var reader    = _compression != FileCompression.None ? new Reader(_tempName, _sniffType) : new Reader(FileName, _sniffType);

            var         written = false;
            IDumpWriter writer  = null;

            // this is done to ensure disposal of IDumpWriter (extended form of using(var ...) {...}
            try
            {
                if (Settings.DumpFormatWithText() && Settings.DumpTextFormat == TextFormatType.Txt)
                {
                    writer = new TextDumpWriter(outFileName + ".txt");
                }
                //var writer = (Settings.DumpFormatWithText() ? new StreamWriter(outFileName, true) : null
                else if (Settings.DumpFormatWithText() && Settings.DumpTextFormat == TextFormatType.Xml)
                {
                    writer = new XmlDumpWriter(outFileName + ".xml");
                }

                var firstWrite = true;
                var pwp        = new ParallelWorkProcessor <Packet>(() => // read
                {
                    if (!reader.PacketReader.CanRead())
                    {
                        return(Tuple.Create <Packet, bool>(null, true));
                    }

                    Packet packet;
                    var b = reader.TryRead(out packet);

                    if (firstRead)
                    {
                        Trace.WriteLine(
                            $"{_logPrefix}: Parsing {Utilities.BytesToString(reader.PacketReader.GetTotalSize())} of packets. Detected version {ClientVersion.VersionString}");

                        firstRead = false;
                    }

                    return(Tuple.Create(packet, b));
                }, packet => // parse
                {
                    // Parse the packet, adding text to Writer and stuff to the stores
                    if (packet.Direction == Direction.BNClientToServer ||
                        packet.Direction == Direction.BNServerToClient)
                    {
                        BattlenetHandler.ParseBattlenet(packet);
                    }
                    else
                    {
                        Handler.Parse(packet);
                    }

                    // Update statistics
                    _stats.AddByStatus(packet.Status);
                    return(packet);
                }, packet => // write
                {
                    ShowPercentProgress("Processing...", reader.PacketReader.GetCurrentSize(), reader.PacketReader.GetTotalSize());

                    if (!packet.Status.HasAnyFlag(Settings.OutputFlag) || !packet.WriteToFile)
                    {
                        packet.ClosePacket();
                        return;
                    }

                    written = true;
                    if (firstWrite)
                    {
                        //writer?.WriteHeader(GetHeader(FileName));
                        writer?.WriteHeader(FileName);
                        firstWrite = false;
                    }

                    if (Settings.LogPacketErrors)
                    {
                        switch (packet.Status)
                        {
                        case ParsedStatus.WithErrors:
                            _withErrorHeaders.Add(packet.GetHeader());
                            break;

                        case ParsedStatus.NotParsed:
                            _skippedHeaders.Add(packet.GetHeader());
                            break;

                        case ParsedStatus.NoStructure:
                            _noStructureHeaders.Add(packet.GetHeader());
                            break;
                        }
                    }

                    if (writer != null)
                    {
                        // Write to file
                        writer.WriteItem(packet);
                    }

                    // Close Writer, Stream - Dispose
                    packet.ClosePacket();
                }, threadCount);
                pwp.WaitForFinished(Timeout.Infinite);

                reader.PacketReader.Dispose();

                _stats.SetEndTime(DateTime.Now);
            }
            finally
            {
                if (writer != null)
                {
                    writer.Dispose();
                }
            }

            if (written)
            {
                Trace.WriteLine($"{_logPrefix}: Saved file to '{outFileName}'");
            }
            else
            {
                Trace.WriteLine($"{_logPrefix}: No file produced");
                File.Delete(outFileName);
            }
        }
Ejemplo n.º 5
0
 public void PlayOn(IDumpWriter writer)
 {
     writer.Unindent();
 }
Ejemplo n.º 6
0
 public void PlayOn(IDumpWriter writer)
 {
     writer.WriteLine(this.line);
 }
Ejemplo n.º 7
0
 public XMLDumpWriter()
 {
     thisDumpWriter = this;
 }