/// <summary> /// Stores an INFO message to be logged /// </summary> /// <param name="Message">The message text</param> /// <param name="WorkingFile">The ConFile being processed for this message</param> /// <param name="LineNumber">The ConFile line number being processed for this message</param> public static void Info(string Message, ConFile WorkingFile = null, int LineNumber = 0) { if (Enabled) { LogEntry entry = new LogEntry() { Type = LogEntryType.Info, Message = Message, File = WorkingFile, Line = LineNumber }; lock (_syncObj) { Messages.Add(entry); if (OnMessageLogged != null) OnMessageLogged(null, entry); } } }
/// <summary> /// Loads every .ai file and parses it for use within this form /// </summary> protected async void ParseTemplates() { // Clear nodesand Globals! treeView1.Nodes.Clear(); //ObjectManager.ReleaseAll(); try { var timer = Stopwatch.StartNew(); // Load Kits LoadKitTemplate(); // Load Vehicle templates await LoadTemplates("Vehicles"); // Load Weapon templates await LoadTemplates("Weapons"); //Create a new log entry with parsing details timer.Stop(); LogEntry entry = new LogEntry() { Type = LogEntryType.Info, Message = String.Format( "========== Loaded Objects in {3} seconds: {0} succeeded, {2} failed, {1} skipped ==========", NameSpace.TotalObjectsLoaded, Logger.Warnings.Count, Logger.Errors.Count, $"{timer.Elapsed.Seconds}.{timer.Elapsed.Milliseconds}" ) }; // Append an empry entry (line break), and the Final message Logger.Messages.Add(new LogEntry()); Logger.Messages.Add(entry); // Update Loaded objects //ObjectsLoadedLabel.Text = ObjectManager.ObjectsCount.ToString(); ErrorsStripButton.Enabled = Logger.Errors.Count > 0; ErrorsStripButton.Text = Logger.Errors.Count + " Errors"; WarningsStripButton.Enabled = Logger.Warnings.Count > 0; WarningsStripButton.Text = Logger.Warnings.Count + " Warnings"; // Finally LogPage = LogEntryType.Error; // Force redraw MessagesStripButton_Click(this, EventArgs.Empty); // Refresh this process myProcess.Refresh(); // DO garabge collection first, to get the most accurate memory size GC.Collect(); // Update label MemoryUsageLabel.Text = String.Format( new FileSizeFormatProvider(), "{0:fs1}", myProcess.PrivateMemorySize64 ); } catch { } }
/// <summary> /// Stores an ERROR message to be logged /// </summary> /// <param name="error">The message text</param> /// <param name="file">The ConFile being processed for this message</param> /// <param name="line">The ConFile line number being processed for this message</param> public static void Error(string error, ConFile file = null, int line = 0, Exception exception = null) { if (Enabled) { LogEntry entry = new LogEntry() { Type = LogEntryType.Error, Message = error, File = file, Line = line, ExceptionObj = exception }; lock (_syncObj) { Messages.Add(entry); Errors.Add(entry); if (OnMessageLogged != null) OnMessageLogged(null, entry); } } }