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); } }
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()); }