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); } }
public void CreateAndUpdateDatabase() { using (var DB = new HistoryBookContext()) { DB.Database.Migrate(); DB.Database.EnsureCreated(); DB.Database.ExecuteSqlCommand("PRAGMA journal_mode=WAL;"); } }
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;"); } }
/// <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); }); }
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(); } }
public HistoryBookController(HistoryBookContext aHistoryBookContext) { DB = aHistoryBookContext; HistoryBookManager = Program.GetManager <HistoryBookManager>(); }