mirror of
https://github.com/BubbaGumpShrump/AutoTrackR2.git
synced 2025-06-26 08:29:06 +00:00
Compare commits
No commits in common. "ad773f6790d0e7252dfc9389d70cf9a87b774c10" and "d58d3af8fc00dcbf46cc8e2872bee1228dc1be96" have entirely different histories.
ad773f6790
...
d58d3af8fc
5 changed files with 30 additions and 153 deletions
|
@ -25,9 +25,6 @@ public partial class HomePage : UserControl
|
|||
private bool _isLogHandlerRunning = false;
|
||||
private int _counter = 1;
|
||||
private System.Timers.Timer _counterTimer;
|
||||
private bool _isInitializing = false;
|
||||
private System.Timers.Timer? _initializationTimer;
|
||||
private bool _wasStarCitizenRunningOnStart = false;
|
||||
|
||||
public HomePage()
|
||||
{
|
||||
|
@ -45,18 +42,6 @@ public partial class HomePage : UserControl
|
|||
AdjustFontSize(KillTallyTextBox);
|
||||
AddKillHistoryKillsToUI();
|
||||
|
||||
// Check if Star Citizen is already running
|
||||
_wasStarCitizenRunningOnStart = IsStarCitizenRunning();
|
||||
if (_wasStarCitizenRunningOnStart)
|
||||
{
|
||||
UpdateStatusIndicator(true);
|
||||
InitializeLogHandler();
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateStatusIndicator(false);
|
||||
}
|
||||
|
||||
// Initialize and start the status check timer
|
||||
_statusCheckTimer = new System.Timers.Timer(1000); // Check every second
|
||||
_statusCheckTimer.Elapsed += CheckStarCitizenStatus;
|
||||
|
@ -66,6 +51,16 @@ public partial class HomePage : UserControl
|
|||
_counterTimer = new System.Timers.Timer(1000); // Update every second
|
||||
_counterTimer.Elapsed += UpdateCounter;
|
||||
_counterTimer.Start();
|
||||
|
||||
// Check if Star Citizen is already running and initialize accordingly
|
||||
if (IsStarCitizenRunning())
|
||||
{
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
UpdateStatusIndicator(true);
|
||||
InitializeLogHandler(); // Then initialize the log handler
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckStarCitizenStatus(object? sender, ElapsedEventArgs e)
|
||||
|
@ -73,44 +68,14 @@ public partial class HomePage : UserControl
|
|||
bool isRunning = IsStarCitizenRunning();
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
if (_isInitializing)
|
||||
{
|
||||
return; // Don't update status while initializing
|
||||
}
|
||||
UpdateStatusIndicator(isRunning);
|
||||
|
||||
if (isRunning)
|
||||
{
|
||||
if (!_isLogHandlerRunning)
|
||||
{
|
||||
if (_wasStarCitizenRunningOnStart)
|
||||
{
|
||||
// Game was already running on start, initialize immediately
|
||||
UpdateStatusIndicator(true);
|
||||
InitializeLogHandler();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Game started after app launch, use initialization delay
|
||||
_isInitializing = true;
|
||||
UpdateStatusIndicator(false, true); // Set to yellow for initialization
|
||||
|
||||
_initializationTimer = new System.Timers.Timer(20000); // 20 seconds
|
||||
_initializationTimer.Elapsed += (sender, e) =>
|
||||
{
|
||||
_isInitializing = false;
|
||||
_initializationTimer?.Stop();
|
||||
_initializationTimer?.Dispose();
|
||||
_initializationTimer = null;
|
||||
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
// Game is running, start log monitoring and read initial states
|
||||
UpdateStatusIndicator(true);
|
||||
InitializeLogHandler();
|
||||
});
|
||||
};
|
||||
_initializationTimer.Start();
|
||||
}
|
||||
// Game is running, start log monitoring and read initial states
|
||||
InitializeLogHandler();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -131,23 +96,16 @@ public partial class HomePage : UserControl
|
|||
_logHandler?.StopMonitoring();
|
||||
_isLogHandlerRunning = false;
|
||||
}
|
||||
|
||||
UpdateStatusIndicator(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void UpdateStatusIndicator(bool isRunning, bool isInitializing = false)
|
||||
private void UpdateStatusIndicator(bool isRunning)
|
||||
{
|
||||
if (isInitializing)
|
||||
{
|
||||
StatusLight.Fill = new SolidColorBrush(Colors.Yellow);
|
||||
StatusText.Text = "TrackR\nInitializing";
|
||||
}
|
||||
else if (isRunning)
|
||||
if (isRunning)
|
||||
{
|
||||
StatusLight.Fill = new SolidColorBrush(Colors.Green);
|
||||
StatusText.Text = "TrackR\nRunning";
|
||||
StatusText.Text = "TrackR\nActive";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -234,8 +192,7 @@ public partial class HomePage : UserControl
|
|||
TrackRver = "2.10",
|
||||
Enlisted = playerData?.JoinDate,
|
||||
KillTime = ((DateTimeOffset)DateTime.ParseExact(actorDeathData.Timestamp, "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)).ToUnixTimeSeconds().ToString(),
|
||||
PFP = playerData?.PFPURL ?? "https://cdn.robertsspaceindustries.com/static/images/account/avatar_default_big.jpg",
|
||||
Hash = WebHandler.GenerateKillHash(actorDeathData.VictimPilot, ((DateTimeOffset)DateTime.ParseExact(actorDeathData.Timestamp, "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)).ToUnixTimeSeconds())
|
||||
PFP = playerData?.PFPURL ?? "https://cdn.robertsspaceindustries.com/static/images/account/avatar_default_big.jpg"
|
||||
};
|
||||
|
||||
switch (LocalPlayerData.CurrentGameMode)
|
||||
|
@ -248,13 +205,6 @@ public partial class HomePage : UserControl
|
|||
break;
|
||||
}
|
||||
|
||||
// Check if this is a duplicate kill
|
||||
if (WebHandler.IsDuplicateKill(killData.Hash))
|
||||
{
|
||||
Console.WriteLine("Duplicate kill detected, skipping...");
|
||||
return;
|
||||
}
|
||||
|
||||
// Add kill to UI
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
|
|
|
@ -7,8 +7,8 @@ namespace AutoTrackR2;
|
|||
public class KillHistoryManager
|
||||
{
|
||||
private string _killHistoryPath;
|
||||
private readonly string _headers = "KillTime,EnemyPilot,EnemyShip,Enlisted,RecordNumber,OrgAffiliation,Player,Weapon,Ship,Method,Mode,GameVersion,TrackRver,Logged,PFP,Hash\n";
|
||||
|
||||
private readonly string _headers = "KillTime,EnemyPilot,EnemyShip,Enlisted,RecordNumber,OrgAffiliation,Player,Weapon,Ship,Method,Mode,GameVersion,TrackRver,Logged,PFP\n";
|
||||
|
||||
public KillHistoryManager(string logPath)
|
||||
{
|
||||
_killHistoryPath = logPath;
|
||||
|
@ -89,8 +89,8 @@ public class KillHistoryManager
|
|||
|
||||
// Append the new kill data to the CSV file
|
||||
var csv = new StringBuilder();
|
||||
csv.AppendLine($"\"{killData.KillTime}\",\"{killData.EnemyPilot}\",\"{killData.EnemyShip}\",\"{killData.Enlisted}\",\"{killData.RecordNumber}\",\"{killData.OrgAffiliation}\",\"{killData.Player}\",\"{killData.Weapon}\",\"{killData.Ship}\",\"{killData.Method}\",\"{killData.Mode}\",\"{killData.GameVersion}\",\"{killData.TrackRver}\",\"{killData.Logged}\",\"{killData.PFP}\",\"{killData.Hash}\"");
|
||||
|
||||
csv.AppendLine($"\"{killData.KillTime}\",\"{killData.EnemyPilot}\",\"{killData.EnemyShip}\",\"{killData.Enlisted}\",\"{killData.RecordNumber}\",\"{killData.OrgAffiliation}\",\"{killData.Player}\",\"{killData.Weapon}\",\"{killData.Ship}\",\"{killData.Method}\",\"{killData.Mode}\",\"{killData.GameVersion}\",\"{killData.TrackRver}\",\"{killData.Logged}\",\"{killData.PFP}\"");
|
||||
|
||||
// Check file can be written to
|
||||
try
|
||||
{
|
||||
|
@ -138,8 +138,7 @@ public class KillHistoryManager
|
|||
GameVersion = data?[11],
|
||||
TrackRver = data?[12],
|
||||
Logged = data?[13],
|
||||
PFP = data?[14],
|
||||
Hash = data?[15]
|
||||
PFP = data?[14]
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -30,11 +30,8 @@ public class LogHandler
|
|||
private CancellationTokenSource? _cancellationTokenSource;
|
||||
private GameProcessState _gameProcessState = GameProcessState.NotRunning;
|
||||
private bool _isMonitoring = false;
|
||||
private bool _isInitializing = false;
|
||||
private System.Timers.Timer? _initializationTimer;
|
||||
|
||||
public bool IsMonitoring => _isMonitoring;
|
||||
public bool IsInitializing => _isInitializing;
|
||||
|
||||
// Handlers that should be run on every log entry
|
||||
// Overlap with _startupEventHandlers is fine
|
||||
|
@ -65,37 +62,6 @@ public class LogHandler
|
|||
throw new FileNotFoundException("Log file not found", _logPath);
|
||||
}
|
||||
|
||||
// Check if Star Citizen is running
|
||||
if (!IsStarCitizenRunning())
|
||||
{
|
||||
StartInitializationDelay();
|
||||
return;
|
||||
}
|
||||
|
||||
InitializeLogHandler();
|
||||
}
|
||||
|
||||
private void StartInitializationDelay()
|
||||
{
|
||||
_isInitializing = true;
|
||||
_initializationTimer = new System.Timers.Timer(20000); // 20 seconds
|
||||
_initializationTimer.Elapsed += (sender, e) =>
|
||||
{
|
||||
_isInitializing = false;
|
||||
_initializationTimer?.Stop();
|
||||
_initializationTimer?.Dispose();
|
||||
_initializationTimer = null;
|
||||
|
||||
if (IsStarCitizenRunning())
|
||||
{
|
||||
InitializeLogHandler();
|
||||
}
|
||||
};
|
||||
_initializationTimer.Start();
|
||||
}
|
||||
|
||||
private void InitializeLogHandler()
|
||||
{
|
||||
_fileStream = new FileStream(_logPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||
_reader = new StreamReader(_fileStream);
|
||||
|
||||
|
@ -109,11 +75,6 @@ public class LogHandler
|
|||
StartMonitoring();
|
||||
}
|
||||
|
||||
private bool IsStarCitizenRunning()
|
||||
{
|
||||
return Process.GetProcessesByName("StarCitizen").Length > 0;
|
||||
}
|
||||
|
||||
public void StartMonitoring()
|
||||
{
|
||||
if (_isMonitoring) return;
|
||||
|
@ -195,26 +156,14 @@ public class LogHandler
|
|||
GameProcessState newGameProcessState = process != null ? GameProcessState.Running : GameProcessState.NotRunning;
|
||||
if (newGameProcessState == GameProcessState.Running && _gameProcessState == GameProcessState.NotRunning)
|
||||
{
|
||||
// Game process went from NotRunning to Running, wait 20 seconds before reloading
|
||||
Console.WriteLine("Game process started, waiting 20 seconds before initializing...");
|
||||
_isInitializing = true;
|
||||
// Game process went from NotRunning to Running, so reload the Game.log file
|
||||
Console.WriteLine("Game process started, reloading log file");
|
||||
|
||||
_initializationTimer = new System.Timers.Timer(20000); // 20 seconds
|
||||
_initializationTimer.Elapsed += (sender, e) =>
|
||||
{
|
||||
_isInitializing = false;
|
||||
_initializationTimer?.Stop();
|
||||
_initializationTimer?.Dispose();
|
||||
_initializationTimer = null;
|
||||
_reader?.Close();
|
||||
_fileStream?.Close();
|
||||
|
||||
Console.WriteLine("Initialization delay complete, reloading log file");
|
||||
_reader?.Close();
|
||||
_fileStream?.Close();
|
||||
|
||||
_fileStream = new FileStream(_logPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||
_reader = new StreamReader(_fileStream);
|
||||
};
|
||||
_initializationTimer.Start();
|
||||
_fileStream = new FileStream(_logPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||
_reader = new StreamReader(_fileStream);
|
||||
}
|
||||
_gameProcessState = newGameProcessState;
|
||||
}
|
||||
|
|
|
@ -29,5 +29,4 @@ public struct KillData
|
|||
public string? TrackRver;
|
||||
public string? Logged;
|
||||
public string? PFP;
|
||||
public string? Hash;
|
||||
}
|
|
@ -6,19 +6,11 @@ using System.Text.RegularExpressions;
|
|||
using AutoTrackR2.LogEventHandlers;
|
||||
using System.Globalization;
|
||||
using System.Security.Cryptography;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AutoTrackR2;
|
||||
|
||||
public static class WebHandler
|
||||
{
|
||||
private static HashSet<string> _recordedKillHashes = new HashSet<string>();
|
||||
|
||||
public static bool IsDuplicateKill(string hash)
|
||||
{
|
||||
return _recordedKillHashes.Contains(hash);
|
||||
}
|
||||
|
||||
class APIKillData
|
||||
{
|
||||
public string? victim_ship { get; set; }
|
||||
|
@ -36,7 +28,7 @@ public static class WebHandler
|
|||
public string hash { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public static string GenerateKillHash(string victimName, long timestamp)
|
||||
private static string GenerateKillHash(string victimName, long timestamp)
|
||||
{
|
||||
// Combine victim name and timestamp
|
||||
string combined = $"{victimName}_{timestamp}";
|
||||
|
@ -113,15 +105,6 @@ public static class WebHandler
|
|||
public static async Task SubmitKill(KillData killData)
|
||||
{
|
||||
var timestamp = long.Parse(killData.KillTime!);
|
||||
var hash = GenerateKillHash(killData.EnemyPilot!, timestamp);
|
||||
|
||||
// Check if this kill has already been recorded
|
||||
if (_recordedKillHashes.Contains(hash))
|
||||
{
|
||||
Console.WriteLine("Duplicate kill detected, skipping...");
|
||||
return;
|
||||
}
|
||||
|
||||
var apiKillData = new APIKillData
|
||||
{
|
||||
victim_ship = killData.EnemyShip,
|
||||
|
@ -136,7 +119,7 @@ public static class WebHandler
|
|||
trackr_version = killData.TrackRver,
|
||||
location = killData.Location,
|
||||
time = timestamp,
|
||||
hash = hash
|
||||
hash = GenerateKillHash(killData.EnemyPilot!, timestamp)
|
||||
};
|
||||
|
||||
if (string.IsNullOrEmpty(apiKillData.rsi))
|
||||
|
@ -192,9 +175,6 @@ public static class WebHandler
|
|||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {responseContent}");
|
||||
|
||||
// Add the hash to our recorded hashes
|
||||
_recordedKillHashes.Add(hash);
|
||||
|
||||
// Only process streamer data if streamlink is enabled
|
||||
if (ConfigManager.StreamlinkEnabled == 1)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue