private static PlanetProjection ToPlanetProjection(DbPlanet planet) { return(new PlanetProjection() { Id = planet.Id, Name = planet.Name, }); }
public override void Run(List <DataObject> result) { List <EspionageReport> reports = result.OfType <EspionageReport>().ToList(); if (!reports.Any()) { return; } using (BotDb db = new BotDb()) { long[] locIds = reports.Select(s => s.Coordinate.Id).ToArray(); Dictionary <long, DbPlanet> existing = db.Planets.Where(s => locIds.Contains(s.LocationId)).ToDictionary(s => s.LocationId); foreach (EspionageReport report in reports) { Logger.Instance.Log(LogLevel.Info, $"Saving esp report on {report.Coordinate}, level: {report.Details}"); DbPlanet item; if (!existing.TryGetValue(report.Coordinate, out item)) { item = new DbPlanet { Coordinate = report.Coordinate }; db.Planets.Add(item); } if (report.Details.HasFlag(ReportDetails.Resources)) { item.Resources = report.Resources; item.LastResourcesTime = report.Sent; } if (report.Details.HasFlag(ReportDetails.Buildings)) { item.PlanetInfo.Buildings = report.DetectedBuildings; item.LastBuildingsTime = report.Sent; } if (report.Details.HasFlag(ReportDetails.Defense)) { item.PlanetInfo.Defences = report.DetectedDefence; item.LastDefencesTime = report.Sent; } if (report.Details.HasFlag(ReportDetails.Ships)) { item.PlanetInfo.Ships = report.DetectedShips; item.LastShipsTime = report.Sent; } } db.SaveChanges(); } }
private void ProcessData(Universe model) { using (BotDb db = new BotDb()) { Dictionary <long, DbPlanet> allPlanets = db.Planets.ToDictionary(s => s.LocationId); Dictionary <int, DbPlayer> allPlayers = db.Players.ToDictionary(s => s.PlayerId); List <DbPlanet> newPlanets = new List <DbPlanet>(); List <DbPlayer> newPlayers = new List <DbPlayer>(); for (int i = 0; i < model.Planets.Length; i++) { Planet planet = model.Planets[i]; Coordinate planetCoords = Coordinate.Parse(planet.Coords, CoordinateType.Planet); DbPlanet dbPlanet; if (!allPlanets.TryGetValue(planetCoords.Id, out dbPlanet)) { dbPlanet = new DbPlanet { Coordinate = planetCoords }; newPlanets.Add(dbPlanet); allPlanets[planetCoords.Id] = dbPlanet; } dbPlanet.Name = planet.Name; dbPlanet.PlayerId = planet.Player; if (planet.Moon != null) { Coordinate moonCoords = Coordinate.Create(planetCoords, CoordinateType.Moon); DbPlanet dbMoon; if (!allPlanets.TryGetValue(moonCoords.Id, out dbMoon)) { dbMoon = new DbPlanet { Coordinate = moonCoords }; newPlanets.Add(dbMoon); allPlanets[moonCoords.Id] = dbMoon; } dbMoon.Name = planet.Moon.Name; } DbPlayer dbPlayer; if (!allPlayers.TryGetValue(planet.Player, out dbPlayer)) { dbPlayer = new DbPlayer { PlayerId = planet.Player }; newPlayers.Add(dbPlayer); allPlayers[dbPlayer.PlayerId] = dbPlayer; } if (i % 250 == 0) { db.Planets.AddRange(newPlanets); db.Players.AddRange(newPlayers); db.SaveChanges(); newPlanets.Clear(); newPlayers.Clear(); } } db.Planets.AddRange(newPlanets); db.Players.AddRange(newPlayers); db.SaveChanges(); } }
public override void Run(List <DataObject> result) { GalaxyPageSystem systemDetails = result.OfType <GalaxyPageSystem>().FirstOrDefault(); if (systemDetails == null) { return; } using (BotDb db = new BotDb()) { int systemId = systemDetails.System; GalaxyScan scanInfo = db.Scans.SingleOrDefault(s => s.LocationId == systemId); if (scanInfo == null) { scanInfo = new GalaxyScan { SystemCoordinate = systemDetails.System }; db.Scans.Add(scanInfo); } scanInfo.LastScan = DateTimeOffset.Now; // Prep players int[] playerIds = result.OfType <GalaxyPageInfoItem>().Select(s => s.PlayerId).ToArray(); Dictionary <int, DbPlayer> players = db.Players.Where(s => playerIds.Contains(s.PlayerId)).ToDictionary(s => s.PlayerId); // Individual items long systemLower = systemDetails.System.LowerCoordinate; long systemUpper = systemDetails.System.UpperCoordinate; Dictionary <long, DbPlanet> toRemove = db.Planets.Where(s => systemLower <= s.LocationId && s.LocationId <= systemUpper).ToDictionary(s => s.LocationId); foreach (GalaxyPageInfoItem row in result.OfType <GalaxyPageInfoItem>()) { DbPlayer player; if (!players.TryGetValue(row.PlayerId, out player)) { player = new DbPlayer { PlayerId = row.PlayerId }; db.Players.Add(player); players[row.PlayerId] = player; } player.Name = row.PlayerName; player.Status = row.PlayerStatus; DbPlanet planet; if (!toRemove.TryRemove(row.Planet.Coordinate, out planet)) { planet = new DbPlanet { Coordinate = row.Planet.Coordinate }; db.Planets.Add(planet); } planet.Name = row.Planet.Name; planet.Player = player; if (row.Moon != null) { DbPlanet moon; if (!toRemove.TryRemove(row.Moon.Coordinate, out moon)) { moon = new DbPlanet { Coordinate = row.Moon.Coordinate }; db.Planets.Add(moon); } moon.Name = row.Moon.Name; moon.Player = player; } } db.Planets.RemoveRange(toRemove.Values); toRemove.Clear(); db.SaveChanges(); } }