예제 #1
0
        private async Task <bool> UpdateTravianUser()
        {
            var result = false;

            if (this._travianUser == null)
            {
                try
                {
                    this._travianUser = await this._travianUserRepo.GetActiveUser(this._botUser.UserName);

                    if (this._travianUser == null)
                    {
                        await _bot.SendTextMessageAsync(this._chatId, $"Unable to find active user to start watching. Please configure the travian user first. Error Id: {10}");
                    }
                    else
                    {
                        result = true;
                    }
                }
                catch (Exception exc)
                {
                    await _bot.SendTextMessageAsync(
                        this._chatId,
                        $"Unable to find active user to start watching. Please configure the travian user first. Error Id: {10}");

                    this._logger.LogError(10, $"{exc.Message}: \r\n {exc.StackTrace}");
                }
            }
            else
            {
                result = true;
            }

            return(result);
        }
예제 #2
0
        public async Task <IEnumerable <JobInfoViewModel> > GetJobsDetailsForPlayer(TravianUser player)
        {
            var groupName = SchedulerService.BuildGroupKey(player.UserName, player.BotUserName);
            var matcher   = GroupMatcher <JobKey> .GroupContains(groupName);

            var result = new List <JobInfoViewModel>();

            foreach (var key in await _scheduler.GetJobKeys(matcher))
            {
                var triggers = await _scheduler.GetTriggersOfJob(key);

                var detail = await _scheduler.GetJobDetail(key);

                var nextTime = triggers.FirstOrDefault()?.GetNextFireTimeUtc();
                if (!nextTime.HasValue)
                {
                    var cmd = detail.JobDataMap[AbstractJob.JobExecutionDataKey] as IQueueableCommand;
                    nextTime = cmd.Start;
                }

                result.Add(new JobInfoViewModel
                {
                    Name              = key.Name,
                    Group             = key.Group,
                    NextExecutionTime = nextTime.Value.ToDisplayStringApplyTimeZone(player.PlayerData.TimeZone)
                });
            }

            return(result);
        }
예제 #3
0
        public Task <BaseScenarioResult> RunScan(TravianUser user, bool details = false)
        {
            var player = _mapper.Map <Player>(user);
            var result = BuildScanResult();

            result.Player = player;
            return(Task.FromResult(result));
        }
        public Task <BaseScenarioResult> RunWatch(TravianUser user)
        {
            var player = _mapper.Map <Player>(user);
            var result = BuildWatchResult();

            result.Player = player;
            return(Task.FromResult(result));
        }
예제 #5
0
 private Player Map(TravianUser user)
 {
     return(new Player
     {
         UserName = user.UserName,
         Password = user.Password,
         TimeZone = user.PlayerData.TimeZone,
         Uri = new Uri(user.Url)
     });
 }
예제 #6
0
        public Task <BaseScenarioResult> RunUpdateUserInfo(TravianUser user)
        {
            var player = _mapper.Map <Player>(user);
            var result = new BaseScenarioResult
            {
                Player = player
            };

            return(Task.FromResult(result));
        }
예제 #7
0
        public Task <BaseScenarioResult> ExecuteActions <T>(TravianUser user, IEnumerable <T> actions) where T : GameAction
        {
            var player = _mapper.Map <Player>(user);
            var result = new BaseScenarioResult
            {
                Player = player
            };

            return(Task.FromResult(result));
        }
예제 #8
0
        public async Task <BaseScenarioResult> RunWatch(TravianUser user)
        {
            await Task.Delay(10000);

            var player = _mapper.Map <Player>(user);
            var result = BuildWatchResult();

            result.Player = player;
            _logger.LogDebug($"Fake watch command completed");
            return(result);
        }
        public async Task <IActionResult> Create(TravianUser model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var existing = await _repo.GetUserByName(model.UserName, User.Identity.Name);

                    if (existing != null)
                    {
                        ModelState.AddModelError("UserName", "Player with this name already exists");
                        return(View(model));
                    }
                }
                catch (Exception exc)
                {
                    this._logger.LogError(LoggingEvents.GetItemException, exc, $"Unable to update travian user [{model.UserName}] of bot user [{User.Identity.Name}]");
                }

                if (model.IsActive)
                {
                    var existingActive = await _repo.GetActiveUser(User.Identity.Name);

                    if (existingActive != null)
                    {
                        existingActive.IsActive = false;
                        try
                        {
                            await _client.Logout(existingActive);

                            await _repo.Update(existingActive);
                        }
                        catch (Exception exc)
                        {
                            this._logger.LogError(LoggingEvents.UpdateItemException, exc, $"Unable to update travian user [{model.UserName}] of bot user [{User.Identity.Name}]");
                        }
                    }
                }

                try
                {
                    await _repo.Insert(model);
                }
                catch (Exception exc)
                {
                    this._logger.LogError(LoggingEvents.InsertItemException, exc, $"Unable to update travian user [{model.UserName}] of bot user [{User.Identity.Name}]");
                }

                return(RedirectToAction("List"));
            }

            return(View(model));
        }
