예제 #1
0
        public void Invoke()
        {
            var systems = new DumpFileReader <EdsmSystem>(configuration.GetValue <string>("InputPath"))
                          .Where(x => x.Id64.HasValue)
                          .ToList();

            this.created = 0;
            this.total   = 0;

            foreach (var partition in systems.Partition(1000))
            {
                Handle(partition);
            }

            Console.WriteLine("Created: {0}", this.created);
            Console.WriteLine("Total: {0}", this.total);
        }
예제 #2
0
        public void Invoke()
        {
            var bodies = new DumpFileReader <EdsmBody>(configuration.GetValue <string>("InputPath"))
                         .Where(x => x.Type == "Star")
                         .Where(x => x.DistanceToArrival <= short.MaxValue)
                         .ToList();

            var systemsToUpdate = new List <StarSystem>();

            var c = 0;

            foreach (var body in bodies)
            {
                var isNeutron   = body.SubType == "Neutron Star";
                var isScoopable = SCOOPABLE_SUB_TYPES.Contains(body.SubType);

                if (!isNeutron && !isScoopable)
                {
                    continue;
                }

                var system = repository.Get(body.SystemId64);

                if (system == null)
                {
                    continue;
                }

                if (isNeutron)
                {
                    c += 1;
                    Console.WriteLine("{0,9} {1}", c, body.Name);

                    if (!system.HasNeutron || body.DistanceToArrival < system.DistanceToNeutron)
                    {
                        system.HasNeutron        = true;
                        system.DistanceToNeutron = body.DistanceToArrival;
                        systemsToUpdate.Add(system);
                    }
                }

                if (isScoopable)
                {
                    c += 1;
                    Console.WriteLine("{0,9} {1}", c, body.Name);

                    if (!system.HasScoopable || body.DistanceToArrival < system.DistanceToScoopable)
                    {
                        system.HasScoopable        = true;
                        system.DistanceToScoopable = body.DistanceToArrival;
                        systemsToUpdate.Add(system);
                    }
                }

                if (1000 <= systemsToUpdate.Count)
                {
                    repository.Update(systemsToUpdate);
                    systemsToUpdate.Clear();
                }
            }

            if (systemsToUpdate.Any())
            {
                repository.Update(systemsToUpdate);
            }
        }