Exemple #1
0
        public async Task LeaveGame(GenericGameCmd cmd)
        {
            var gameEntity = await _repository.GetGame(cmd.GameId);

            var game   = gameEntity.ToModel();
            var player = game.Players.WithUserId(GetUserId());

            game.Leave(player);

            if (game.Players.Any())
            {
                await _repository.ReplaceGame(GameEntity.Create(game));

                var leftEvent = new PlayerLeftEvent()
                {
                    Player = PlayerDto.Create(player),
                    GameId = game.Id
                };
                await Clients.Group(LobbyGroup).PlayerLeft(leftEvent);
            }
            else
            {
                await _repository.DeleteGame(game.Id);

                var removedEvent = new GameDestroyedEvent()
                {
                    GameId = game.Id
                };
                await Clients.Group(LobbyGroup).GameDestroyed(removedEvent);
            }
        }
Exemple #2
0
        public async Task JoinGame(GenericGameCmd cmd)
        {
            var gameEntity = await _repository.GetGame(cmd.GameId);

            var game   = gameEntity.ToModel();
            var player = CreatePlayerForCurrentUser();

            game.Join(player);
            await _repository.ReplaceGame(GameEntity.Create(game));

            var joinedEvent = new PlayerJoinedEvent
            {
                Player = PlayerDto.Create(player),
                GameId = game.Id
            };
            await Clients.Group(LobbyGroup).PlayerJoined(joinedEvent);
        }
Exemple #3
0
        public async Task StartGame(GenericGameCmd cmd)
        {
            var gameEntity = await _repository.GetGame(cmd.GameId);

            var game = gameEntity.ToModel();

            game.Start(shufflePlayers: true);

            await _repository.ReplaceGame(GameEntity.Create(game));

            _inprogressGameStore.Add(game);

            var startedEvent = new GameStartedEvent
            {
                Game = GameSummaryDto.Create(game)
            };
            await Clients.Group(LobbyGroup).GameStarted(startedEvent);
        }