RMafia/MafiaCommon/Packets/PacketConverter.cs
2021-02-11 12:44:28 +03:00

50 lines
2.0 KiB
C#

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<Packet> 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<PacketType>();
Packet packet = packetType switch
{
PacketType.ServerShutdown => json.ToObject<ServerShutdownPacket>(),
PacketType.Connect => json.ToObject<ConnectPacket>(),
PacketType.Welcome => json.ToObject<WelcomePacket>(),
PacketType.Disconnect => json.ToObject<DisconnectPacket>(),
PacketType.PlayerConnected => json.ToObject<PlayerConnectedPacket>(),
PacketType.PlayerDisconnected => json.ToObject<PlayerDisconnectedPacket>(),
PacketType.MessageReceivePacket => json.ToObject<MessageReceivePacket>(),
PacketType.MessageSendPacket => json.ToObject<MessageSendPacket>(),
PacketType.GameStartPacket => json.ToObject<GameStartPacket>(),
PacketType.EndGame => json.ToObject<EndGamePacket>(),
PacketType.DisconnectPlayer => json.ToObject<DisconnectPacket>(),
PacketType.Vote => json.ToObject<VotePacket>(),
PacketType.GameStateChanged => json.ToObject<GameStageChangedPacket>(),
_ => null
};
return packet;
}
}
}