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); } }
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); }
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); }