Ejemplo n.º 1
0
        static void ReadHotfixData(Packet packet, List <HotfixRecord> records, params object[] indexes)
        {
            for (var i = 0; i < records.Count; ++i)
            {
                var record = records[i];

                packet.AddValue("HotfixId", record.HotfixId, i, indexes, "HotfixRecord");
                packet.AddValue("UniqueId", record.UniqueId, i, indexes, "HotfixRecord");
                packet.AddValue("RecordId", record.RecordId, i, indexes, "HotfixRecord");
                packet.AddValue("TableHash", record.Type, i, indexes, "HotfixRecord");
                packet.AddValue("Status", record.Status, i, indexes, "HotfixRecord");
                packet.AddValue("Size", record.HotfixDataSize, i, indexes, "HotfixRecord");

                switch (record.Status)
                {
                case HotfixStatus.Valid:
                {
                    packet.AddSniffData(StoreNameType.None, record.RecordId, record.Type.ToString());

                    var data = packet.ReadBytes(record.HotfixDataSize);
                    using (var db2File = new Packet(data, packet.Opcode, packet.Time, packet.Direction,
                                                    packet.Number, packet.Writer, packet.FileName))
                    {
                        HotfixStoreMgr.AddRecord(record.Type, record.RecordId, db2File);

                        if (HotfixStoreMgr.GetStore(record.Type) == null)
                        {
                            db2File.WriteLine($"(RecordID: {record.RecordId} TableHash: {record.Type}) has missing structure. HotfixBlob entry generated!");
                            db2File.AsHex();

                            var hotfixBlob = new HotfixBlob
                            {
                                TableHash = record.Type,
                                RecordID  = record.RecordId,
                                Blob      = new Blob(data)
                            };

                            Storage.HotfixBlobs.Add(hotfixBlob);
                        }
                        else if (db2File.Position != db2File.Length)
                        {
                            HandleHotfixOptionalData(packet, record.Type, record.RecordId, db2File);
                        }
                    }

                    break;
                }

                case HotfixStatus.Invalid:
                {
                    packet.WriteLine($"Row {record.RecordId} is invalid.");
                    break;
                }

                case HotfixStatus.RecordRemoved:
                {
                    packet.WriteLine($"Row {record.RecordId} has been deleted.");
                    HotfixStoreMgr.RemoveRecord(record.Type, record.RecordId);
                    break;
                }

                default:
                {
                    packet.WriteLine($"Row: {record.RecordId} TableHash: {record.Type} has unknown Status: {record.Status}");
                    break;
                }
                }

                var hotfixData = new HotfixData
                {
                    ID        = record.HotfixId,
                    TableHash = record.Type,
                    RecordID  = record.RecordId,
                    Status    = record.Status
                };
                Storage.HotfixDatas.Add(hotfixData);
            }
        }