namespace SRDebugger.Services { using UnityEngine; public delegate void ConsoleUpdatedEventHandler(IConsoleService console); public interface IConsoleService { int ErrorCount { get; } int WarningCount { get; } int InfoCount { get; } /// /// List of ConsoleEntry objects since the last clear. /// IReadOnlyList Entries { get; } /// /// List of all ConsoleEntry objects, regardless of clear. /// IReadOnlyList AllEntries { get; } event ConsoleUpdatedEventHandler Updated; event ConsoleUpdatedEventHandler Error; bool LoggingEnabled { get; set; } bool LogHandlerIsOverriden { get; } void Clear(); } public class ConsoleEntry { private const int MessagePreviewLength = 180; private const int StackTracePreviewLength = 120; private string _messagePreview; private string _stackTracePreview; /// /// Number of times this log entry has occured (if collapsing is enabled) /// 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; } } }