private void ProcessNewPlayer(Game game) { var filteredPlayers = game.SortedPlayersByRating .Where(x => game.RequestedPlayers.All(y => x.Player.Id != y.Player.Id)) .Where(x => game.AcceptedPlayers.All(y => x.Player.Id != y.Id)) .Where(x => game.RejectedPlayers.All(y => x.Player.Id != y.Id)); if (game.AcceptedPlayers.Concat(game.RequestedPlayers.Select(y => y.Player)).Count(y => y.IsGoalkeeper) >= 2) { filteredPlayers = filteredPlayers.Where(x => x.Player.IsGoalkeeper == false); } var nextPlayer = filteredPlayers.OrderBy(x => x.OrderNumber).FirstOrDefault(); if (nextPlayer != null) { var timeoutTime = DateTime.Now.Add(_serviceConfiguration.InviteTime, _serviceConfiguration.StartDayTime, _serviceConfiguration.EndDayTime); var playerGameAcceptanceTimeoutEventMetadata = new PlayerGameAcceptanceTimeoutEventMetadata() { GameId = game.Id, PlayerId = nextPlayer.Player.Id }; _scheduler.AddEvent(playerGameAcceptanceTimeoutEventMetadata, timeoutTime); game.RequestedPlayers.Add(new PlayerEvent() { Id = Guid.NewGuid(), EventTime = timeoutTime, Player = nextPlayer.Player }); _userInteractionService.StartGameConfirmationDialog(nextPlayer.Player, nextPlayer.Player.User.UserAccounts.Select(x => _communicatorFactory.GetCommunicator(x)).ToList(), game.Id); } }
private PlayerEvent RequestPlayer(SortedPlayer requestedPlayer, Guid gameId) { var timeoutTime = DateTime.Now.Add(_serviceConfiguration.FirstInviteTime, _serviceConfiguration.StartDayTime, _serviceConfiguration.EndDayTime); var playerGameAcceptanceTimeoutEventMetadata = new PlayerGameAcceptanceTimeoutEventMetadata() { GameId = gameId, PlayerId = requestedPlayer.Player.Id }; _scheduler.AddEvent(playerGameAcceptanceTimeoutEventMetadata, timeoutTime); _userInteractionService.StartGameConfirmationDialog(requestedPlayer.Player, requestedPlayer.Player.User.UserAccounts.Select(x => _communicatorFactory.GetCommunicator(x)).ToList(), gameId); return(new PlayerEvent() { Id = Guid.NewGuid(), EventTime = timeoutTime, Player = requestedPlayer.Player }); }