Exemple #1
0
        public async Task <List <int> > GetAllTypeAsync(bool tq = false)
        {
            ESIClient           esi    = tq ? (ESIClient)_tqesi : _esi;
            ConcurrentBag <int> result = new ConcurrentBag <int>();
            var pageheaders            = await esi.GetAllTypesPages();


            if (!pageheaders.Headers.TryGetValues("x-pages", out var xPages) ||
                !int.TryParse(xPages.FirstOrDefault(), out var pages))
            {
                pages = 1;
            }


            await Dasync.Collections.ParallelForEachExtensions.ParallelForEachAsync(Enumerable.Range(1, pages), async page =>
            {
                var thispage = await esi.Get_universe_typesAsync(page);


                foreach (var i in thispage)
                {
                    result.Add(i);
                }
            }, MAX_THREAD);

            return(result.Distinct().ToList());
        }
Exemple #2
0
        public ContractUpdater(CNMarketDB db, IHttpClientFactory httpClientFactory, ILogger <MarketUpdater> logger,
                               IServiceProvider service)
        {
            this.db = db;
            _logger = logger;
            var http = httpClientFactory.CreateClient("CN");

            this.esi = service.GetService <ITypedHttpClientFactory <ESIClient> >().CreateClient(http);
        }
Exemple #3
0
 public AuthController(
     ILogger <AuthController> logger,
     TrackerProperties trackerProperties,
     ESIClient esiClient,
     IUserStorage userStorage)
 {
     _logger            = logger;
     _trackerProperties = trackerProperties;
     _esiClient         = esiClient;
     _userStorage       = userStorage;
 }
Exemple #4
0
        public SdeUpdater(CNMarketDB cndb, TQMarketDB tqdb, IHttpClientFactory httpClientFactory, IServiceProvider service, ILogger <SdeUpdater> logger, IHostApplicationLifetime lifetime)
        {
            _cndb = cndb;
            _tqdb = tqdb;
            _httpClientFactory = httpClientFactory;
            _service           = service;
            var http1 = httpClientFactory.CreateClient("CN");

            this._esi = service.GetService <ITypedHttpClientFactory <ESIClient> >().CreateClient(http1);
            var http2 = httpClientFactory.CreateClient("TQ");

            this._tqesi = service.GetService <ITypedHttpClientFactory <ESIClient> >().CreateClient(http2);

            _logger   = logger;
            _lifetime = lifetime;
        }
