Esempio n. 1
0
 public VersionController(
     IHostingEnvironment env,
     IRavenfallDbContextProvider dbProvider)
 {
     this.env        = env;
     this.dbProvider = dbProvider;
 }
 public SessionInfoProvider(
     ILogger <SessionInfoProvider> logger, IRavenfallDbContextProvider dbProvider,
     IOptions <AppSettings> settings,
     IGameData gameData)
 {
     this.logger   = logger;
     this.gameData = gameData;
     this.settings = settings.Value;
 }
Esempio n. 3
0
 public AuthManager(
     ILogger logger,
     IRavenfallDbContextProvider ctxProvider,
     ISecureHasher secureHash)
 {
     this.logger      = logger;
     this.ctxProvider = ctxProvider;
     this.secureHash  = secureHash;
 }
Esempio n. 4
0
 public PlayerImporter(
     IPlayerManager playerManager,
     IRavenfallDbContextProvider dbProvider,
     AppSettings settings,
     HttpContext httpContext)
 {
     this.playerManager = playerManager;
     this.dbProvider    = dbProvider;
     this.settings      = settings;
     this.httpContext   = httpContext;
 }
Esempio n. 5
0
 public PlayersController(
     ISessionInfoProvider sessionInfoProvider,
     ISessionManager sessionManager,
     IPlayerManager playerManager,
     IRavenfallDbContextProvider dbProvider,
     ISecureHasher secureHasher,
     IAuthManager authManager,
     IOptions <AppSettings> settings)
 {
     this.sessionInfoProvider = sessionInfoProvider;
     this.sessionManager      = sessionManager;
     this.playerManager       = playerManager;
     this.dbProvider          = dbProvider;
     this.secureHasher        = secureHasher;
     this.authManager         = authManager;
     this.settings            = settings;
 }
Esempio n. 6
0
 public PlayersController(
     ILogger <PlayersController> logger,
     IGameData gameData,
     ISessionInfoProvider sessionInfoProvider,
     IPlayerInventoryProvider inventoryProvider,
     ISessionManager sessionManager,
     IPlayerManager playerManager,
     IRavenfallDbContextProvider dbProvider,
     ISecureHasher secureHasher,
     IAuthManager authManager,
     IOptions <AppSettings> settings)
     : base(logger, gameData, authManager, sessionInfoProvider, sessionManager, secureHasher)
 {
     this.sessionInfoProvider = sessionInfoProvider;
     this.sessionManager      = sessionManager;
     this.playerManager       = playerManager;
     this.dbProvider          = dbProvider;
     this.secureHasher        = secureHasher;
     this.authManager         = authManager;
     this.settings            = settings;
 }
Esempio n. 7
0
 public PatreonController(
     ILogger <PatreonController> logger,
     ISessionInfoProvider sessionInfoProvider,
     IPlayerInventoryProvider inventoryProvider,
     ISessionManager sessionManager,
     IPlayerManager playerManager,
     IRavenfallDbContextProvider dbProvider,
     ISecureHasher secureHasher,
     IAuthManager authManager,
     IPatreonManager patreonManager,
     IOptions <AppSettings> settings)
 {
     this.logger = logger;
     this.sessionInfoProvider = sessionInfoProvider;
     this.sessionManager      = sessionManager;
     this.playerManager       = playerManager;
     this.dbProvider          = dbProvider;
     this.secureHasher        = secureHasher;
     this.authManager         = authManager;
     this.patreonManager      = patreonManager;
     this.settings            = settings.Value;
 }
