using System.Collections.Generic; using System.Linq; using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace MafiaCommon.Packets { public static class PacketConverter { public static byte[] ToBytes(Packet packet) { return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(packet)+","); } public static List ToPacket(string jsons) { jsons = jsons.Substring(0, jsons.Length - 1); jsons = "[" + jsons + "]"; return (from JObject packet in (JArray) JsonConvert.DeserializeObject(jsons) select ConvertPacket(packet)).ToList(); } private static Packet ConvertPacket(JObject json) { var packetType = json.GetValue("PacketType") .ToObject(); Packet packet = packetType switch { PacketType.ServerShutdown => json.ToObject(), PacketType.Connect => json.ToObject(), PacketType.Welcome => json.ToObject(), PacketType.Disconnect => json.ToObject(), PacketType.PlayerConnected => json.ToObject(), PacketType.PlayerDisconnected => json.ToObject(), PacketType.MessageReceivePacket => json.ToObject(), PacketType.MessageSendPacket => json.ToObject(), PacketType.GameStartPacket => json.ToObject(), PacketType.EndGame => json.ToObject(), PacketType.DisconnectPlayer => json.ToObject(), PacketType.Vote => json.ToObject(), PacketType.GameStateChanged => json.ToObject(), _ => null }; return packet; } } }