Exemple #5
0
        public async Task UpdateSde(bool tq = false)
        {
            MarketDB db = tq ? (MarketDB)_tqdb : _cndb;

            ESIClient esi       = tq ? (ESIClient)_tqesi : _esi;
            var       oldgroups = await EntityFrameworkQueryableExtensions.ToListAsync(db.marketgroup);

            var attr = esi.GetAllAttrs();
            var allmarketgroupstask = esi.Get_markets_groupsAsync();


            var alltypetask = GetAllTypeAsync(tq);


            var newmodels = new ConcurrentBag <EVEMarketSite.Model.marketgroup>();
            var oldattr   = await EntityFrameworkQueryableExtensions.ToListAsync(db.dogma_attributes);

            foreach (var m in await attr)
            {
                var model = oldattr.FirstOrDefault(p => p.attribute_id == m.Attribute_id);
                if (model == null)
                {
                    model = new dogma_attributes();
                    db.dogma_attributes.Add(model);
                }

                model.attribute_id  = m.Attribute_id;
                model.name          = m.Name;
                model.description   = m.Description;
                model.default_value = m.Default_value;
                model.display_name  = m.Display_name;
                model.high_is_good  = m.High_is_good;
                model.icon_id       = m.Icon_id;
                model.published     = m.Published;
                model.stackable     = m.Stackable;
                model.unit_id       = m.Unit_id;
            }

            List <marketgroup> cnMarketgroups = new List <marketgroup>();
            List <evetypes>    cntypes        = new List <evetypes>();

            if (tq)
            {
                cnMarketgroups = await _cndb.marketgroup.ToListAsync();

                cntypes = await _cndb.evetypes.ToListAsync();
            }
            await Dasync.Collections.ParallelForEachExtensions.ParallelForEachAsync((await allmarketgroupstask).Distinct(), async i =>
            {
                while (true)
                {
                    try
                    {
                        var groupinfo_en = esi.Get_markets_groups_market_group_idAsync("en-us", i);
                        Task <Get_markets_groups_market_group_id_ok> groupinfo_cn;
                        if (!tq)
                        {
                            groupinfo_cn = esi.Get_markets_groups_market_group_idAsync("zh", i);
                        }
                        else
                        {
                            var tmp = cnMarketgroups.FirstOrDefault(p => p.marketGroupID == i);
                            if (tmp != null)
                            {
                                groupinfo_cn = Task.FromResult(new Get_markets_groups_market_group_id_ok()
                                {
                                    Name        = tmp.marketGroupName,
                                    Description = tmp.description,
                                });
                            }
                            else
                            {
                                groupinfo_cn = groupinfo_en;
                            }
                        }

                        await Task.WhenAll(groupinfo_cn, groupinfo_en);
                        _logger.LogDebug($"GetItemMarketGroupInfoV1Async {i}");
                        var oldmodel = oldgroups.FirstOrDefault(p => p.marketGroupID == i);
                        if (oldmodel == null)
                        {
                            oldmodel = new marketgroup();
                            oldmodel.marketGroupID = i;
                            newmodels.Add(oldmodel);
                        }

                        oldmodel.marketGroupName_en = groupinfo_en.Result.Name;
                        oldmodel.marketGroupName    = groupinfo_cn.Result.Name;
                        oldmodel.description        = groupinfo_cn.Result.Description;
                        oldmodel.description_en     = groupinfo_en.Result.Description;
                        oldmodel.parentGroupID      = groupinfo_en.Result.Parent_group_id;
                        return;
                    }
                    catch (Exception e)
                    {
                        await Task.Delay(TimeSpan.FromSeconds(1));
                        _logger.LogWarning(e + "");
                    }
                }
            }, MAX_THREAD);

            db.marketgroup.AddRange(newmodels);
            _logger.LogDebug($"Save GetMarketItemGroupInfo");
            await db.SaveChangesAsync();

            _logger.LogDebug($"Save GetMarketItemGroupInfo OK");


            await db.SaveChangesAsync();

            var oldtypes = await EntityFrameworkQueryableExtensions.ToListAsync(db.evetypes);

            var oldtypeattr = await EntityFrameworkQueryableExtensions.ToListAsync(db.type_attributes);

            var newtypes     = new ConcurrentBag <evetypes>();
            var newtypeattrs = new ConcurrentBag <type_attributes>();
            await Dasync.Collections.ParallelForEachExtensions.ParallelForEachAsync(await alltypetask, async i =>
            {
                try
                {
                    var groupinfo_en = esi.Get_universe_types_type_idAsync("en-us", i);
                    Task <Get_universe_types_type_id_ok> groupinfo_cn;
                    if (!tq)
                    {
                        groupinfo_cn = esi.Get_universe_types_type_idAsync("zh", i);
                    }
                    else
                    {
                        var tmp = cntypes.FirstOrDefault(p => p.typeID == i);
                        if (tmp != null)
                        {
                            groupinfo_cn = Task.FromResult(new Get_universe_types_type_id_ok()
                            {
                                Name        = tmp.typeName,
                                Description = tmp.description,
                            });
                        }
                        else
                        {
                            groupinfo_cn = groupinfo_en;
                        }
                    }

                    await Task.WhenAll(groupinfo_cn, groupinfo_en);
                    _logger.LogDebug($"GetTypeInfoV3Async {i}");
                    var oldmodel = oldtypes.FirstOrDefault(p => p.typeID == i);
                    if (oldmodel == null)
                    {
                        oldmodel        = new evetypes();
                        oldmodel.typeID = i;
                        newtypes.Add(oldmodel);
                    }

                    oldmodel.marketGroupID  = groupinfo_en.Result.Market_group_id;
                    oldmodel.portionSize    = groupinfo_en.Result.Portion_size;
                    oldmodel.published      = groupinfo_en.Result.Published;
                    oldmodel.mass           = groupinfo_en.Result.Mass;
                    oldmodel.capacity       = groupinfo_en.Result.Capacity;
                    oldmodel.iconID         = groupinfo_en.Result.Icon_id;
                    oldmodel.volume         = groupinfo_en.Result.Volume;
                    oldmodel.typeName_en    = groupinfo_en.Result.Name;
                    oldmodel.typeName       = groupinfo_cn.Result.Name;
                    oldmodel.description    = groupinfo_cn.Result.Description;
                    oldmodel.description_en = groupinfo_en.Result.Description;
                    oldmodel.groupID        = groupinfo_en.Result.Group_id;

                    oldmodel.attributes.Clear();
                    if (groupinfo_cn.Result.Dogma_attributes?.Count > 0)
                    {
                        foreach (var resultDogmaAttribute in groupinfo_cn.Result.Dogma_attributes)
                        {
                            newtypeattrs.Add(new type_attributes()
                            {
                                attribute_id = resultDogmaAttribute.Attribute_id,
                                value        = resultDogmaAttribute.Value,
                                type_id      = i
                            });
                        }
                    }
                }
                catch (Exception e)
                {
                    await Task.Delay(TimeSpan.FromSeconds(1));
                    _logger.LogWarning(e + "");
                }
            }, MAX_THREAD);

            db.evetypes.AddRange(newtypes);
            await db.SaveChangesAsync();

            db.type_attributes.RemoveRange(db.type_attributes);
            db.AddRange(newtypeattrs);
            await db.SaveChangesAsync();

            var http = _httpClientFactory.CreateClient("CN");

            db.InvMetaTypes.RemoveRange(db.InvMetaTypes);

            await using var bz2file1 = await http.GetStreamAsync("https://www.fuzzwork.co.uk/dump/latest/invMetaTypes.csv.bz2");

            await using var fs = new MemoryStream();
            BZip2.Decompress(bz2file1, fs, false);
            fs.Seek(0, SeekOrigin.Begin);
            using var textreader = new StreamReader(fs);
            await textreader.ReadLineAsync(); //ignore 1st

            var r = await textreader.ReadLineAsync();

            while (r != null)
            {
                var imp      = r.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                var newmodel = new invMetaTypes();
                newmodel.typeID = int.Parse(imp[0]);
                if (imp[1] == "None")
                {
                    newmodel.parentTypeID = null;
                }
                else
                {
                    newmodel.parentTypeID = int.Parse(imp[1]);
                }
                if (imp[2] == "None")
                {
                    newmodel.metaGroupID = null;
                }
                else
                {
                    newmodel.metaGroupID = int.Parse(imp[2]);
                }
                db.InvMetaTypes.Add(newmodel);

                r = await textreader.ReadLineAsync(); //ignore 1st
            }

            await db.SaveChangesAsync();


            _logger.LogInformation("完成!");
        }
