Ejemplo n.º 1
0
 private static PlanetProjection ToPlanetProjection(DbPlanet planet)
 {
     return(new PlanetProjection()
     {
         Id = planet.Id,
         Name = planet.Name,
     });
 }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        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();
            }
        }
Ejemplo n.º 4
0
        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();
            }
        }