using System; using System.Collections.Generic; using Newtonsoft.Json; using System.IO; using Newtonsoft.Json.Converters; using FSO.Server.Common; using FSO.Common.Utils; using tso.debug.network; namespace FSO.Server.Debug { public class NetworkStash { private static JsonSerializerSettings SETTINGS; static NetworkStash() { SETTINGS = new JsonSerializerSettings(); SETTINGS.Formatting = Formatting.Indented; SETTINGS.Converters.Add(new StringEnumConverter()); } private string Dir; public List Items; public NetworkStash(string dir) { this.Dir = dir; this.Items = new List(); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } string[] files = Directory.GetFiles(dir); foreach (var file in files) { if (file.EndsWith(".json")) { var parsedItem = JsonConvert.DeserializeObject(File.ReadAllText(file), SETTINGS); this.Items.Add(parsedItem); } } } public void Add(string name, RawPacketReference[] packets) { var item = new NetworkStashItem(); item.Name = name; item.Packets = new List(); foreach (var packet in packets) { item.Packets.Add(new NetworkStashItemPacket { Type = packet.Packet.Type, SubType = (ushort)packet.Packet.SubType, Data = packet.Packet.Data, Direction = packet.Packet.Direction }); } this.Items.Add(item); var jsonData = JsonConvert.SerializeObject(item, SETTINGS); File.WriteAllText(Path.Combine(Dir, "stash-" + DateTime.Now.Ticks + ".json"), jsonData); } } public class NetworkStashItem { [JsonProperty] public string Name; [JsonProperty] public List Packets; } public class NetworkStashItemPacket { [JsonProperty] public PacketType Type; [JsonProperty] public uint SubType; [JsonProperty] public PacketDirection Direction; [JsonConverter(typeof(Base64JsonConverter))] public byte[] Data; } }