Exemple #1
0
        //public static async void EditServer(int serverid, string parameterToUpdate, object newValue)
        //{
        //    var filter = Builders<BsonDocument>.Filter.Eq("Id", serverid);
        //    var update = Builders<BsonDocument>.Update.Set(parameterToUpdate, newValue);

        //    UpdateResult updateResult = await serversCollection.UpdateOneAsync(filter, update);
        //    if (updateResult.ModifiedCount > 0)
        //        MessageBox.Show($"[{CollectionName}]:\nModified count = [{updateResult.ModifiedCount}]\n" +
        //                        $"Server: [{serverid}]\nValue of [{parameterToUpdate}] changed to [{newValue}]",
        //            "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
        //}


        /// <summary>
        /// Возвращает true, если был обновлен существующий сервер, и false, если была создана новая запись в базу
        /// </summary>
        /// <param name="serverInfo"></param>
        public async Task <bool> UpdateServer(ServerInfo serverInfo)
        {
            var finalFilter = mongoDbDefinitionBuilder.GetComplexFilterForServerUpdate(serverInfo);
            var finalUpdate = mongoDbDefinitionBuilder.GetComplexUpdateForServerUpdate(serverInfo);

            var updateResult = await serversCollection.UpdateOneAsync(finalFilter, finalUpdate);

            // если ни одного сервера обновлено не было, то добавляем новый
            if (updateResult.ModifiedCount == 0)
            {
                var doc = new BsonDocument
                {
                    { "Id", GetAvailableServerId() },
                    { "Name", serverInfo.Name },
                    { "IP", serverInfo.Ip },
                    { "Port", serverInfo.Port },
                    { "Region", serverInfo.Region },
                    { "PlayersCount", serverInfo.PlayersCount },
                    { "PlayersMax", serverInfo.PlayersMax },
                    { "MinutesToNextLevelChange", serverInfo.MinutesToNextLevelChange },
                    { "LastUpdateDateTime", DateTime.Now }
                };

                serversCollection.InsertOneAsync(doc);

                //MongoDBForm.SetStatusStripMessage($"Added new server: {serverInfo.Name} - {serverInfo.Ip}:{serverInfo.Port} ({serverInfo.Region})");
            }

            if (OnUpdateServers != null)
            {
                OnUpdateServers(updateResult.ModifiedCount == 0); // если добавили новый (нет изменённых), то полностью обновляем таблицу
            }
            return(updateResult.ModifiedCount != 0);
        }
        public async void TestFillDB()
        {
            playersDatabase   = dbProvider.GetDatabase(DatabaseName);
            playersCollection = dbProvider.GetBsonDocumentCollection(DatabaseName, CollectionName);

            await playersDatabase.DropCollectionAsync(CollectionName); // очистка коллекции БД

            var random = new Random(0);

            for (var i = 0; i < 50; i++)
            {
                // Unlocked Skins
                var unlockedSkins = new List <short>();
                for (var j = 0; j < (i + 17) / 20; j++)
                {
                    unlockedSkins.Add((short)(random.Next(0, 15)));
                }
                unlockedSkins.Sort();

                var unlockedSkinsJson = JsonConvert.SerializeObject(unlockedSkins);

                // Unlocked Abilities
                var unlockedAbilities = new List <short>();
                for (var j = 0; j < (i + 8) / 10; j++)
                {
                    unlockedAbilities.Add((short)(random.Next(0, 35)));
                }
                unlockedAbilities.Sort();

                var unlockedAbilitiesJson = JsonConvert.SerializeObject(unlockedAbilities);

                var doc = new BsonDocument
                {
                    { "Id", i },
                    { "PersonId", encryptor.SHA256($"email{i}@gmail.com") },
                    { "Nickname", $"Player random-n{i - 102*((-3) ^ (i/5))}" },
                    { "Country", CultureInfo.GetCultures(CultureTypes.SpecificCultures)[i * 7].Name },
                    { "Money", 2250 - 20 * i - (-2) ^ (i / 5) },
                    { "ScoreMax", 1150 + (-3) ^ (i / 5) },
                    { "LastSessionDateTime", DateTime.Now.AddMinutes(-1.25f * i) },
                    { "FirstSessionDateTime", DateTime.Now.AddDays(-50f / (i + 1)) },
                    { "SelectedSkin", i / 4 },
                    { "UnlockedSkins", unlockedSkinsJson },
                    { "SelectedAbility", 25 / (i + 1) },
                    { "UnlockedAbilities", unlockedAbilitiesJson }
                };

                playersCollection.InsertOneAsync(doc);
            }

            //MessageBox.Show($"[{CollectionName}]: Test filling completed.\nComment this function and restart application",
            //    "Done", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //MediaTypeNames.Application.Exit();
        }