50 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|
|
} |