using System.IO; namespace Multiplayer.Network { public struct NetworkMessage : INetworkSerializable { public NetworkCommand command; public INetworkSerializable data; public void Serialize(BinaryWriter writer) { writer.Write((byte)command); switch (command) { case NetworkCommand.PlayerJoin: case NetworkCommand.PlayerMove: data.Serialize(writer); break; case NetworkCommand.PlayerJoinConfirmed: data.Serialize(writer); break; case NetworkCommand.PlayerLeave: PlayerData pd = (PlayerData)data; writer.Write(pd.playerId); break; } } public void Deserialize(BinaryReader reader) { command = (NetworkCommand)reader.ReadByte(); switch (command) { case NetworkCommand.PlayerJoin: case NetworkCommand.PlayerMove: case NetworkCommand.PlayerJoinConfirmed: var player = new PlayerData(); player.Deserialize(reader); data = player; break; case NetworkCommand.PlayerLeave: var leavePlayer = new PlayerData(); leavePlayer.playerId = reader.ReadUInt16(); data = leavePlayer; break; } } } }