PlayerStats GetPlayerStats(int playerId) { lock (_Database) { var playerStats = new PlayerStats(); playerStats.Id = playerId; var idParameter = new CommandParameter("player_id", playerId); playerStats.Name = _Database.ScalarFunction <string>("get_player_name", idParameter); using (var reader = _Database.ReadFunction("get_player_weapon_stats", idParameter)) { playerStats.Weapons = reader.ReadAll <PlayerWeaponStatsRow>(); } using (var reader = _Database.ReadFunction("get_player_encounter_stats", idParameter)) { playerStats.Encounters = reader.ReadAll <PlayerEncounterStatsRow>(); } using (var reader = _Database.ReadFunction("get_player_purchases", idParameter)) { playerStats.Purchases = reader.ReadAll <PlayerPurchasesRow>(); } using (var reader = _Database.ReadFunction("get_player_kill_death_ratio_history", idParameter)) { playerStats.KillDeathRatioHistory = reader.ReadAll <KillDeathRatioHistoryRow>(); } using (var reader = _Database.ReadFunction("get_player_games", idParameter)) { var rows = reader.ReadAll <PlayerGameHistoryRow>(); playerStats.Games = rows.Select(row => new PlayerGame(row)).ToList(); } return(playerStats); } }
void ProcessLog(string path) { _MaxRounds = MaxRoundsDefault; _Players = new Dictionary <string, string>(); string fileName = Path.GetFileName(path); var fileInfo = new FileInfo(path); long currentFileSize = fileInfo.Length; var getLogStateParameters = new[] { new CommandParameter("file_name", fileName), }; long?bytesProcessed = _Database.ScalarFunction <long?>("get_log_state", getLogStateParameters); if (bytesProcessed != null && bytesProcessed >= currentFileSize) { // This file has already been processed return; } var content = File.ReadAllText(path); content = content.Replace("\r", ""); if (content.Length == 0 || content.Last() != '\n') { // The log file is currently being written to or has been abandoned, skip it return; } Console.WriteLine("Processing {0}", path); var lines = content.Split('\n'); int lineCounter = 1; foreach (var line in lines) { ProcessLine(line, lineCounter); lineCounter++; } var updateLogStateParameters = new[] { new CommandParameter("file_name", fileName), new CommandParameter("bytes_processed", currentFileSize), }; _Database.NonQueryFunction("update_log_state", updateLogStateParameters); }