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); }); }
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); }
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); }
public async Task <ActionResult> Logout(GameMessageModel model) { _messageHandler.Quit(model.ConnectionId); return(new OkResult()); }