111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
| namespace SRDebugger.Services
 | |
| {
 | |
|     using UnityEngine;
 | |
| 
 | |
|     public delegate void ConsoleUpdatedEventHandler(IConsoleService console);
 | |
| 
 | |
|     public interface IConsoleService
 | |
|     {
 | |
|         int ErrorCount { get; }
 | |
|         int WarningCount { get; }
 | |
|         int InfoCount { get; }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// List of ConsoleEntry objects since the last clear.
 | |
|         /// </summary>
 | |
|         IReadOnlyList<ConsoleEntry> Entries { get; }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// List of all ConsoleEntry objects, regardless of clear.
 | |
|         /// </summary>
 | |
|         IReadOnlyList<ConsoleEntry> AllEntries { get; }
 | |
| 
 | |
|         event ConsoleUpdatedEventHandler Updated;
 | |
| 
 | |
|         event ConsoleUpdatedEventHandler Error;
 | |
| 
 | |
|         void Clear();
 | |
|     }
 | |
| 
 | |
|     public class ConsoleEntry
 | |
|     {
 | |
|         private const int MessagePreviewLength = 180;
 | |
|         private const int StackTracePreviewLength = 120;
 | |
|         private string _messagePreview;
 | |
|         private string _stackTracePreview;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Number of times this log entry has occured (if collapsing is enabled)
 | |
|         /// </summary>
 | |
|         public int Count = 1;
 | |
| 
 | |
|         public LogType LogType;
 | |
|         public string Message;
 | |
|         public string StackTrace;
 | |
|         public ConsoleEntry() {}
 | |
| 
 | |
|         public ConsoleEntry(ConsoleEntry other)
 | |
|         {
 | |
|             Message = other.Message;
 | |
|             StackTrace = other.StackTrace;
 | |
|             LogType = other.LogType;
 | |
|             Count = other.Count;
 | |
|         }
 | |
| 
 | |
|         public string MessagePreview
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (_messagePreview != null)
 | |
|                 {
 | |
|                     return _messagePreview;
 | |
|                 }
 | |
|                 if (string.IsNullOrEmpty(Message))
 | |
|                 {
 | |
|                     return "";
 | |
|                 }
 | |
| 
 | |
|                 _messagePreview = Message.Split('\n')[0];
 | |
|                 _messagePreview = _messagePreview.Substring(0, Mathf.Min(_messagePreview.Length, MessagePreviewLength));
 | |
| 
 | |
|                 return _messagePreview;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public string StackTracePreview
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (_stackTracePreview != null)
 | |
|                 {
 | |
|                     return _stackTracePreview;
 | |
|                 }
 | |
|                 if (string.IsNullOrEmpty(StackTrace))
 | |
|                 {
 | |
|                     return "";
 | |
|                 }
 | |
| 
 | |
|                 _stackTracePreview = StackTrace.Split('\n')[0];
 | |
|                 _stackTracePreview = _stackTracePreview.Substring(0,
 | |
|                     Mathf.Min(_stackTracePreview.Length, StackTracePreviewLength));
 | |
| 
 | |
|                 return _stackTracePreview;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public bool Matches(ConsoleEntry other)
 | |
|         {
 | |
|             if (ReferenceEquals(null, other))
 | |
|             {
 | |
|                 return false;
 | |
|             }
 | |
|             if (ReferenceEquals(this, other))
 | |
|             {
 | |
|                 return true;
 | |
|             }
 | |
|             return string.Equals(Message, other.Message) && string.Equals(StackTrace, other.StackTrace) &&
 | |
|                    LogType == other.LogType;
 | |
|         }
 | |
|     }
 | |
| }
 |