示例#1
0
 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);
     }
 }
示例#2
0
        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);
        }