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; | |||
|  |         } | |||
|  |     } | |||
|  | } |