public static void SeedAndCache(IDataBase db, ICache cache) { if (!db.DoesCollectionExist(DataBase.Collections.Class)) { foreach (var classSeed in seedData) { db.Save(classSeed, DataBase.Collections.Class); } } var classes = db.GetList <Class>(DataBase.Collections.Class); foreach (var pcClass in classes) { cache.AddClass(pcClass.Name, pcClass); } }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IDataBase db, ICache cache) { if (env.EnvironmentName == "dev") { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Play/Error"); } _db = db; _cache = cache; app.UseDefaultFiles(); app.UseStaticFiles(); app.UseCors("client"); app.UseMiddleware <JwtMiddleware>(); // Forward headers for Ngnix app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapHub <GameHub>("/Hubs/game"); }); _hubContext = app.ApplicationServices.GetService <IHubContext <GameHub> >(); app.StartLoops(); var watch = System.Diagnostics.Stopwatch.StartNew(); var rooms = _db.GetList <Room>(DataBase.Collections.Room); foreach (var room in rooms) { AddSkillsToMobs(room); MapMobRoomId(room); _cache.AddRoom($"{room.AreaId}{room.Coords.X}{room.Coords.Y}{room.Coords.Z}", room); } if (!_db.DoesCollectionExist(DataBase.Collections.Alignment)) { foreach (var data in new Alignment().SeedData()) { _db.Save(data, DataBase.Collections.Alignment); } } if (!_db.DoesCollectionExist(DataBase.Collections.Skill)) { foreach (var data in new SeedCoreSkills().SeedData()) { _db.Save(data, DataBase.Collections.Skill); } } if (!_db.DoesCollectionExist(DataBase.Collections.AttackType)) { foreach (var data in new AttackTypes().SeedData()) { _db.Save(data, DataBase.Collections.AttackType); } } if (!_db.DoesCollectionExist(DataBase.Collections.Race)) { foreach (var data in new Race().SeedData()) { _db.Save(data, DataBase.Collections.Race); } } if (!_db.DoesCollectionExist(DataBase.Collections.Status)) { foreach (var data in new CharacterStatus().SeedData()) { _db.Save(data, DataBase.Collections.Status); } } if (!_db.DoesCollectionExist(DataBase.Collections.Class)) { foreach (var data in new Class().SeedData()) { _db.Save(data, DataBase.Collections.Class); } } var classes = _db.GetList <Class>(DataBase.Collections.Class); foreach (var pcClass in classes) { _cache.AddClass(pcClass.Name, pcClass); } if (!_db.DoesCollectionExist(DataBase.Collections.Config)) { _db.Save(new Config(), DataBase.Collections.Config); } var config = _db.GetById <Config>(1, DataBase.Collections.Config); _cache.SetConfig(config); //add skills var skills = _db.GetList <Skill>(DataBase.Collections.Skill); foreach (var skill in skills) { _cache.AddSkill(skill.Id, skill); } var quests = _db.GetList <Quest>(DataBase.Collections.Quests); foreach (var quest in quests) { _cache.AddQuest(quest.Id, quest); } var areas = _db.GetList <Area>(DataBase.Collections.Area); //foreach (var area in areas) //{ // var roomList = rooms.FindAll(x => x.AreaId == area.Id); // _cache.AddMap(area.Id, Map.DrawMap(roomList)); //} foreach (var area in areas) { var roomList = rooms.FindAll(x => x.AreaId == area.Id); var areaByZIndex = roomList.FindAll(x => x.Coords.Z != 0).Distinct(); foreach (var zarea in areaByZIndex) { var roomsByZ = new List <Room>(); foreach (var room in roomList.FindAll(x => x.Coords.Z == zarea.Coords.Z)) { roomsByZ.Add(room); } _cache.AddMap($"{area.Id}{zarea.Coords.Z}", Map.DrawMap(roomsByZ)); } var rooms0index = roomList.FindAll(x => x.Coords.Z == 0); _cache.AddMap($"{area.Id}0", Map.DrawMap(rooms0index)); } var socials = new SocialSeedData().SeedData(); foreach (var social in socials) { _cache.AddSocial(social.Key, social.Value); } if (!_db.DoesCollectionExist(DataBase.Collections.Socials)) { foreach (var social in socials) { _db.Save(social, DataBase.Collections.Socials); } } if (!_db.DoesCollectionExist(DataBase.Collections.Items)) { foreach (var itemSeed in new ItemSeed().SeedData()) { _db.Save(itemSeed, DataBase.Collections.Items); } } else { var hasMoney = _db.GetList <Item>(DataBase.Collections.Items) .FirstOrDefault(x => x.ItemType == Item.ItemTypes.Money); if (hasMoney == null) { foreach (var itemSeed in new ItemSeed().SeedData()) { _db.Save(itemSeed, DataBase.Collections.Items); } } } if (!_db.DoesCollectionExist(DataBase.Collections.Help)) { foreach (var seed in new HelpSeed().SeedData()) { _db.Save(seed, DataBase.Collections.Help); } } else { var helpList = _db.GetList <Help>(DataBase.Collections.Help); foreach (var seed in new HelpSeed().SeedData()) { if (helpList.FirstOrDefault(x => x.Title.Equals(seed.Title)) != null) { continue; } _db.Save(seed, DataBase.Collections.Help); } } var helpFiles = _db.GetList <Help>(DataBase.Collections.Help); foreach (var helpFile in helpFiles) { _cache.AddHelp(helpFile.Id, helpFile); } if (!_db.DoesCollectionExist(DataBase.Collections.Users)) { var admin = new AdminUser() { Username = "******", Password = "******", Role = "Admin", CanEdit = true, CanDelete = true }; _db.Save(admin, DataBase.Collections.Users); } watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Console.WriteLine($"Start up completed in {elapsedMs}"); }