Ejemplo n.º 1
0
 public BotsController(BotsUnitOfWork uow, BotsManager botsManager, DbContextOptions <TwoButtonsContext> dbOptions, ILogger <BotsController> logger)
 {
     _uow         = uow;
     _botsManager = botsManager;
     _dbOptions   = dbOptions;
     _logger      = logger;
 }
Ejemplo n.º 2
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);
            }
        }