Newer
Older
Simple-Multiplayer-Unity3D / Assets / Scripts / Network / NetworkMessage.cs
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;
            }
        }
    }
}