예제 #10
0
        public async Task <IEnumerable <GameAction> > GetActionsForPlayer(TravianUser user)
        {
            var playerData = user.PlayerData;
            var villages   = await _villageRepository.GetVillages(user.UserName);

            if (!villages.Any(x => x.IsSaveResourcesFeatureOn || x.IsSaveTroopsFeatureOn))
            {
                return(null);
            }

            var capital = villages.FirstOrDefault(x => x.IsCapital);

            var result = new List <GameAction>();

            if (capital?.Attacks != null && capital.Attacks.Any())
            {
                if (capital.IsSaveTroopsFeatureOn)
                {
                    result.Add(new SendArmyAction
                    {
                        Action  = GameActionType.SEND_ARMY,
                        Village = _mapper.Map <Village>(capital),
                        To      = new Village
                        {
                            Name = SendArmyKey
                        },
                        SendAll = true,
                        Type    = SendArmyType.RAID
                    });
                }
                if (capital.IsSaveResourcesFeatureOn)
                {
                    var capitalActions = await Task.WhenAll(
                        //CreateActionsForTroops(capital, playerData.Tribe, VillageActionType.UPGRADE_ARMY),
                        CreateActionsForTroops(capital, playerData.Tribe, GameActionType.TRAIN_ARMY));

                    result.AddRange(capitalActions);
                    // send resources is not needed
                }
            }

            // we don't send resources from capital for now
            result.AddRange(await CreateActionsForOtherVillages(villages, capital, playerData.Tribe));

            return(result);
        }
예제 #11
0
        public Task <BaseScenarioResult> GetTargetsFromMessage(TravianUser user, string messageUrl)
        {
            var result = Builder <BaseScenarioResult> .CreateNew()
                         .With(x => x.Success  = true)
                         .With(x => x.Villages = Builder <Village> .CreateListOfSize(2)
                                                 .All()
                                                 .With(y => y.Alliance = "TestAlliance")
                                                 .TheFirst(1)
                                                 .With(y => y.CoordinateX = 10)
                                                 .With(y => y.CoordinateY = 10)
                                                 .TheNext(1)
                                                 .With(y => y.CoordinateX = -10)
                                                 .With(y => y.CoordinateY = -10)
                                                 .Build().ToList())
                         .Build();

            return(Task.FromResult(result));
        }
        public async Task <IActionResult> Edit(TravianUser model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    await _repo.Update(model);
                }
                catch (Exception exc)
                {
                    this._logger.LogError(LoggingEvents.UpdateItemException, exc, $"Unable to update travian user [{model.UserName}] of bot user [{User.Identity.Name}]");
                }

                return(RedirectToAction("List"));
            }

            return(View(model));
        }
예제 #13
0
        public FakeServiceProviderBuilderForJob AddTravianUser(TravianUser travianUser = null)
        {
            if (BotUser == null)
            {
                throw new InvalidOperationException("Can not add travian user before bot user. Define the bot user first.");
            }

            if (travianUser == null)
            {
                travianUser = FakeDataProvider.GetUser(PlayerStatus.ALL_QUIET);
            }
            TravianUser = travianUser;

            var travianUserRepoMock = new Mock <ITravianUserRepository>();

            travianUserRepoMock.Setup(x => x.GetActiveUser(BotUser.UserName))
            .Returns(Task.FromResult(travianUser));

            return(this.WithService(travianUserRepoMock.Object));
        }
예제 #14
0
        public async Task Execute(JobExecutionData jobExecutionData)
        {
            try
            {
                _botUser = await _botUserProvider.FindByNameAsync(jobExecutionData.TravianUser.BotUserName);

                _travianUser = jobExecutionData.TravianUser;
            }
            catch (Exception exc)
            {
                this._logger.LogError(LoggingEvents.BackgroundJobExecutingException, exc, "Unable to get parameters from JobExecutionContext.");
                return;
            }

            try
            {
                await ExecuteJob(jobExecutionData);
            }
            catch (Exception exc)
            {
                this._logger.LogError(LoggingEvents.BackgroundJobExecutingException, exc, "Unexpected error occurred during the job execution.");
            }
        }
예제 #15
0
        public async Task <BaseScenarioResult> RunWatch(TravianUser user)
        {
            var player = Map(user);

            return(await _api.Watch(player));
        }
예제 #16
0
        public async Task <BaseScenarioResult> RunUpdateUserInfo(TravianUser user)
        {
            var player = Map(user);

            return(await _api.UpdateUserInfo(player));
        }
예제 #17
0
        public async Task <BaseScenarioResult> RunScan(TravianUser user, bool details = false)
        {
            var player = Map(user);

            return(await _api.Scan(player, details));
        }
예제 #18
0
        public async Task <BaseScenarioResult> ExecuteActions <T>(TravianUser user, IEnumerable <T> actions) where T : GameAction
        {
            var player = Map(user);

            return(await _api.RunScenarioWithActions(player, actions));
        }
예제 #19
0
        public async Task <BaseScenarioResult> Logout(TravianUser user)
        {
            var player = Map(user);

            return(await _api.Logout(player));
        }
예제 #20
0
        public Task <BaseScenarioResult> GetTargetsFromMessage(TravianUser user, string messageUrl)
        {
            var player = Map(user);

            return(_api.GetTargetsFromMessage(player, messageUrl));
        }
예제 #21
0
        public async Task <BaseScenarioResult> RunGetVillagesInfo(TravianUser user)
        {
            var player = Map(user);

            return(await _api.GetVillagesInfo(player));
        }
예제 #22
0
 public Task <BaseScenarioResult> GetTargetsFromMessage(TravianUser user, string messageUrl)
 {
     return(Task.FromResult(new BaseScenarioResult()));
 }
예제 #23
0
 public Task <BaseScenarioResult> Logout(TravianUser user)
 {
     return(Task.FromResult(new BaseScenarioResult()));
 }
예제 #24
0
 public Task <BaseScenarioResult> RunGetVillagesInfo(TravianUser user)
 {
     throw new NotImplementedException();
 }
예제 #25
0
 public Task <BaseScenarioResult> Logout(TravianUser user)
 {
     throw new NotImplementedException();
 }