private void ReadLogFile() { _running = true; _offset = FindInitialOffset(); Util.DebugLog?.WriteLine($"LogWatcher.ReadLogFile: offset={_offset}"); while (!_stop) { var fileInfo = new FileInfo(_info.FilePath); if (fileInfo.Exists) { if (!_logFileExists) { _logFileExists = true; OnLogFound?.Invoke(this, new LogFoundEventArgs(_info.Name)); Util.DebugLog?.WriteLine("LogWatcher.ReadLogFile: found " + _info.Name); } using (var fs = new FileStream(_info.FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { fs.Seek(_offset, SeekOrigin.Begin); if (fs.Length == _offset) { Thread.Sleep(_readDelay); continue; } var lines = new List <LogLineItem>(); using (var sr = new StreamReader(fs)) { string line; while (!sr.EndOfStream && (line = sr.ReadLine()) != null) { if (line.StartsWith("D ")) { var next = sr.Peek(); if (!sr.EndOfStream && !(next == 'D' || next == 'W')) { break; } var logLine = new LogLineItem(_info.Name, line); if ((!_info.HasFilters || (_info.StartsWithFilters?.Any(x => logLine.LineContent.StartsWith(x)) ?? false) || (_info.ContainsFilters?.Any(x => logLine.LineContent.Contains(x)) ?? false)) && logLine.Time >= _startingPoint) { lines.Add(logLine); } } else { OnIgnoredLine?.Invoke(this, new RawLogLineEventArgs(line)); } _offset += Encoding.UTF8.GetByteCount(line + Environment.NewLine); } } OnNewLine?.Invoke(this, new LogLineEventArgs(lines)); } } Thread.Sleep(_readDelay); } _running = false; }
public void Print() { for (int i = 0; i < arr.GetLength(0); i++) { for (int j = 0; j < arr.GetLength(1); j++) { Console.Write(arr[i, j] + " "); } OnNewLine?.Invoke(""); } }
protected void AddNewLine(ChatLine chatLine) { OnNewLine?.Invoke(chatLine); }