RMafia/MafiaCommon/Packets/PacketConverter.cs

81 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace MafiaCommon.Packets
{
public class PacketConverter
{
public static byte[] toBytes(Packet packet)
{
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(packet)+",");
}
public static List<Packet> toPacket(String jsons)
{
List<Packet> packets = new List<Packet>();
jsons = jsons.Substring(0, jsons.Length - 1);
jsons = "[" + jsons + "]";
foreach (JObject packet in (JArray) JsonConvert.DeserializeObject(jsons))
{
packets.Add(ConvertPacket(packet));
}
return packets;
}
public static Packet ConvertPacket(JObject json)
{
PacketType packetType = json.GetValue("PacketType")
.ToObject<PacketType>();
Packet packet = null;
switch (packetType)
{
case PacketType.ServerShutdown:
packet = json.ToObject<ServerShutdownPacket>();
break;
case PacketType.Connect:
packet = json.ToObject<ConnectPacket>();
break;
case PacketType.Welcome:
packet = json.ToObject<WelcomePacket>();
break;
case PacketType.Disconnect:
packet = json.ToObject<DisconnectPacket>();
break;
case PacketType.PlayerConnected:
packet = json.ToObject<PlayerConnectedPacket>();
break;
case PacketType.PlayerDisconnected:
packet = json.ToObject<PlayerDisconnectedPacket>();
break;
case PacketType.MessageReceivePacket:
packet = json.ToObject<MessageReceivePacket>();
break;
case PacketType.MessageSendPacket:
packet = json.ToObject<MessageSendPacket>();
break;
case PacketType.GameStartPacket:
packet = json.ToObject<GameStartPacket>();
break;
case PacketType.EndGame:
packet = json.ToObject<EndGamePacket>();
break;
case PacketType.DisconnectPlayer:
packet = json.ToObject<DisconnectPacket>();
break;
case PacketType.Vote:
packet = json.ToObject<VotePacket>();
break;
case PacketType.GameStateChanged:
packet = json.ToObject<GameStageChangedPacket>();
break;
}
return packet;
}
}
}