public async Task <GameDto> StartGame(StartGameDto model) { Game g = GameStore.GetGame(model.Id); for (int i = 0; i < g.Players.Count; i++) { g.Players[i].Order = i; } g.CurrentRound = new Round(1, g.Players.Count); g.CurrentPlayer = g.Players[0]; g.Status = GameStatus.Playing; await AssertRoles(model.Id, model.Roles); GameStore.AddOrUpdateGame(g); await _gameHub.Clients.Group(g.Id.ToString()).SendAsync("UpdateAll"); return(ObjectMapper.Map <GameDto>(g)); }
public async Task StartGameAsync(StartGameDto startGameDto) { var game = await gameRepository.GetAsync(startGameDto.GameId); if (startGameDto.UserId != game.CreatorId) { await Clients.Caller.SendAsync("Error", new ErrorMessage { Id = "start-game-error", Message = "Only creator can start the game" }); return; } game.StartTime = DateTime.UtcNow; game.Status = GameStatus.Active; game.DrawerPlayerId = game.PlayersIds.GetRandomItem(); await gameRepository.MergeAsync(game); var result = new GameStartedDto {GameId = game.Id, StartTime = DateTime.UtcNow}; var groupName = game.Id.ToString(); await Clients.Group(groupName).SendAsync("StartGame", result); }