예제 #1
0
        public async Task CreateTimer(BotsUnitOfWork db, DbContextOptions <TwoButtonsContext> dbOptions,
                                      MagicViewModel magic)
        {
            TimerCallback timerDelegate = Task;

            var errorPercent   = _random.Next(3, 5);
            var errorAnwerType = (AnswerType)_random.Next(1, 3);

            var firstOptionPercent = magic.FirstOptionPercent;

            if (errorAnwerType == AnswerType.First)
            {
                firstOptionPercent += errorPercent;
            }
            else
            {
                firstOptionPercent -= errorPercent;
            }

            var firstBotsCount  = magic.BotsCount * firstOptionPercent / 100;
            var secondBotsCount = magic.BotsCount - firstBotsCount;

            var allBots = await db.BotsRepository.GetAllBotsIdsExceptVoted(magic.QuestionId);

            RandomizerExtension.Shuffle(allBots);

            var list = new List <BotVoting>();

            for (var i = 0; i < firstBotsCount && i < allBots.Count; i++)
            {
                list.Add(new BotVoting {
                    BotId = allBots[i], QuestionId = magic.QuestionId, AnswerType = AnswerType.First
                });
            }

            for (var i = firstBotsCount; i < secondBotsCount + firstBotsCount && i < allBots.Count; i++)
            {
                list.Add(new BotVoting {
                    BotId = allBots[i], QuestionId = magic.QuestionId, AnswerType = AnswerType.Second
                });
            }

            RandomizerExtension.Shuffle(list);
            foreach (var bot in list)
            {
                var job = new JobState
                {
                    BotId      = bot.BotId,
                    AnswerType = bot.AnswerType,
                    QuestionId = bot.QuestionId,
                    DbOptions  = dbOptions,
                    Db         = db
                };

                //await new TaskFactory().StartNew(() => Task(job));
                var timer = new Timer(timerDelegate, job, _random.Next(magic.VoteDurationInMilliseconds), Timeout.Infinite);
            }
        }
예제 #2
0
        public async Task <IActionResult> Magic([FromBody] MagicViewModel vm)
        {
            if (vm.Code != "MySecretCode!123974_QQ")
            {
                return(new ResponseResult((int)HttpStatusCode.Forbidden, message: "You are hacker man)"));
            }
            _logger.LogInformation($"{nameof(BotsController)}.{nameof(Magic)}.Start");
            await _botsManager.CreateTimer(_uow, _dbOptions, vm);

            _logger.LogInformation($"{nameof(BotsController)}.{nameof(Magic)}.End");
            return(new OkResponseResult());
        }