Exemplo n.º 1
0
        public Task <Unit> Handle(ScheduledEventRequest <PlayersCollectingDeadlineEventMetadata> message,
                                  CancellationToken cancellationToken)
        {
            using (_threadContextSessionProvider.CreateSessionScope())
            {
                var game = _gameRepository.Get(message.MetaData.GameId);

                if (game.AcceptedPlayers.Count != _serviceConfiguration.PlayersPerTeam * 2)
                {
                    _mediator.Send(new CancelGameRequest()
                    {
                        GameId = game.Id
                    }, cancellationToken);
                }
                else
                {
                    _mediator.Send(
                        new ScheduledEventRequest <PlayersCollectingDeadlineEventMetadata>(
                            new PlayersCollectingDeadlineEventMetadata()
                    {
                        GameId = game.Id
                    }), cancellationToken);
                }

                _gameRepository.Save(game);
            }

            return(Task.FromResult(Unit.Value));
        }
Exemplo n.º 2
0
        public Task <Unit> Handle(ScheduledEventRequest <DistributionByTeamsEventMetadata> message,
                                  CancellationToken cancellationToken)
        {
            using (_threadContextSessionProvider.CreateSessionScope())
            {
                var game           = _gameRepository.Get(message.MetaData.GameId);
                var administrators = _botUserRepository.ListBySpecification(new UndeletedEntities <BotUser>())
                                     .Where(x => x.Role >= EUserRole.Moderator).ToList();

                if (game.AcceptedPlayers.Count != _serviceConfiguration.PlayersPerTeam * 2)
                {
                    NotifyAboutUnsuccessfulCollecting(game, administrators);
                }
                else
                {
                    DistributePlayersPerTeams(game);
                    NotifyAboutSuccessfulCollecting(game, game.DistributedPlayers, administrators);
                    NotifyPlayers(game.DistributedPlayers, game);
                }
                _scheduler.DeleteEvent <IGameScheduledEventMetadata>(x => x.GameId == game.Id && !(x is PlayerGameAcceptanceTimeoutEventMetadata));

                _gameRepository.Save(game);
            }

            return(Task.FromResult(Unit.Value));
        }
Exemplo n.º 3
0
        public Task <Unit> Handle(ScheduledEventRequest <PlayerGameAcceptanceTimeoutEventMetadata> message,
                                  CancellationToken cancellationToken)
        {
            using (_threadContextSessionProvider.CreateSessionScope())
            {
                var player = _playerRepository.Get(message.MetaData.PlayerId);
                _userInteractionService.StopDialog(player.User);
                _userInteractionService.SendMessage("Ты не успел принять игру", player.User);
            }
            _mediator.Send(new PlayerGameDecisionRequest()
            {
                GameId = message.MetaData.GameId, PlayerId = message.MetaData.PlayerId, Decision = false
            });

            return(Task.FromResult(Unit.Value));
        }
        public Task <Unit> Handle(ScheduledEventRequest <PrimaryCollectingEventMetadata> message,
                                  CancellationToken cancellationToken)
        {
            using (_threadContextSessionProvider.CreateSessionScope())
            {
                var game = _gameRepository.Get(message.MetaData.GameId);
                game.SortedPlayersByRating = GetSortedPlayers();
                var requestedPlayers = game.SortedPlayersByRating.Take(_serviceConfiguration.PlayersPerTeam * 2);
                foreach (var requestedPlayer in requestedPlayers)
                {
                    game.RequestedPlayers.Add(RequestPlayer(requestedPlayer, game.Id));
                }
                _gameRepository.Save(game);
            }

            return(Task.FromResult(Unit.Value));
        }