Beispiel #1
0
        void QueueWatcher(object state)
        {
            CancellationTokenSource tokenSource = (CancellationTokenSource)state;

            LogFile.Create().Close();

            while (!tokenSource.IsCancellationRequested)
            {
                if (LogQueue.Count <= 0)
                {
                    Thread.Sleep(250);
                    continue;
                }
                using (var f = LogFile.AppendText()) {
                    f.AutoFlush = true;
                    while (LogQueue.Count > 0)
                    {
                        var o = LogQueue.Dequeue();
                        if (o.Message == OldLogMessage.Message)
                        {
                            return;
                        }
                        Console.ForegroundColor = o.GetColour();
                        OldLogMessage           = o;
                        f.WriteLine(o.Message);
                        Console.WriteLine(o.Message);
                        Console.ResetColor();
                    }
                }
            }
        }
Beispiel #2
0
        void QueueWatcher()
        {
            LogFile.Create().Close();

            while (IsThreadRunning)
            {
                if (LogQueue.Count <= 0)
                {
                    Thread.Sleep(250);
                    continue;
                }

                LogHandler.IsBackground = false;
                using (var f = LogFile.AppendText()) {
                    f.AutoFlush = true;
                    while (LogQueue.Count > 0)
                    {
                        var o = LogQueue.Dequeue();
                        if (o.Message == OldLogMessage.Message)
                        {
                            return;
                        }
                        Console.ForegroundColor = o.GetColour();
                        OldLogMessage           = o;
                        f.WriteLine(o.Message);
                        Console.WriteLine(o.Message);
                        Console.ResetColor();
                    }
                }

                LogHandler.IsBackground = true;
            }

            LogHandler.Join();
        }
Beispiel #3
0
        /// <summary>
        /// Log a message.
        /// Check first for config and enqueue the message if necessary.
        /// </summary>
        /// <param name="message">The message to log.</param>
        /// <param name="logType">Log type.</param>
        /// <param name="sender">The sender as a string.</param>
        /// <param name="context">The context of the message, this will normally be the sender or this class.</param>
        private static void Log(string message, LogType logType, string sender, Object context)
        {
            // Log everything if application is not playing.
            if (Application.isPlaying)
            {
                if (config == null)
                {
                    LogQueue.Enqueue(new QueueableLog(message, logType, sender, context));

                    if (askedForInitialization)
                    {
                        return;
                    }
                    askedForInitialization = true;

                    ConfigurationManager.OnServiceReady += service =>
                    {
                        config = service.GetConfig <DebugConfig>();

                        if (config == null)
                        {
                            UnityEngine
                            .Debug
                            .LogError("There is no debug config file. Won't be able to log anything!");
                        }
                    };

                    return;
                }

                while (LogQueue.Count > 0)
                {
                    QueueableLog log = LogQueue.Dequeue();
                    LogSingleMessage(log.Message, log.LogType, log.Sender, log.Context);
                }
            }

            LogSingleMessage(message, logType, sender, context);
        }