Esempio n. 8
0
        public void Migrate(IRavenfallDbContextProvider db, IEntityRestorePoint restorePoint)
        {
            try
            {
                var sw = new Stopwatch();
                sw.Start();
                var queryBuilder     = new QueryBuilder();
                var users            = restorePoint.Get <User>();
                var characters       = restorePoint.Get <Character>();
                var skills           = restorePoint.Get <Skills>();
                var marketplaceItems = restorePoint.Get <MarketItem>();
                var syntyAppearance  = restorePoint.Get <SyntyAppearance>();
                var appearances      = restorePoint.Get <Appearance>();
                var resources        = restorePoint.Get <Resources>();
                var charStates       = restorePoint.Get <CharacterState>();
                var charStats        = restorePoint.Get <Statistics>();
                var invItems         = restorePoint.Get <InventoryItem>();
                var villages         = restorePoint.Get <Village>();
                var villageHouses    = restorePoint.Get <VillageHouse>();

                var failedCount = 0;
                using (var con = db.GetConnection())
                {
                    con.Open();

                    logger.LogInformation("Truncating db...");

                    var restoreTypes = restorePoint.GetEntityTypes();
                    foreach (var restoreType in restoreTypes)
                    {
                        if (restoreType == typeof(ItemCraftingRequirement))
                        {
                            continue;
                        }

                        var table = $"[DB_A3551F_ravenfall].[dbo].[{restoreType.Name}]";
                        try
                        {
                            using (var cmd = con.CreateCommand())
                            {
                                cmd.CommandText = $"truncate table {table};";
                                cmd.ExecuteNonQuery();
                            }

                            logger.LogInformation($"Migrating {table} data...");
                            var entities = restorePoint.Get(restoreType);
                            var queries  = BuildInsertQuery(queryBuilder, entities);
                            foreach (var q in queries)
                            {
                                using (var cmd = con.CreateCommand())
                                {
                                    cmd.CommandText = q;
                                    cmd.ExecuteNonQuery();
                                }
                            }
                        }
                        catch (Exception exc)
                        {
                            logger.LogError($"Failed to truncate table {table}! Aborting migration!! Exc: " + exc);
                            return;
                        }
                    }
                    con.Close();
                }

                sw.Stop();
                logger.LogInformation($"Data migration inserted {characters.Count} characters, {failedCount} failed inserts and took a total of: " + sw.Elapsed);
            }
            catch (Exception exc)
            {
                logger.LogError($"Data migration failed!! " + exc);
            }
        }
Esempio n. 9
0
        public GameData(IRavenfallDbContextProvider db, ILogger logger, IKernel kernel, IQueryBuilder queryBuilder)
        {
            this.db           = db;
            this.logger       = logger;
            this.kernel       = kernel;
            this.queryBuilder = queryBuilder;

            var stopWatch = new Stopwatch();

            stopWatch.Start();
            logger.LogDebug($"Connecting to the db...");
            using (var ctx = this.db.Get())
            {
                logger.LogDebug($"\tLoading db entries...");

                appearances = new EntitySet <Appearance, int>(ctx.Appearance.ToList(), i => i.Id);

                players = new EntitySet <Player, int>(ctx.Player.ToList(), i => i.Id);
                players.RegisterLookupGroup(nameof(User), x => x.UserId);

                entityActions = new EntitySet <EntityAction, int>(ctx.EntityAction.ToList(), i => i.Id);

                // we can still store the game events, but no need to load them on startup as the DB will quickly be filled.
                // and take a long time to load

                itemDrops   = new EntitySet <ItemDrop, int>(ctx.ItemDrop.ToList(), i => i.Id);
                attributes  = new EntitySet <Attributes, int>(ctx.Attributes.ToList(), i => i.Id);
                professions = new EntitySet <Professions, int>(ctx.Professions.ToList(), i => i.Id);

                sessions        = new EntitySet <Session, int>(ctx.Session.ToList(), i => i.Id);
                objectInstances = new EntitySet <GameObjectInstance, int>(ctx.GameObjectInstance.ToList(), i => i.Id);
                objectInstances.RegisterLookupGroup(nameof(GameObject), x => x.ObjectId);
                objectInstances.RegisterLookupGroup(nameof(Session), x => x.SessionId);

                npcInstances = new EntitySet <NpcInstance, int>(ctx.NpcInstance.ToList(), i => i.Id);
                npcInstances.RegisterLookupGroup(nameof(Npc), x => x.NpcId);
                npcInstances.RegisterLookupGroup(nameof(Session), x => x.SessionId);

                inventoryItems = new EntitySet <InventoryItem, int>(ctx.InventoryItem.ToList(), i => i.Id);
                inventoryItems.RegisterLookupGroup(nameof(Player), x => x.PlayerId);

                shopInventoryItems = new EntitySet <ShopItem, int>(ctx.ShopItem.ToList(), i => i.Id);
                shopInventoryItems.RegisterLookupGroup(nameof(NpcInstance), x => x.NpcInstanceId);

                transforms = new EntitySet <Transform, int>(ctx.Transform.ToList(), i => i.Id);

                items = new EntitySet <Item, int>(ctx.Item.ToList(), i => i.Id);

                objects = new EntitySet <GameObject, int>(ctx.GameObject.ToList(), i => i.Id);

                npcs = new EntitySet <Npc, int>(ctx.Npc.ToList(), i => i.Id);

                users = new EntitySet <User, int>(ctx.User.ToList(), i => i.Id);

                entitySets = new IEntitySet[]
                {
                    appearances,
                    players,
                    inventoryItems,
                    shopInventoryItems,
                    objects,
                    items,
                    users,
                    npcs,
                    npcInstances,
                    objectInstances,
                    attributes,
                    professions,
                    sessions,
                    transforms,
                };
            }

            stopWatch.Stop();
            logger.LogDebug($"All database entries loaded in {stopWatch.Elapsed.TotalSeconds} seconds.");

            ScheduleNextSave();
        }
