Example #1
0
        protected override BaseSerializer PerformAction(ClientConnection conn, BaseSerializer requestData)
        {
            RequestSerializer  data = (RequestSerializer)requestData;
            ResponseSerializer resp = (ResponseSerializer)InitializeResponseSerializer();

            resp.Status = "OK";

            Lobby lobby = (Lobby)conn.Session.Get("joined-lobby");
            Match game  = lobby.Game;

            if (lobby.LobbyState != LobbyState.IDLE)
            {
                data.AddError(null, "INVALID_LOBBY_STATE", "Nie można usiąść w tym momencie gry");
                data.ThrowException();
            }

            try {
                var player = new Player((PlayerTag)data.PlaceTag, (string)conn.Session.Get("username"));
                game.AddPlayer(player);
                conn.Session.Set("player", player);
                Console.WriteLine("Player sat at " + data.PlaceTag + ": " + conn.Session.Get("username"));

                var broadcastData = new LobbySignalUserSatSerializer()
                {
                    Signal   = LobbySignalUserSatSerializer.SIGNAL_USER_SAT,
                    PlaceTag = data.PlaceTag,
                    Username = player.Name
                };
                var broadcastWrapper = new StandardCommunicateSerializer()
                {
                    CommunicateType = StandardCommunicateSerializer.TYPE_LOBBY_SIGNAL,
                    Data            = broadcastData.GetApiObject()
                };
                lobby.Broadcast(broadcastWrapper.GetApiObject());
            } catch (SeatTakenException) {
                data.AddError("PlaceTag", "SEAT_TAKEN", "Miejsce jest już zajęte");
                data.ThrowException();
            } catch (DuplicatedPlayerNameException) {
                data.AddError(null, "ALREADY_SEATED", "Użytkownik zajął już miejsce");
                data.ThrowException();
            } catch (WrongGameStateException) {
                data.AddError(null, "WRONG_GAME_STATE", "Nieprawidłowy stan gry dla tej operacji");
                data.ThrowException();
            }

            return(resp);
        }
Example #2
0
        private void HandleLobbySignal(JObject signalData)
        {
            var signalName = (string)signalData.GetValue("signal");

            // start gry
            if (signalName == PlayerClickedGameStartSerializer.SIGNAL_PLAYER_READY)
            {
                var serializer = new PlayerClickedGameStartSerializer(signalData);
                serializer.Validate();

                Game.Start();
                SendGetHandRequest = true;
            }
            else if (signalName == LobbySignalNewBidSerializer.SIGNAL_NEW_BID)
            {
                var serializer = new LobbySignalNewBidSerializer(signalData);
                serializer.Validate();

                try {
                    var contract = new Contract(
                        (ContractHeight)serializer.Height,
                        (ContractColor)serializer.Color,
                        (PlayerTag)serializer.PlaceTag,
                        serializer.X,
                        serializer.XX
                        );
                    Game.AddBid(contract);
                } catch (WrongBidException) {
                    // TODO: Pobrać całą licytację jeszcze raz
                }
            }
            // Użytkownik usiadł na wybranym miejscu
            else if (signalName == LobbySignalUserSatSerializer.SIGNAL_USER_SAT)
            {
                var serializer = new LobbySignalUserSatSerializer(signalData);
                serializer.Validate();

                if (serializer.Username != Username)
                {
                    Game.AddPlayer(new Player((PlayerTag)serializer.PlaceTag, serializer.Username));
                }
            }
            else if (signalName == LobbySignalUserSittedOutSerializer.SIGNAL_USER_SITTED_OUT)
            {
                var serializer = new LobbySignalUserSittedOutSerializer(signalData);
                serializer.Validate();

                var player = Game.GetPlayerAt((PlayerTag)serializer.PlaceTag);
                Game.RemovePlayer(player);
            }
            else if (signalName == PutCardSignalSerializer.SIGNAL_USER_PUT_CARD)
            {
                var serializer = new PutCardSignalSerializer(signalData);
                serializer.Validate();

                if (serializer.Username != Username)
                {
                    Game.CurrentGame.NextCard(new Card((CardFigure)serializer.CardFigure, (CardColor)serializer.CardColor, (PlayerTag)serializer.OwnerPosition));
                }
            }
            // Następna licytacja
            else if (signalName == LobbySignalGameStartedNextBiddingSerializer.SIGNAL_GAME_STARTED_NEXT_BIDDING)
            {
                var serializer = new LobbySignalGameStartedNextBiddingSerializer(signalData);

                Game.ClearPlayerHands();
                MyCards.Clear();
                if (GrandpaCards != null)
                {
                    GrandpaCards.Clear();
                }
                GrandpaCards       = null;
                SendGetHandRequest = true;

                if (Game.GameState != GameState.BIDDING)
                {
                    Game.GameState = GameState.BIDDING;
                    Game.StartBidding();
                }
            }
            else if (signalName == LobbySignalGameFinishedSerializer.SIGNAL_GAME_FINISHED)
            {
                var serializer = new LobbySignalGameFinishedSerializer(signalData);

                Game.ClearPlayerHands();
                if (MyCards != null)
                {
                    MyCards.Clear();
                }
                if (GrandpaCards != null)
                {
                    GrandpaCards.Clear();
                }
                GrandpaCards = null;

                Game.GameState = GameState.GAME_FINISHED;
            }
        }