81 lines
2.8 KiB
C#
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;
|
|
}
|
|
}
|
|
} |