Esempio n. 10
0
 public MarketplaceManager(IRavenfallDbContextProvider dbProvider)
 {
     this.dbProvider = dbProvider;
 }
Esempio n. 11
0
 public SessionInfoProvider(ILogger logger, IRavenfallDbContextProvider dbProvider)
 {
     this.logger     = logger;
     this.dbProvider = dbProvider;
 }
Esempio n. 12
0
 public ItemManager(IRavenfallDbContextProvider dbProvider)
 {
     this.dbProvider = dbProvider;
 }
Esempio n. 13
0
 public RavenfallDbLoggerProvider(IRavenfallDbContextProvider dbProvider)
 {
     ravenfallDbLogWriter = new RavenfallDbLogWriter(dbProvider);
 }
Esempio n. 14
0
 public RavenfallDbLogWriter(IRavenfallDbContextProvider dbProvider)
 {
     this.dbProvider = dbProvider;
 }
Esempio n. 15
0
        public GameData(
            IGameDataBackupProvider backupProvider,
            IRavenfallDbContextProvider db,
            ILogger <GameData> logger,
            IKernel kernel,
            IQueryBuilder queryBuilder)
        {
            try
            {
                this.db             = db;
                this.logger         = logger;
                this.kernel         = kernel;
                this.queryBuilder   = queryBuilder;
                this.backupProvider = backupProvider;

                var stopWatch = new Stopwatch();
                stopWatch.Start();
                using (var ctx = this.db.Get())
                {
                    IEntityRestorePoint restorePoint = backupProvider.GetRestorePoint(new[] {
                        typeof(Appearance),
                        typeof(SyntyAppearance),
                        typeof(Character),
                        typeof(CharacterState),
                        typeof(InventoryItem),
                        typeof(User),
                        typeof(GameSession),
                        typeof(Village),
                        typeof(VillageHouse),
                        typeof(Resources),
                        typeof(Skills),
                        typeof(Statistics),
                        typeof(MarketItem)
                    });


                    appearances = new EntitySet <Appearance, Guid>(
                        restorePoint?.Get <Appearance>() ??
                        ctx.Appearance.ToList(), i => i.Id);

                    syntyAppearances = new EntitySet <SyntyAppearance, Guid>(
                        restorePoint?.Get <SyntyAppearance>() ??
                        ctx.SyntyAppearance.ToList(), i => i.Id);

                    characters = new EntitySet <Character, Guid>(
                        restorePoint?.Get <Character>() ??
                        ctx.Character.ToList(), i => i.Id);

                    characters.RegisterLookupGroup(nameof(User), x => x.UserId);
                    characters.RegisterLookupGroup(nameof(GameSession), x => x.UserIdLock.GetValueOrDefault());

                    characterStates = new EntitySet <CharacterState, Guid>(
                        restorePoint?.Get <CharacterState>() ??
                        ctx.CharacterState.ToList(), i => i.Id);

                    gameSessions = new EntitySet <GameSession, Guid>(
                        restorePoint?.Get <GameSession>() ??
                        ctx.GameSession.ToList(), i => i.Id);

                    gameSessions.RegisterLookupGroup(nameof(User), x => x.UserId);

                    // we can still store the game events, but no need to load them on startup as the DB will quickly be filled.
                    // and take a long time to load
                    gameEvents = new EntitySet <GameEvent, Guid>(new List <GameEvent>() /*ctx.GameEvent.ToList()*/, i => i.Id);
                    gameEvents.RegisterLookupGroup(nameof(GameSession), x => x.GameSessionId);

                    inventoryItems = new EntitySet <InventoryItem, Guid>(
                        restorePoint?.Get <InventoryItem>() ??
                        ctx.InventoryItem.ToList(), i => i.Id);

                    inventoryItems.RegisterLookupGroup(nameof(Character), x => x.CharacterId);

                    marketItems = new EntitySet <MarketItem, Guid>(
                        restorePoint?.Get <MarketItem>() ??
                        ctx.MarketItem.ToList(), i => i.Id);

                    marketItems.RegisterLookupGroup(nameof(Item), x => x.ItemId);

                    items = new EntitySet <Item, Guid>(ctx.Item.ToList(), i => i.Id);

                    npcs      = new EntitySet <NPC, Guid>(ctx.NPC.ToList(), i => i.Id);
                    npcSpawns = new EntitySet <NPCSpawn, Guid>(ctx.NPCSpawn.ToList(), i => i.Id);
                    npcSpawns.RegisterLookupGroup(nameof(NPC), x => x.NpcId);

                    npcItemDrops = new EntitySet <NPCItemDrop, Guid>(ctx.NPCItemDrop.ToList(), i => i.Id);
                    npcItemDrops.RegisterLookupGroup(nameof(NPC), x => x.NpcId);

                    itemCraftingRequirements = new EntitySet <ItemCraftingRequirement, Guid>(ctx.ItemCraftingRequirement.ToList(), i => i.Id);
                    itemCraftingRequirements.RegisterLookupGroup(nameof(Item), x => x.ItemId);
                    //itemCraftingRequirements.RegisterLookupGroup(nameof(ItemCraftingRequirement.ResourceItemId), x => x.ItemId);

                    clans = new EntitySet <Clan, Guid>(ctx.Clan.ToList(), i => i.Id);

                    villages = new EntitySet <Village, Guid>(
                        restorePoint?.Get <Village>() ??
                        ctx.Village.ToList(), i => i.Id);
                    villages.RegisterLookupGroup(nameof(User), x => x.UserId);

                    villageHouses = new EntitySet <VillageHouse, Guid>(
                        restorePoint?.Get <VillageHouse>() ??
                        ctx.VillageHouse.ToList(), i => i.Id);

                    villageHouses.RegisterLookupGroup(nameof(Village), x => x.VillageId);

                    resources = new EntitySet <Resources, Guid>(
                        restorePoint?.Get <Resources>() ??
                        ctx.Resources.ToList(), i => i.Id);

                    statistics = new EntitySet <Statistics, Guid>(
                        restorePoint?.Get <Statistics>() ??
                        ctx.Statistics.ToList(), i => i.Id);

                    skills = new EntitySet <Skills, Guid>(
                        restorePoint?.Get <Skills>() ??
                        ctx.Skills.ToList(), i => i.Id);

                    users = new EntitySet <User, Guid>(
                        restorePoint?.Get <User>() ??
                        ctx.User.ToList(), i => i.Id);

                    gameClients = new EntitySet <GameClient, Guid>(ctx.GameClient.ToList(), i => i.Id);

                    Client = gameClients.Entities.First();

                    entitySets = new IEntitySet[]
                    {
                        appearances, syntyAppearances, characters, characterStates,
                        gameSessions, /*gameEvents, */ inventoryItems, marketItems, items,
                        resources, statistics, skills, users, gameClients, villages, villageHouses, clans,
                        npcs, npcSpawns, npcItemDrops
                    };
                }
                stopWatch.Stop();
                logger.LogDebug($"All database entries loaded in {stopWatch.Elapsed.TotalSeconds} seconds.");
                logger.LogDebug("GameData initialized... Starting kernel...");
                kernel.Start();
                InitializedSuccessful = true;
                CreateBackup();
            }
            catch (Exception exc)
            {
                InitializedSuccessful = false;
                System.IO.File.WriteAllText("ravenfall-error.log", exc.ToString());
            }
        }
Esempio n. 16
0
 public SessionManager(IRavenfallDbContextProvider dbProvider)
 {
     this.dbProvider = dbProvider;
 }