Exemple #6
0
        private static void AddUser(TrackerProperties trackerProperties)
        {
            if (string.IsNullOrEmpty(trackerProperties.CharacterName))
            {
                throw new ArgumentException("Character name is not set");
            }
            var client = new ESIClient();
            var user   = client.GetUserByCharacterName(trackerProperties.CharacterName).GetAwaiter().GetResult();

            if (user == null)
            {
                Console.WriteLine("ERROR: unable to load EVE character {0}", trackerProperties.CharacterName);
                return;
            }
            if (!string.IsNullOrEmpty(trackerProperties.ServerRestrictions))
            {
                var serverTokens = trackerProperties.ServerRestrictions
                                   .Split(
                    new char[] { ';', ',' },
                    StringSplitOptions.RemoveEmptyEntries)
                                   .Select(t => t.Trim());
                user.RestrictedServers.Clear();
                foreach (string token in serverTokens)
                {
                    user.RestrictedServers.Add(token);
                }
            }
            using (var storage = new LiteDBStorage(trackerProperties))
            {
                var storedUser = storage.GetUser(user.CharacterName);
                if (storedUser != null)
                {
                    user.LocalId = storedUser.LocalId;
                    if (storage.UpdateUser(user))
                    {
                        Console.WriteLine(
                            "Updated user [{0}][{1}] {2} - [{3}] {4} - [{5}] {6}",
                            user.LocalId,
                            user.CharacterId,
                            user.CharacterName,
                            user.CorporationId,
                            user.CorporationName,
                            user.AllianceId,
                            user.AllianceName);
                        if (user.RestrictedServers.Any())
                        {
                            Console.WriteLine("Server restrictions:");
                            foreach (var s in user.RestrictedServers)
                            {
                                Console.WriteLine(" - {0}", s);
                            }
                        }
                        else
                        {
                            Console.WriteLine("No server restrictions set");
                        }
                    }
                    else
                    {
                        Console.WriteLine("ERROR: user update failed");
                    }
                }
                else
                {
                    var id = storage.AddUser(user);
                    if (id > 0)
                    {
                        Console.WriteLine(
                            "Added user [{0}][{1}] {2} - [{3}] {4} - [{5}] {6}",
                            id,
                            user.CharacterId,
                            user.CharacterName,
                            user.CorporationId,
                            user.CorporationName,
                            user.AllianceId,
                            user.AllianceName);
                        if (user.RestrictedServers.Any())
                        {
                            Console.WriteLine("Server restrictions:");
                            foreach (var s in user.RestrictedServers)
                            {
                                Console.WriteLine(" - {0}", s);
                            }
                        }
                        else
                        {
                            Console.WriteLine("No server restrictions set");
                        }
                    }
                    else
                    {
                        Console.WriteLine("ERROR: user creation failed");
                    }
                }
            }
        }