Example #1
0
        public async Task SetIdQueueAsync(IdQueue queue, CancellationToken cancellationToken = default)
        {
            await _lock.WaitAsync(cancellationToken).ConfigureAwait(false);

            try
            {
                _log.LogTrace("Inserting IDs queue {QueueName} into database", queue.Name);
                _cache.AddOrReplace(queue);
                await _batchInserter.BatchAsync(queue.ID, new MongoDelayedInsert <IdQueue>(dbQueue => dbQueue.ID == queue.ID, queue, _replaceOptions)).ConfigureAwait(false);
            }
            finally
            {
                _lock.Release();
            }
        }
        public async Task SetGroupConfigAsync(GroupConfig config, bool instant, CancellationToken cancellationToken = default)
        {
            await _lock.WaitAsync(cancellationToken).ConfigureAwait(false);

            try
            {
                _log.LogTrace("Inserting group config for group {GroupID} into database", config.ID);
                _cache.AddOrReplace(config);
                Expression <Func <GroupConfig, bool> > selector = dbConfig => dbConfig.ID == config.ID;
                if (instant)
                {
                    await _groupConfigsCollection.ReplaceOneAsync(selector, config, _replaceOptions, cancellationToken).ConfigureAwait(false);
                }
                else
                {
                    await _batchInserter.BatchAsync(config.ID, new MongoDelayedInsert <GroupConfig>(selector, config, _replaceOptions)).ConfigureAwait(false);
                }
            }
            finally
            {
                _lock.Release();
            }
        }
Example #3
0
        public async Task SetUserDataAsync(UserData data, bool instant, CancellationToken cancellationToken = default)
        {
            await _lock.WaitAsync(cancellationToken).ConfigureAwait(false);

            try
            {
                _log.LogTrace("Inserting user data for user {UserID} into database", data.ID);
                _cache.AddOrReplace(data);
                Expression <Func <UserData, bool> > selector = dbData => dbData.ID == data.ID;
                if (instant)
                {
                    await _usersDataCollection.ReplaceOneAsync(selector, data, _replaceOptions, cancellationToken).ConfigureAwait(false);
                }
                else
                {
                    await _batchInserter.BatchAsync(data.ID, new MongoDelayedInsert <UserData>(selector, data, _replaceOptions), cancellationToken).ConfigureAwait(false);
                }
            }
            finally
            {
                _lock.Release();
            }
        }