private void ShowScore(Game game) { if (game != null) { var players = new List<PlayerViewModel>(); if (game.PlayerGames != null) { foreach (var pg in game.PlayerGames) { var pvm = new PlayerViewModel() { Id = pg.PlayerId, Name = pg.Player.DisplayName, Sets = new List<List<Card>>() }; for (int i = 0; i < pg.Score; i++) { var cardList = new List<Card>() { new Card(), new Card(), new Card() }; pvm.Sets.Add(cardList); } players.Add(pvm); } } Clients.Caller.displayFinishedGame(players, game.TotalSeconds); } }
public async Task JoinGame(int gameId) { var userId = Context.User.Identity.GetUserId<int>(); if (games.Keys.Contains("Game" + gameId)) { var game = games["Game" + gameId]; await Groups.Add(Context.ConnectionId, "Game" + gameId); foreach (var player in game.Players.Where(p => p.Id != userId)) { Clients.Caller.playerJoin(new PlayerViewModel() { Id = player.Id, Name = player.Name, Sets = player.Sets }); } var currentPlayer = game.Players.FirstOrDefault(p => p.Id == userId); if (currentPlayer != null) { Clients.OthersInGroup("Game" + gameId).playerReconnected(userId); ResendGame(game, currentPlayer); } else { if (game.StateId == 0) //only add players if the game hasn't started { var user = setRepo.FindPlayer(userId); var pvm = new PlayerViewModel() { Id = user.Id, Name = user.DisplayName }; game.Players.Add(pvm); Clients.OthersInGroup("Game" + gameId).playerJoin(pvm); } else { //spectate Clients.Caller.spectate(new GameState() { id = game.StateId, cards = game.TotalSet }); if (game.IsPaused) { Clients.Caller.pauseGame(); } } } var seconds = game.IsPaused ? game.Timer.SecondsElapsed : game.Timer.GetCurrentSecondsElapsed(); Clients.Caller.setTime(seconds); } else { var game = setRepo.FindGame(gameId); //if exists, show score if (game != null) { ShowScore(game); } else //show error message { } } }
private void ResendGame(SetGame game, PlayerViewModel currentPlayer) { if (game.StateId > 0) { Clients.Caller.sendSets(currentPlayer.Sets); Clients.Caller.startNextState(new GameState() { id = game.StateId, cards = game.TotalSet }); if (game.IsPaused) { Clients.Caller.pauseGame(); } } }