Ejemplo n.º 1
0
        public async Task <PublishSchemaPayload> PublishSchemaAsync(
            PublishSchemaInput input,
            [Service] IMessageSender <PublishDocumentMessage> messageSender,
            [Service] IFileStorage fileStorage,
            [Service] ISessionCreator sessionCreator,
            [DataLoader] SchemaByNameDataLoader schemaDataLoader,
            [DataLoader] EnvironmentByNameDataLoader environmentDataLoader,
            CancellationToken cancellationToken)
        {
            Schema schema = await schemaDataLoader.LoadAsync(
                input.SchemaName, cancellationToken)
                            .ConfigureAwait(false);

            Environment environment = await environmentDataLoader.LoadAsync(
                input.EnvironmentName, cancellationToken)
                                      .ConfigureAwait(false);

            if (input.ExternalId == null && string.IsNullOrEmpty(input.SourceText))
            {
                throw new GraphQLException(
                          Resources.SchemaMutations_HashAndSourceTextAreNull);
            }

            string sessionId = await sessionCreator.CreateSessionAsync(cancellationToken)
                               .ConfigureAwait(false);

            if (input.SourceText is { })
Ejemplo n.º 2
0
        public void ResetMakesFixedRandomNumberGeneratorToUseNextRandomNumber()
        {
            // given
            var             target                  = CreateSessionCreator();
            ISessionCreator targetExplicit          = target;
            var             randomNumberBeforeReset = target.RandomNumberGenerator.NextPositiveLong();

            // when
            for (var i = 0; i < 5; i++)
            {
                // then
                Assert.That(target.RandomNumberGenerator.NextPositiveLong(), Is.EqualTo(randomNumberBeforeReset));
            }

            // and when
            targetExplicit.Reset();
            var randomNumberAfterReset = target.RandomNumberGenerator.NextPositiveLong();

            // then
            Assert.That(randomNumberBeforeReset, Is.Not.EqualTo(randomNumberAfterReset));
            for (var i = 0; i < 5; i++)
            {
                Assert.That(target.RandomNumberGenerator.NextPositiveLong(), Is.EqualTo(randomNumberAfterReset));
            }
        }
Ejemplo n.º 3
0
 public PlayerItemDaoImpl(
     ISessionCreator sessionCreator,
     IDatabaseItemStatDao databaseItemStatDao,
     SqlDialect dialect) : base(sessionCreator, dialect)
 {
     _databaseItemStatDao = databaseItemStatDao;
 }
Ejemplo n.º 4
0
        public static bool Migrate(ISessionCreator factory)
        {
            string[] files =
            {
                Path.Combine(GlobalPaths.UserdataFolder, GlobalPaths.USERDATA_FILE),
                Path.Combine(GlobalPaths.UserdataFolder, "userdata-hc.db")
            };

            foreach (var dbfile in files)
            {
                if (!File.Exists(dbfile))
                {
                    logger.Info("Migration requested but already performed. Halted.");
                    return(true);
                }

                if (!Migrator <PlayerItem> .Execute(factory, CreateLegacySessionFactory(dbfile), dbfile.Contains("-hc")))
                {
                    logger.Warn("Failed to items");
                    return(false);
                }
                else
                {
                    // Rename it, so its not migrated again.
                    if (File.Exists(string.Format("{0}.legacy", dbfile)))
                    {
                        File.Delete(string.Format("{0}.legacy", dbfile));
                    }
                    File.Move(dbfile, string.Format("{0}.legacy", dbfile));
                    logger.Info("Migration successful, old database renamed to .legacy");
                }
            }

            return(true);
        }
Ejemplo n.º 5
0
        public async Task <PublishClientPayload> PublishClientAsync(
            PublishClientInput input,
            [Service] IMessageSender <PublishDocumentMessage> messageSender,
            [Service] IFileStorage fileStorage,
            [Service] ISessionCreator sessionCreator,
            [DataLoader] SchemaByNameDataLoader schemaDataLoader,
            [DataLoader] ClientByNameDataLoader clientDataLoader,
            [DataLoader] EnvironmentByNameDataLoader environmentDataLoader,
            CancellationToken cancellationToken)
        {
            if (input.Files.Count == 0)
            {
                throw new GraphQLException("You have to provide at least one query file.");
            }

            Schema schema = await schemaDataLoader.LoadAsync(
                input.SchemaName, cancellationToken)
                            .ConfigureAwait(false);

            Client client = await clientDataLoader.LoadAsync(
                input.ClientName, cancellationToken)
                            .ConfigureAwait(false);

            Environment environment = await environmentDataLoader.LoadAsync(
                input.EnvironmentName, cancellationToken)
                                      .ConfigureAwait(false);

            string sessionId = await sessionCreator.CreateSessionAsync(cancellationToken)
                               .ConfigureAwait(false);

            IFileContainer container = await fileStorage.CreateContainerAsync(
                sessionId, cancellationToken)
                                       .ConfigureAwait(false);

            foreach (QueryFile file in input.Files)
            {
                await container.CreateTextFileAsync(
                    file.Name, file.SourceText, cancellationToken)
                .ConfigureAwait(false);
            }

            await messageSender.SendAsync(
                new PublishDocumentMessage(
                    sessionId,
                    environment.Id,
                    schema.Id,
                    client.Id,
                    input.ExternalId,
                    input.Format == QueryFileFormat.GraphQL
                        ? DocumentType.Query
                        : DocumentType.Schema,
                    input.Tags is null
                        ? Array.Empty <Tag>()
                        : input.Tags.Select(t => new Tag(t.Key, t.Value)).ToArray()),
                cancellationToken)
            .ConfigureAwait(false);

            return(new PublishClientPayload(sessionId, input.ClientMutationId));
        }
Ejemplo n.º 6
0
 public GameManager(Settings settings, ISessionCreator sessionCreator, IGameSession session, IGameController gameController, ISessionHolder sessionHolder, IObsController obsController, ReplayFileWriter replayFileWriter)
 {
     this.settings         = settings;
     this.sessionCreater   = sessionCreator;
     this.session          = session;
     this.gameController   = gameController;
     this.sessionHolder    = sessionHolder;
     this.obsController    = obsController;
     this.replayFileWriter = replayFileWriter;
 }
        /// <summary>
        /// When the hash field got introduced, some users ended up with a NULL value, causing issues when later on fetching using "record || hash"
        /// </summary>
        /// <param name="sessionCreator"></param>
        public void Migrate(ISessionCreator sessionCreator)
        {
            using (ISession session = sessionCreator.OpenSession()) {
                using (ITransaction transaction = session.BeginTransaction()) {
                    session.CreateSQLQuery(
                        $"UPDATE {DatabaseItemTable.Table} SET {DatabaseItemTable.Hash} = 0 WHERE {DatabaseItemTable.Hash} IS NULL"
                        ).ExecuteUpdate();

                    transaction.Commit();
                }
            }
        }
Ejemplo n.º 8
0
        public async Task <PublishSchemaPayload> PublishSchemaAsync(
            PublishSchemaInput input,
            [Service] IMessageSender <PublishDocumentMessage> messageSender,
            [Service] IFileStorage fileStorage,
            [Service] ISessionCreator sessionCreator,
            [DataLoader] SchemaByNameDataLoader schemaDataLoader,
            [DataLoader] EnvironmentByNameDataLoader environmentDataLoader,
            CancellationToken cancellationToken)
        {
            Schema schema = await schemaDataLoader.LoadAsync(
                input.SchemaName, cancellationToken)
                            .ConfigureAwait(false);

            Environment environment = await environmentDataLoader.LoadAsync(
                input.EnvironmentName, cancellationToken)
                                      .ConfigureAwait(false);

            if (string.IsNullOrEmpty(input.SourceText))
            {
                throw new GraphQLException(
                          Resources.SchemaMutations_HashAndSourceTextAreNull);
            }

            string sessionId = await sessionCreator.CreateSessionAsync(cancellationToken)
                               .ConfigureAwait(false);

            IFileContainer container = await fileStorage.CreateContainerAsync(
                sessionId, cancellationToken)
                                       .ConfigureAwait(false);

            using (Stream stream = await container.CreateFileAsync(
                       "schema.graphql", cancellationToken)
                                   .ConfigureAwait(false))
            {
                byte[] buffer = Encoding.UTF8.GetBytes(input.SourceText);
                await stream.WriteAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
            }

            await messageSender.SendAsync(
                new PublishDocumentMessage(
                    sessionId,
                    environment.Id,
                    schema.Id,
                    input.ExternalId,
                    input.Tags is null
                        ? Array.Empty <Tag>()
                        : input.Tags.Select(t => new Tag(t.Key, t.Value)).ToArray()),
                cancellationToken)
            .ConfigureAwait(false);

            return(new PublishSchemaPayload(sessionId, input.ClientMutationId));
        }
Ejemplo n.º 9
0
        public void Migrate(ISessionCreator sessionCreator)
        {
            Logger.Debug("Executing migration");
            using (ISession session = sessionCreator.OpenSession()) {
                using (ITransaction transaction = session.BeginTransaction()) {
                    foreach (var line in Sql)
                    {
                        session.CreateSQLQuery(line).ExecuteUpdate();
                    }

                    transaction.Commit();
                }
            }
        }
Ejemplo n.º 10
0
            public static bool Execute(ISessionCreator factory, ISessionFactory legacySessionFactory, bool isHardcore)
            {
                try {
                    IList <T> elements;
                    using (var legacy = legacySessionFactory.OpenSession()) {
                        elements = legacy.CreateCriteria <T>().List <T>();
                    }


                    using (var session = factory.OpenSession()) {
                        using (var transaction = session.BeginTransaction()) {
                            session.CreateQuery("DELETE FROM PlayerItemStat").ExecuteUpdate();
                            session.CreateQuery("DELETE FROM PlayerItem").ExecuteUpdate();

                            foreach (var item in elements)
                            {
                                PlayerItem copy = new PlayerItem {
                                    BaseRecord                 = item.BaseRecord,
                                    EnchantmentRecord          = item.EnchantmentRecord,
                                    EnchantmentSeed            = item.EnchantmentSeed,
                                    MateriaCombines            = item.MateriaCombines,
                                    MateriaRecord              = item.MateriaRecord,
                                    ModifierRecord             = item.ModifierRecord,
                                    PrefixRecord               = item.PrefixRecord,
                                    RelicCompletionBonusRecord = item.RelicCompletionBonusRecord,
                                    RelicSeed       = item.RelicSeed,
                                    Seed            = item.Seed,
                                    StackCount      = Math.Max(1, item.StackCount),
                                    SuffixRecord    = item.SuffixRecord,
                                    TransmuteRecord = item.TransmuteRecord,
                                    UNKNOWN         = item.UNKNOWN,
                                    Mod             = item.Mod,
                                    IsHardcore      = isHardcore,
                                    //IsExpansion1 = item.IsExpansion1
                                };

                                session.Save(copy);
                            }
                            transaction.Commit();
                        }
                    }

                    return(true);
                } catch (Exception ex) {
                    logger.Warn(ex.Message);
                    logger.Warn(ex.StackTrace);
                    return(false);
                }
            }
Ejemplo n.º 11
0
 internal SessionLifecycleHandler(
     ISessionLoader sessionLoader,
     ISessionCreator sessionCreator,
     ISessionWriter sessionWriter,
     WrapSession wrapSession,
     ICookieWriter cookieWriter,
     IExpirationRetriever expirationRetriever)
 {
     _sessionLoader       = sessionLoader;
     _sessionCreator      = sessionCreator;
     _sessionWriter       = sessionWriter;
     _wrapSession         = wrapSession;
     _cookieWriter        = cookieWriter;
     _expirationRetriever = expirationRetriever;
 }
        /// <summary>
        /// When the hash field got introduced, some users ended up with a NULL value, causing issues when later on fetching using "record || hash"
        /// </summary>
        /// <param name="sessionCreator"></param>
        public void Migrate(ISessionCreator sessionCreator)
        {
            try {
                using (ISession session = sessionCreator.OpenSession()) {
                    using (ITransaction transaction = session.BeginTransaction()) {
                        session.CreateSQLQuery($"ALTER TABLE {PlayerItemTable.Table} ADD COLUMN CreatedAt BIGINT").ExecuteUpdate();
                        session.CreateSQLQuery($"UPDATE {PlayerItemTable.Table} SET CreatedAt = 0").ExecuteUpdate();

                        transaction.Commit();
                    }
                }
            }
            catch (Exception ex) {
                // Probably okay, without version control of the db, nothing to do.
            }
        }
Ejemplo n.º 13
0
        public void CreateSessionGivesSessionsWithSameRandomizedDeviceId()
        {
            // given
            mockPrivacyConfiguration.IsDeviceIdSendingAllowed.Returns(false);

            var             target             = CreateSessionCreator();
            ISessionCreator targetExplicit     = target;
            var             randomizedDeviceId = target.RandomNumberGenerator.NextPositiveLong();

            // when
            var obtainedOne   = targetExplicit.CreateSession(mockParent);
            var obtainedTwo   = targetExplicit.CreateSession(mockParent);
            var obtainedThree = targetExplicit.CreateSession(mockParent);

            // then
            Assert.That(obtainedOne.Beacon.DeviceId, Is.EqualTo(randomizedDeviceId));
            Assert.That(obtainedTwo.Beacon.DeviceId, Is.EqualTo(randomizedDeviceId));
            Assert.That(obtainedThree.Beacon.DeviceId, Is.EqualTo(randomizedDeviceId));
        }
Ejemplo n.º 14
0
        internal SessionProxy(
            ILogger logger,
            IOpenKitComposite parent,
            ISessionCreator sessionCreator,
            ITimingProvider timingProvider,
            IBeaconSender beaconSender,
            ISessionWatchdog sessionWatchdog)
        {
            this.logger          = logger;
            this.parent          = parent;
            this.sessionCreator  = sessionCreator;
            this.timingProvider  = timingProvider;
            this.beaconSender    = beaconSender;
            this.sessionWatchdog = sessionWatchdog;

            var currentServerConfig = beaconSender.LastServerConfiguration;

            CreateInitialSessionAndMakeCurrent(currentServerConfig);
        }
Ejemplo n.º 15
0
        public void CreateSessionIncreasesSessionSequenceNumber()
        {
            // given
            var             target         = CreateSessionCreator();
            ISessionCreator targetExplicit = target;

            Assert.That(target.SessionSequenceNumber, Is.EqualTo(0));

            // when
            targetExplicit.CreateSession(mockParent);

            // then
            Assert.That(target.SessionSequenceNumber, Is.EqualTo(1));

            // and when
            targetExplicit.CreateSession(mockParent);

            // then
            Assert.That(target.SessionSequenceNumber, Is.EqualTo(2));
        }
Ejemplo n.º 16
0
        public void ResetResetsSessionSequenceNumber()
        {
            // given
            var             target         = CreateSessionCreator();
            ISessionCreator targetExplicit = target;


            for (var i = 0; i < 5; i++)
            {
                // when
                var session = targetExplicit.CreateSession(mockParent);

                // then
                Assert.That(session.Beacon.SessionSequenceNumber, Is.EqualTo(i));
            }

            // and when
            targetExplicit.Reset();

            // then
            Assert.That(target.SessionSequenceNumber, Is.EqualTo(0));
        }
Ejemplo n.º 17
0
        public void ResetMakesFixedSessionIdProviderToUseNextSessionId()
        {
            // given
            const int sessionIdBeforeReset = 17;
            const int sessionIdAfterReset  = 42;

            mockSessionIdProvider.GetNextSessionId().Returns(sessionIdBeforeReset, sessionIdAfterReset);
            mockPrivacyConfiguration.IsSessionNumberReportingAllowed.Returns(true);

            var             target         = CreateSessionCreator();
            ISessionCreator targetExplicit = target;

            // when
            for (var i = 0; i < 5; i++)
            {
                var session = targetExplicit.CreateSession(mockParent);
                var beacon  = session.Beacon;

                // then
                Assert.That(beacon.SessionNumber, Is.EqualTo(sessionIdBeforeReset));
                Assert.That(beacon.SessionSequenceNumber, Is.EqualTo(i));
            }

            // and when
            targetExplicit.Reset();

            // then
            for (var i = 0; i < 5; i++)
            {
                var session = targetExplicit.CreateSession(mockParent);
                var beacon  = session.Beacon;

                // then
                Assert.That(beacon.SessionNumber, Is.EqualTo(sessionIdAfterReset));
                Assert.That(beacon.SessionSequenceNumber, Is.EqualTo(i));
            }
        }
Ejemplo n.º 18
0
 public DatabaseItemDaoImpl(ISessionCreator sessionCreator) : base(sessionCreator)
 {
 }
Ejemplo n.º 19
0
 public BuddyItemRepo(ThreadExecuter threadExecuter, ISessionCreator sessionCreator) : base(threadExecuter, sessionCreator)
 {
     _repo         = new BuddyItemDaoImpl(sessionCreator);
     this.BaseRepo = _repo;
 }
Ejemplo n.º 20
0
 public DatabaseItemRepo(ThreadExecuter threadExecuter, ISessionCreator sessionCreator) : base(threadExecuter, sessionCreator)
 {
     this._repo    = new DatabaseItemDaoImpl(sessionCreator);
     this.BaseRepo = _repo;
 }
Ejemplo n.º 21
0
 public DatabaseSettingRepo(ThreadExecuter threadExecuter, ISessionCreator sessionCreator) : base(threadExecuter, sessionCreator)
 {
     this.repo     = new DatabaseSettingDaoImpl(sessionCreator);
     this.BaseRepo = repo;
 }
Ejemplo n.º 22
0
 public PlayerItemDaoImpl(ISessionCreator sessionCreator, IDatabaseItemStatDao databaseItemStatDao) : base(sessionCreator)
 {
     _databaseItemStatDao = databaseItemStatDao;
 }
Ejemplo n.º 23
0
 public AugmentationItemDaoImpl(ISessionCreator sessionCreator, IDatabaseItemStatDao databaseItemStatDao) : base(sessionCreator)
 {
     _databaseItemStatDao = databaseItemStatDao;
 }
Ejemplo n.º 24
0
 public BuddySubscriptionRepo(ThreadExecuter threadExecuter, ISessionCreator sessionCreator, SqlDialect dialect) : base(threadExecuter, sessionCreator)
 {
     repo          = new BuddySubscriptionDaoImpl(sessionCreator, dialect);
     this.BaseRepo = repo;
 }
Ejemplo n.º 25
0
 public BuddyItemDaoImpl(ISessionCreator sessionCreator) : base(sessionCreator)
 {
     //
 }
Ejemplo n.º 26
0
 public RecipeItemRepo(ThreadExecuter threadExecuter, ISessionCreator sessionCreator) : base(threadExecuter, sessionCreator)
 {
     this.repo     = new RecipeItemDaoImpl(sessionCreator);
     this.BaseRepo = repo;
 }
Ejemplo n.º 27
0
 public PlayerItemRepo(ThreadExecuter threadExecuter, ISessionCreator sessionCreator) : base(threadExecuter, sessionCreator)
 {
     this.repo     = new PlayerItemDaoImpl(sessionCreator, new DatabaseItemStatDaoImpl(sessionCreator));
     this.BaseRepo = repo;
 }
Ejemplo n.º 28
0
 public ReplicaItemDaoImpl(ISessionCreator sessionCreator, SqlDialect dialect) : base(sessionCreator, dialect)
 {
 }
Ejemplo n.º 29
0
 protected BaseDao(ISessionCreator sessionCreator)
 {
     this.SessionCreator = sessionCreator;
 }
Ejemplo n.º 30
0
 public MigrationHandler(ISessionCreator sessionCreator)
 {
     this._sessionCreator = sessionCreator;
 }