/// <summary>
        /// Logs an error event with the analytics service.
        /// </summary>
        /// <param name="message">
        /// The error or exception message.
        /// </param>
        /// <param name="severity">
        /// The severity of the event.
        /// </param>
        /// <param name="area">
        /// The optional area or level name information.
        /// </param>
        /// <param name="position">
        /// The optional position of the event.
        /// </param>
        public void LogErrorEvent(string message, AnalyticsErrorSeverity severity, string area, Vector3? position)
        {
            if (!this.m_KeysInitialized || !this.m_SessionInitialized)
            {
                // We don't throw an exception here because we may be reporting a crash.
            }

            // If we're not already stopping; this method might be called outside the game
            // loop in which case we can't do it via a thread.
            if (!this.m_Stopping)
            {
                this.EnsureRunning();
            }

            var values = new Dictionary<string, object>();
            values.Add("user_id", this.m_UserId);
            values.Add("session_id", this.m_SessionId);
            values.Add("build", this.m_BuildHash);
            values.Add("message", message);

            switch (severity)
            {
                case AnalyticsErrorSeverity.Critical:
                    values.Add("severity", "critical");
                    break;
                case AnalyticsErrorSeverity.Error:
                    values.Add("severity", "error");
                    break;
                case AnalyticsErrorSeverity.Warning:
                    values.Add("severity", "warning");
                    break;
                case AnalyticsErrorSeverity.Info:
                    values.Add("severity", "info");
                    break;
                case AnalyticsErrorSeverity.Debug:
                    values.Add("severity", "debug");
                    break;
            }

            if (area != null)
            {
                values.Add("area", area);
            }

            if (position != null)
            {
                values.Add("x", position.Value.X);
                values.Add("y", position.Value.Y);
                values.Add("z", position.Value.Z);
            }

            this.m_PendingGameplayErrors.Enqueue(values);

            // If we are in the process of stopping, run the submission ourselves.
            if (this.m_Stopping)
            {
                this.Run();
            }
        }
        /// <summary>
        /// Logs an error event with the analytics service.
        /// </summary>
        /// <param name="message">
        /// The error or exception message.
        /// </param>
        /// <param name="severity">
        /// The severity of the event.
        /// </param>
        /// <param name="area">
        /// The optional area or level name information.
        /// </param>
        /// <param name="position">
        /// The optional position of the event.
        /// </param>
        public void LogErrorEvent(string message, AnalyticsErrorSeverity severity, string area, Vector3?position)
        {
            if (!this.m_KeysInitialized || !this.m_SessionInitialized)
            {
                // We don't throw an exception here because we may be reporting a crash.
            }

            // If we're not already stopping; this method might be called outside the game
            // loop in which case we can't do it via a thread.
            if (!this.m_Stopping)
            {
                this.EnsureRunning();
            }

            var values = new Dictionary <string, object>();

            values.Add("user_id", this.m_UserId);
            values.Add("session_id", this.m_SessionId);
            values.Add("build", this.m_BuildHash);
            values.Add("message", message);

            switch (severity)
            {
            case AnalyticsErrorSeverity.Critical:
                values.Add("severity", "critical");
                break;

            case AnalyticsErrorSeverity.Error:
                values.Add("severity", "error");
                break;

            case AnalyticsErrorSeverity.Warning:
                values.Add("severity", "warning");
                break;

            case AnalyticsErrorSeverity.Info:
                values.Add("severity", "info");
                break;

            case AnalyticsErrorSeverity.Debug:
                values.Add("severity", "debug");
                break;
            }

            if (area != null)
            {
                values.Add("area", area);
            }

            if (position != null)
            {
                values.Add("x", position.Value.X);
                values.Add("y", position.Value.Y);
                values.Add("z", position.Value.Z);
            }

            this.m_PendingGameplayErrors.Enqueue(values);

            // If we are in the process of stopping, run the submission ourselves.
            if (this.m_Stopping)
            {
                this.Run();
            }
        }
 public void LogErrorEvent(string message, AnalyticsErrorSeverity severity, string area, Microsoft.Xna.Framework.Vector3? position)
 {
 }
 public void LogErrorEvent(string message, AnalyticsErrorSeverity severity, string area, Microsoft.Xna.Framework.Vector3?position)
 {
 }