public override void HandleMessages(Message.MessageType messageType, DataStreamReader reader, int ConnectionID)
        {
            if (IsClient)//Clientside handling
            {
                switch (messageType)
                {
                case Message.MessageType.NewPlayer:
                    var newPlayer = new NewPlayer();
                    newPlayer.DeserializeObject(ref reader);
                    //Debug.Log(newPlayer.PlayerName + " " + newPlayer.PlayerID + " " + newPlayer.Colour);


                    ServerClient _newClient = new ServerClient(newPlayer.PlayerID, newPlayer.PlayerName, DataUtilities.DecodeColor((int)newPlayer.Colour));
                    ClientBehaviour.Instance.Clients.Add(_newClient);

                    if (!ClientBehaviour.Instance.IsHost)
                    {
                        ClientBehaviour.Instance.Lobby.PrintMessage(newPlayer.PlayerName + ", joined the game.", Color.green);
                        ClientBehaviour.Instance.Lobby.LobbyUI.GetComponent <PlayerLobbyList>().UpdateLobby(_newClient);
                    }

                    break;

                case Message.MessageType.Welcome:
                    var welcomeMessage = new WelcomeMessage();
                    welcomeMessage.DeserializeObject(ref reader);
                    ClientBehaviour.Instance.PlayerID = welcomeMessage.PlayerID;

                    if (!ClientBehaviour.Instance.IsHost)
                    {
                        ClientBehaviour.Instance.Lobby.PrintMessage("Succesfully joined the server.", Color.green);
                    }

                    //Send Name to Server.
                    var nameMessage = new SetNameMessage
                    {
                        Name = ClientBehaviour.Instance.PlayerName
                    };

                    var writer = ClientBehaviour.Instance.m_Driver.BeginSend(ClientBehaviour.Instance.m_Connection);
                    nameMessage.SerializeObject(ref writer);
                    ClientBehaviour.Instance.m_Driver.EndSend(writer);

                    if (!ClientBehaviour.Instance.IsHost)
                    {
                        ClientBehaviour.Instance.Lobby.PrintMessage("Succesfully Connected to the Server.", Color.green);
                    }


                    break;

                case Message.MessageType.SetName:
                    break;

                case Message.MessageType.RequestDenied:
                    var deniedMessage = new RequestDenied();
                    deniedMessage.DeserializeObject(ref reader);
                    Debug.Log("Message ID: " + deniedMessage.DeniedMessageID + " was denied by the server.");

                    break;

                case Message.MessageType.PlayerLeft:
                    var playerLeft = new PlayerLeft();
                    playerLeft.DeserializeObject(ref reader);

                    ClientBehaviour.Instance.Clients.RemoveAt(playerLeft.PlayerDisconnectID);

                    if (!ClientBehaviour.Instance.IsHost)
                    {
                        ClientBehaviour.Instance.Lobby.PrintMessage("Player " + playerLeft.PlayerDisconnectID + " has disconnected.", Color.yellow);
                    }

                    break;

                case Message.MessageType.StartGame:
                    var startGame = new StartGame();
                    startGame.DeserializeObject(ref reader);
                    for (int i = 0; i < ClientBehaviour.Instance.Clients.Count; i++)
                    {
                        ClientBehaviour.Instance.Clients[i].StartHealth = startGame.StartHP;
                        //Debug.Log(startGame.StartHP);
                    }

                    if (!ClientBehaviour.Instance.IsHost)
                    {
                        ClientBehaviour.Instance.Lobby.PrintMessage("Game Starting...", Color.blue);
                    }

                    ClientBehaviour.Instance.CurrentGameState         = GameState.InGame;
                    ClientBehaviour.Instance.ClientUI                 = GameObject.Instantiate(Resources.Load("ClientUI") as GameObject).GetComponent <ClientUI>();
                    ClientBehaviour.Instance.ClientUI.PlayerInfo.text = ClientBehaviour.Instance.PlayerName;
                    ClientBehaviour.Instance.ClientUI.HealthInfo.text = startGame.StartHP + "/" + startGame.StartHP + " HP";
                    GameObject.DontDestroyOnLoad(ClientBehaviour.Instance.ClientUI.gameObject);

                    UnityEngine.SceneManagement.SceneManager.LoadScene("GameScene");


                    break;

                case Message.MessageType.None:
                default:
                    //Debug.Log("Received Server Data | " + ConnectionID);
                    break;
                }
            }
            else //Serverside handling
            {
                switch (messageType)
                {
                case Message.MessageType.NewPlayer:
                    break;

                case Message.MessageType.Welcome:
                    break;

                case Message.MessageType.SetName:
                    var _message = new SetNameMessage();
                    _message.DeserializeObject(ref reader);
                    //Debug.Log("Welcome User:"******"Received Client Data | " + ConnectionID);
                    break;
                }
            }
        }