コード例 #1
0
        private void HistoryLog(HistoryBookContext DB, Dictionary <string, Player> aLastPlayerData, Player aPlayer)
        {
            var Entry = aLastPlayerData.TryGetValue(aPlayer.SteamId, out Player LastData)
                ? DetectChages(LastData, aPlayer)
                : new HistoryBookOfPlayers()
            {
                Timestamp = DateTime.Now.ToUniversalTime(),
                Playfield = aPlayer.Playfield,
                PosX      = (int)aPlayer.PosX,
                PosY      = (int)aPlayer.PosY,
                PosZ      = (int)aPlayer.PosZ,
                SteamId   = aPlayer.SteamId,
                Name      = aPlayer.PlayerName,
                Online    = aPlayer.Online,
                Changed   = GetPlayerChanges(null, aPlayer),
            };

            if (!aLastPlayerData.TryAdd(aPlayer.SteamId, aPlayer))
            {
                aLastPlayerData[aPlayer.SteamId] = aPlayer;
            }

            if (Entry != null)
            {
                DB.Players.Add(Entry);
            }
        }
コード例 #2
0
 public void CreateAndUpdateDatabase()
 {
     using (var DB = new HistoryBookContext())
     {
         DB.Database.Migrate();
         DB.Database.EnsureCreated();
         DB.Database.ExecuteSqlCommand("PRAGMA journal_mode=WAL;");
     }
 }
コード例 #3
0
        public void DeleteHistory(int aDays)
        {
            var DelTime = DateTime.Now - new TimeSpan(aDays, 0, 0, 0);

            using (var DB = new HistoryBookContext())
            {
                DB.Players.RemoveRange(DB.Players.Where(P => P.Timestamp < DelTime));
                DB.Structures.RemoveRange(DB.Structures.Where(S => S.Timestamp < DelTime));

                DB.SaveChanges();
                DB.Database.ExecuteSqlCommand("VACUUM;");
            }
        }
コード例 #4
0
        /// <summary>
        /// classNr == -1 --> Struktur nicht vom DSL geladen
        /// </summary>
        /// <param name="DB"></param>
        /// <param name="aLastStructuresData"></param>
        /// <param name="aStructuresData"></param>
        private void HistoryLogStructures(HistoryBookContext DB, Dictionary <int, PlayfieldStructureData> aLastStructuresData, Dictionary <int, PlayfieldStructureData> aStructuresData)
        {
            bool IsFirstRead = aLastStructuresData.Count == 0;

            // bekannte Strukturen
            aStructuresData
            .Where(S => aLastStructuresData.ContainsKey(S.Key) && S.Value.StructureInfo.classNr != -1 && Changed(aLastStructuresData[S.Key], S.Value))
            .ToArray()
            .ForEach(S =>
            {
                DB.Structures.Add(CreateStructureHistoryEntry(aLastStructuresData[S.Key].StructureInfo, S.Value, null));
                aLastStructuresData[S.Key] = S.Value;
            });

            // neue Strukturen
            aStructuresData
            .Where(S => !aLastStructuresData.ContainsKey(S.Key) && S.Value.StructureInfo.classNr != -1)
            .ForEach(S =>
            {
                DB.Structures.Add(CreateStructureHistoryEntry(null, S.Value, I =>
                {
                    if (IsFirstRead)
                    {
                        I.IsFirstRead = true;
                    }
                    else
                    {
                        I.IsNew = true;
                    }
                }));
                aLastStructuresData.Add(S.Key, S.Value);
            });

            // gelöschte Strukturen
            aLastStructuresData
            .Where(S => !aStructuresData.ContainsKey(S.Key))
            .ToArray()
            .ForEach(S =>
            {
                DB.Structures.Add(CreateStructureHistoryEntry(null, S.Value, I => I.IsDeleted = true));
                aLastStructuresData.Remove(S.Key);
            });
        }
コード例 #5
0
        private void HistoryLog()
        {
            // Update GlobalSTructureInfo on Playfields
            PlayerManager.Value.QueryPlayer(PDB =>
                                            PDB.Players
                                            .Where(P => P.Online)
                                            .GroupBy(P => P.Playfield, (k, p) => p.FirstOrDefault()),
                                            P => {
                Request_GlobalStructure_Update(new PString(P.Playfield)).Wait();
                Thread.Sleep(100);
            });

            using (var DB = new HistoryBookContext())
            {
                var Structures = StructureManager.Value.CurrentGlobalStructures;

                HistoryLogStructures(DB, LastStructuresData, Structures);
                PlayerManager.Value.QueryPlayer(PDB => PDB.Players, P => HistoryLog(DB, LastPlayerData, P));

                DB.SaveChanges();
            }
        }
コード例 #6
0
 public HistoryBookController(HistoryBookContext aHistoryBookContext)
 {
     DB = aHistoryBookContext;
     HistoryBookManager = Program.GetManager <HistoryBookManager>();
 }