private async Task SendGameStatusToPlayer(GameModel game, PlayerModel player) { var gameStatus = GetGameStatusForPlayer(game, player); var userConnections = _connections.GetConnectionsByKey(player.UserId); var message = new GameStatusMessage { GameStatus = gameStatus }; await SendMessageToClientsAsync("GameStatus", userConnections, message); }
private string ParseGameStatusMessage(GameStatusMessage message) { switch (message.GameStatusChangeValue) { case GameStatusMessage.GameStatusChange.GameInitialised: return("New game was initialised."); case GameStatusMessage.GameStatusChange.StartTurn: return($"{message.Player.Name}'s turn."); default: return("Unknown message"); } }
private void HandleMessage(GameMessage message) { if (message is PlayerActionMessage) { PlayerActionMessage actionMessage = (PlayerActionMessage)message; CardPanel relevantCardPanel = actionMessage.Player == _game.PlayerOne ? pYourHand : pOpponentsHand; switch (actionMessage.PlayerActionValue) { case PlayerActionMessage.PlayerAction.DrawDiscard: relevantCardPanel.AddCard(actionMessage.Card); pStacks.DiscardCount--; pStacks.VisibleDiscard = _game.GetVisibleDiscard(); pActions.AllowDraw = false; pActions.AllowTake = false; pActions.AllowDiscard = true; break; case PlayerActionMessage.PlayerAction.DrawStock: pStacks.StockCount--; relevantCardPanel.AddCard(actionMessage.Card); pActions.AllowDraw = false; pActions.AllowTake = false; pActions.AllowDiscard = true; break; case PlayerActionMessage.PlayerAction.SetDiscard: pStacks.DiscardCount++; pStacks.VisibleDiscard = actionMessage.Card; relevantCardPanel.RemoveCard(actionMessage.Card); pActions.AllowDraw = false; pActions.AllowTake = false; pActions.AllowDiscard = false; break; case PlayerActionMessage.PlayerAction.Knock: // TODO: handle Knock message break; default: break; } } else if (message is GameStatusMessage) { GameStatusMessage statusMessage = (GameStatusMessage)message; switch (statusMessage.GameStatusChangeValue) { case GameStatusMessage.GameStatusChange.GameInitialised: // TODO: assumes PlayerOne is always the human player pYourHand.Clear(); InitialisePlayerCardPanel(pYourHand); foreach (Card c in _game.PlayerOne.GetCards()) { pYourHand.AddCard(c); } pOpponentsHand.Clear(); InitialiseOpponentCardPanel(pOpponentsHand); foreach (Card c in _game.PlayerTwo.GetCards()) { pOpponentsHand.AddCard(c); } InitialiseStacks(_game.GetStockCount(), _game.GetVisibleDiscard()); InitialisePlayerActions(); break; case GameStatusMessage.GameStatusChange.StartTurn: if (statusMessage.Player == _game.PlayerOne) { pActions.AllowTake = true; pActions.AllowDraw = true; } else { pActions.AllowTake = false; pActions.AllowDraw = false; } break; default: break; } } }