private void UpdateTeamPoints(GameMessageModel gameMessageModel)
        {
            var team1 = _teamsRepository.FetchTeam(gameMessageModel.Team1Name);
            var team2 = _teamsRepository.FetchTeam(gameMessageModel.Team2Name);

            team1.Games++;
            team2.Games++;

            if (gameMessageModel.Team1Goals > gameMessageModel.Team2Goals)
            {
                team1.Points += 3;
            }
            else if (gameMessageModel.Team1Goals < gameMessageModel.Team2Goals)
            {
                team2.Points += 3;
            }
            else
            {
                team1.Points++;
                team2.Points++;
            }

            _teamsRepository.UpdateTeam(team1);
            _teamsRepository.UpdateTeam(team2);
        }
        private void UpdatePlayersGoals(GameMessageModel gameMessageModel)
        {
            var team1players = _teamsRepository.FetchPlayers(gameMessageModel.Team1Name.Replace(" ", "")).ToList();
            var team2players = _teamsRepository.FetchPlayers(gameMessageModel.Team2Name.Replace(" ", "")).ToList();

            foreach (var scorer in gameMessageModel.Team1Scorers)
            {
                var player = team1players.Find(x => x.FullName == scorer);
                if (player != null)
                {
                    player.Goals++;
                }
            }

            foreach (var scorer in gameMessageModel.Team2Scorers)
            {
                var player = team2players.Find(x => x.FullName == scorer);
                if (player != null)
                {
                    player.Goals++;
                }
            }

            _teamsRepository.UpdatePlayers(team1players);
            _teamsRepository.UpdatePlayers(team2players);
        }
        public async Task SaveGameResult(GameMessageModel gameMessageModel)
        {
            await SaveGame(gameMessageModel);

            UpdateTeamPoints(gameMessageModel);
            UpdatePlayersGoals(gameMessageModel);
        }
 public async Task ProcessGameMessage([ServiceBusTrigger(nameof(GameMessageModel), SubscriptionName)] GameMessageModel message, TextWriter textWriter)
 {
     await ProcessMessage(textWriter, message, async (scope, model) =>
     {
         var gamesService     = scope.Resolve <GamesService>();
         var telemetryService = scope.Resolve <TelemetryService>();
         await gamesService.SaveGameResult(message);
         await WriteMessage(message.CorrelationId, textWriter);
         telemetryService.Log("Succesfully saved game result", message.CorrelationId);
     });
 }
示例#5
0
        public async Task <ActionResult> Message(GameMessageModel model)
        {
            if (model == null || string.IsNullOrWhiteSpace(model.Message))
            {
                return(new OkResult());
            }
            //var resp = "Welcome to <#darkcyan>Arcana Aeterna<#>!\n" +
            //          "-=-=-=-=-=-=-=-=-=-=-=-=-=";
            //await _messageHandler.SendText(resp);
            await _messageHandler.ReceiveMessage(model.ConnectionId, model.Message);

            return(new OkResult());
        }
        private async Task SaveGame(GameMessageModel gameMessageModel)
        {
            var game = new GameEntity(gameMessageModel.Group, Guid.NewGuid().ToString())
            {
                DateOfGame = gameMessageModel.DateOfGame,
                Team1Name  = gameMessageModel.Team1Name,
                Team2Name  = gameMessageModel.Team2Name,
                Team1Goals = gameMessageModel.Team1Goals,
                Team2Goals = gameMessageModel.Team2Goals,
            };

            await _teamsRepository.StoreGame(game);
        }
示例#7
0
        public async Task <ActionResult> Login(GameMessageModel model)
        {
            var user = await _userMgr.GetUserAsync(HttpContext.User);

            var account = _accounts.Find(x => x.UserId == user.Id).SingleOrDefault();

            //if (user.Account == null)s
            //{
            //    user.Account = new Account { UserId = user.Id };
            //    var res = await _userMgr.UpdateAsync(user);
            //}

            _messageHandler.Login(model.ConnectionId, user.Account);

            return(new OkResult());
        }
        public void PlayGame(string group, string correlationId)
        {
            var teamsInGroup = _teamsRepository.FetchTeamsByGroup(group).Where(x => x.Games < 3).ToList();
            var gamesInGroup = _teamsRepository.FetchGamesByGroup(group).ToList();

            if (teamsInGroup.Count == 0)
            {
                return;
            }

            var index = _rnd.Next(teamsInGroup.Count);

            var team1Goals = _rnd.Next(MaxGoalsInGame);
            var team2Goals = _rnd.Next(MaxGoalsInGame);

            var team1Name = teamsInGroup[index].Name;

            teamsInGroup.RemoveAt(index);
            var team2Name = DrawOpponent(team1Name, teamsInGroup, gamesInGroup);

            var team1Players = _teamsRepository.FetchPlayers(team1Name.Replace(" ", "")).ToList();
            var team2Players = _teamsRepository.FetchPlayers(team2Name.Replace(" ", "")).ToList();

            var team1Scorers = DrawScorers(team1Players, team1Goals).ToList();
            var team2Scorers = DrawScorers(team2Players, team2Goals).ToList();

            _telemetryService.Log($"New result generated {team1Name}:{team2Name} {team1Goals}:{team2Goals}", correlationId);

            var gameMessageModel = new GameMessageModel
            {
                Group         = group,
                Team1Name     = team1Name,
                Team2Name     = team2Name,
                DateOfGame    = DateTime.Now,
                Team1Goals    = team1Goals,
                Team2Goals    = team2Goals,
                Team1Scorers  = team1Scorers,
                Team2Scorers  = team2Scorers,
                CorrelationId = correlationId
            };

            _topicService.SendMessage(gameMessageModel);
        }
示例#9
0
 public async Task <ActionResult> Logout(GameMessageModel model)
 {
     _messageHandler.Quit(model.ConnectionId);
     return(new OkResult());
 }