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("");
     }
 }
Exemple #3
0
 protected void AddNewLine(ChatLine chatLine)
 {
     OnNewLine?.Invoke(chatLine);
 }