mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-19 00:51:30 -07:00
use FileSystemWatcher for activity watcher
This commit is contained in:
parent
15dc2dfbfe
commit
9fac9290c8
@ -74,40 +74,56 @@ namespace Bloxstrap.Integrations
|
|||||||
if (!Directory.Exists(logDirectory))
|
if (!Directory.Exists(logDirectory))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FileInfo logFileInfo;
|
|
||||||
|
|
||||||
// we need to make sure we're fetching the absolute latest log file
|
// we need to make sure we're fetching the absolute latest log file
|
||||||
// if roblox doesn't start quickly enough, we can wind up fetching the previous log file
|
// if roblox doesn't start quickly enough, we can wind up fetching the previous log file
|
||||||
// good rule of thumb is to find a log file that was created in the last 15 seconds or so
|
// good rule of thumb is to find a log file that was created in the last 15 seconds or so
|
||||||
|
|
||||||
App.Logger.WriteLine(LOG_IDENT, "Opening Roblox log file...");
|
App.Logger.WriteLine(LOG_IDENT, "Opening Roblox log file...");
|
||||||
|
|
||||||
while (true)
|
string logPath = "";
|
||||||
{
|
|
||||||
logFileInfo = new DirectoryInfo(logDirectory)
|
// check if log file was created before the tracker launched
|
||||||
|
FileInfo logFileInfo = new DirectoryInfo(logDirectory)
|
||||||
.GetFiles()
|
.GetFiles()
|
||||||
.Where(x => x.Name.Contains("Player", StringComparison.OrdinalIgnoreCase) && x.CreationTime <= DateTime.Now)
|
.Where(x => x.Name.Contains("Player", StringComparison.OrdinalIgnoreCase) && x.CreationTime <= DateTime.Now)
|
||||||
.OrderByDescending(x => x.CreationTime)
|
.OrderByDescending(x => x.CreationTime)
|
||||||
.First();
|
.First();
|
||||||
|
|
||||||
if (logFileInfo.CreationTime.AddSeconds(15) > DateTime.Now)
|
// is 15s too much?
|
||||||
break;
|
if (logFileInfo.CreationTime.AddSeconds(15) < DateTime.Now)
|
||||||
|
{
|
||||||
|
// wait for the log file
|
||||||
|
using (FileSystemWatcher watcher = new FileSystemWatcher())
|
||||||
|
using (AutoResetEvent waitEvent = new AutoResetEvent(false))
|
||||||
|
{
|
||||||
|
watcher.Path = logDirectory;
|
||||||
|
watcher.Created += (s, e) => logPath = e.FullPath; waitEvent.Set();
|
||||||
|
watcher.EnableRaisingEvents = true;
|
||||||
|
|
||||||
App.Logger.WriteLine(LOG_IDENT, $"Could not find recent enough log file, waiting... (newest is {logFileInfo.Name})");
|
App.Logger.WriteLine(LOG_IDENT, "Waiting for log file.");
|
||||||
await Task.Delay(1000);
|
|
||||||
|
waitEvent.WaitOne();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logPath = logFileInfo.FullName;
|
||||||
|
App.Logger.WriteLine(LOG_IDENT, "Found recent log file.");
|
||||||
|
}
|
||||||
|
|
||||||
|
App.Logger.WriteLine(LOG_IDENT, $"Got log file: {Path.GetFileName(logPath)}");
|
||||||
|
|
||||||
OnLogOpen?.Invoke(this, EventArgs.Empty);
|
OnLogOpen?.Invoke(this, EventArgs.Empty);
|
||||||
|
|
||||||
LogLocation = logFileInfo.FullName;
|
LogLocation = logPath;
|
||||||
FileStream logFileStream = logFileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
FileStream logFileStream = File.Open(logPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||||
App.Logger.WriteLine(LOG_IDENT, $"Opened {LogLocation}");
|
App.Logger.WriteLine(LOG_IDENT, $"Opened {logPath}");
|
||||||
|
|
||||||
var logUpdatedEvent = new AutoResetEvent(false);
|
var logUpdatedEvent = new AutoResetEvent(false);
|
||||||
var logWatcher = new FileSystemWatcher()
|
var logWatcher = new FileSystemWatcher()
|
||||||
{
|
{
|
||||||
Path = logDirectory,
|
Path = logDirectory,
|
||||||
Filter = Path.GetFileName(logFileInfo.FullName),
|
Filter = Path.GetFileName(logPath),
|
||||||
EnableRaisingEvents = true
|
EnableRaisingEvents = true
|
||||||
};
|
};
|
||||||
logWatcher.Changed += (s, e) => logUpdatedEvent.Set();
|
logWatcher.Changed += (s, e) => logUpdatedEvent.Set();
|
||||||
|
Loading…
Reference in New Issue
Block a user