// ======================= PUBLIC METHODS - PLAYER ================================


        // -------------------------------------------------------------------------------
        // RequestLoginPlayer
        // -------------------------------------------------------------------------------
        public override bool RequestLoginPlayer(NetworkConnection conn, string name)
        {
            if (!base.RequestLoginPlayer(conn, name))
            {
                return(false);
            }

            PlayerLoginRequestMessage message = new PlayerLoginRequestMessage
            {
                playername = name
            };

            conn.Send(message);

            return(true);
        }
        // ========================= MESSAGE HANDLERS - PLAYER ============================

        // -------------------------------------------------------------------------------
        // OnPlayerLoginRequestMessage
        // @Client -> @Server
        // -------------------------------------------------------------------------------
        void OnPlayerLoginRequestMessage(NetworkConnection conn, PlayerLoginRequestMessage msg)
        {
            ServerResponseMessage message = new ServerResponseMessage
            {
                code             = successCode,
                text             = "",
                causesDisconnect = false
            };

            if (DatabaseManager.singleton.TryPlayerLogin(msg.playername, msg.username))
            {
                NetworkManager.singleton.LoginPlayer(conn, msg.playername);

                message.text = systemText.playerLoginSuccess;
                eventListener.onPlayerLogin.Invoke(conn.identity.gameObject);
            }
            else
            {
                message.text = systemText.playerLoginFailure;
                message.code = errorCode;
            }

            conn.Send(message);
        }