示例#1
0
        public void TestHandleGameTypes(string chosenGame, params Type[] messageTypes)
        {
            // TODO: check values in messages
            // TODO: check game state afterwards (need to expose static game state info)
            string          uid = "uid";
            GameTypeMessage gt  = new GameTypeMessage()
            {
                ChosenGame = chosenGame
            };

            if (messageTypes.Length > 0)
            {
                MessagePackets messages = GamesManager.Get().HandleGameTypes(uid, gt);

                Assert.IsTrue(Utils.VerifyMessagePackets(messages, messageTypes));

                foreach (MessagePacket m in messages.Messages)
                {
                    Assert.AreEqual(m.SendTo.Count(), 1);
                    Assert.AreEqual(m.SendTo.Single(), uid);
                }
            }
            else
            {
                Assert.ThrowsException <Exception>(() => GamesManager.Get().HandleGameTypes(uid, gt));
            }
        }
示例#2
0
 /// <summary>
 /// Get messages to send in response to a GameTypeMessage
 /// </summary>
 /// <param name="uid"> The uid of the player </param>
 /// <param name="gameTypeMessage"></param>
 /// <returns> List of messages to be sent </returns>
 public MessagePackets HandleGameTypes(string uid, GameTypeMessage gameTypeMessage)
 {
     lock (this)
     {
         if (GameManagerMap.ContainsKey(gameTypeMessage.ChosenGame))
         {
             PlayerGameTypeMap.Add(uid, gameTypeMessage.ChosenGame);
             return(new MessagePackets(GetAvailableGames(gameTypeMessage.ChosenGame), uid));
         }
         else
         {
             throw new Exception(gameTypeMessage.ChosenGame + " is not a valid game. Available games are: " + string.Join(", ", GameManagerMap.Keys));
         }
     }
 }
示例#3
0
        public void TestHandleNewConnection()
        {
            string         uid      = "uid";
            MessagePackets messages = GamesManager.Get().HandleNewConnection(uid);

            Assert.IsTrue(Utils.VerifyMessagePackets(messages, typeof(GameTypeMessage)));

            Assert.AreEqual(messages.Messages[0].SendTo.Count(), 1);
            Assert.AreEqual(messages.Messages[0].SendTo.Single(), uid);

            GameTypeMessage gt = (GameTypeMessage)messages.Messages[0].Message;

            CollectionAssert.AreEqual(gt.GameTypes, new string[3] {
                "Hearts", "Mizerka", "Pinochle"
            });
            Assert.AreEqual(gt.ChosenGame, null);
        }
示例#4
0
        public IEnumerable <byte> VisitGameTypeMessage(GameTypeMessage message)
        {
            if (message.GameType.ShipLengths.Count > BspConstants.MaxShips)
            {
                throw new MessageUnparserException($"Must not have more than {BspConstants.MaxShips} ships.");
            }

            var diff = BspConstants.MaxShips - message.GameType.ShipLengths.Count;

            // Pad ship list to the required number of bytes.
            var ships = message.GameType.ShipLengths.Concat(Enumerable.Repeat((byte)0, diff));

            return(GetHeaderBytes(message.TypeId)
                   .Concat(FromByte(message.GameType.GameTypeId))
                   .Concat(FromByte(message.GameType.BoardWidth))
                   .Concat(FromByte(message.GameType.BoardHeight))
                   .Concat(ships));
        }
示例#5
0
    private void HandleMessage(string message)
    {
        try
        {
            lock (MessageTasks)
            {
                ErrorResponse errorResponse = JsonConvert.DeserializeObject <ErrorResponse>(message);
                if (errorResponse.IsValid())
                {
                    Debug.Log("ErrorResponse: " + errorResponse.ErrorMessage);
                    return;
                }

                DisconnectMessage disconnectMessage = JsonConvert.DeserializeObject <DisconnectMessage>(message);
                if (disconnectMessage.IsValid())
                {
                    HandleDisconnect(disconnectMessage);
                    return;
                }

                RestartMessage restartMessage = JsonConvert.DeserializeObject <RestartMessage>(message);
                if (restartMessage.IsValid())
                {
                    HandleRestart(restartMessage);
                    return;
                }

                GameTypeMessage gameTypeMessage = JsonConvert.DeserializeObject <GameTypeMessage>(message);
                if (gameTypeMessage.IsValid())
                {
                    ViewController.Instance.UpdateGameTypes(gameTypeMessage.GameTypes);
                    return;
                }

                JoinResponse joinResponse = JsonConvert.DeserializeObject <JoinResponse>(message);
                if (joinResponse.IsValid())
                {
                    HandleJoinResponse(joinResponse);
                    return;
                }

                AvailableGamesMessage gamesMessage = JsonConvert.DeserializeObject <AvailableGamesMessage>(message);
                if (gamesMessage.IsValid())
                {
                    ViewController.Instance.UpdateAvailableGames(gamesMessage.AvailableGames);
                    return;
                }

                JoinMessage joinMessage = JsonConvert.DeserializeObject <JoinMessage>(message);
                if (joinMessage.IsValid())
                {
                    HandleJoin(joinMessage);
                    return;
                }

                StartMessage startMessage = JsonConvert.DeserializeObject <StartMessage>(message);
                if (startMessage.IsValid())
                {
                    HandleStart(startMessage);
                    return;
                }

                BidMessage bidMessage = JsonConvert.DeserializeObject <BidMessage>(message);
                if (bidMessage.IsValid())
                {
                    HandleBid(bidMessage);
                    return;
                }

                KittyMessage kittyMessage = JsonConvert.DeserializeObject <KittyMessage>(message);
                if (kittyMessage.IsValid())
                {
                    HandleKitty(kittyMessage);
                    return;
                }

                TrumpMessage trumpMessage = JsonConvert.DeserializeObject <TrumpMessage>(message);
                if (trumpMessage.IsValid())
                {
                    HandleTrump(trumpMessage);
                    return;
                }

                MeldPointsMessage meldPointsMessage = JsonConvert.DeserializeObject <MeldPointsMessage>(message);
                if (meldPointsMessage.IsValid())
                {
                    HandleMeldPoints(meldPointsMessage);
                    return;
                }

                MeldMessage meldMessage = JsonConvert.DeserializeObject <MeldMessage>(message);
                if (meldMessage.IsValid())
                {
                    HandleMeld(meldMessage);
                    return;
                }

                PassMessage passMessage = JsonConvert.DeserializeObject <PassMessage>(message);
                if (passMessage.IsValid())
                {
                    HandlePass(passMessage);
                    return;
                }

                ScoreMessage scoreMessage = JsonConvert.DeserializeObject <ScoreMessage>(message);
                if (scoreMessage.IsValid())
                {
                    HandleScore(scoreMessage);
                    return;
                }

                TurnMessage turnMessage = JsonConvert.DeserializeObject <TurnMessage>(message);
                if (turnMessage.IsValid())
                {
                    HandleTurn(turnMessage);
                    return;
                }

                TrickMessage trickMessage = JsonConvert.DeserializeObject <TrickMessage>(message);
                if (trickMessage.IsValid())
                {
                    HandleTrick(trickMessage);
                    return;
                }

                TrickInfoMessage trickInfoMessage = JsonConvert.DeserializeObject <TrickInfoMessage>(message);
                if (trickInfoMessage.IsValid())
                {
                    HandleTrickInfo(trickInfoMessage);
                    return;
                }

                GameOverMessage gameOverMessage = JsonConvert.DeserializeObject <GameOverMessage>(message);
                if (gameOverMessage.IsValid())
                {
                    HandleGameOver(gameOverMessage);
                    return;
                }
            }
        }
        catch (Exception err)
        {
            Debug.Log("OnMessage error: " + err.Message);
            Debug.Log("OnMessage stack trace: " + err.StackTrace);
        }
    }
示例#6
0
            private MessagePackets HandleMessage(string message)
            {
                RestartMessage restartMessage = JsonConvert.DeserializeObject <RestartMessage>(message);

                if (restartMessage.IsValid())
                {
                    return(GamesManager.Get().HandleRestart(ID, restartMessage));
                }

                GameTypeMessage gameTypeMessage = JsonConvert.DeserializeObject <GameTypeMessage>(message);

                if (gameTypeMessage.IsValid())
                {
                    return(GamesManager.Get().HandleGameTypes(ID, gameTypeMessage));
                }

                JoinMessage joinMessage = JsonConvert.DeserializeObject <JoinMessage>(message);

                if (joinMessage.IsValid())
                {
                    return(GamesManager.Get().HandleJoin(ID, joinMessage));
                }

                BidMessage bidMessage = JsonConvert.DeserializeObject <BidMessage>(message);

                if (bidMessage.IsValid())
                {
                    return(GamesManager.Get().HandleBid(ID, bidMessage));
                }

                KittyMessage kittyMessage = JsonConvert.DeserializeObject <KittyMessage>(message);

                if (kittyMessage.IsValid())
                {
                    return(GamesManager.Get().HandleKitty(ID, kittyMessage));
                }

                TrumpMessage trumpMessage = JsonConvert.DeserializeObject <TrumpMessage>(message);

                if (trumpMessage.IsValid())
                {
                    return(GamesManager.Get().HandleTrump(ID, trumpMessage));
                }

                MeldMessage meldMessage = JsonConvert.DeserializeObject <MeldMessage>(message);

                if (meldMessage.IsValid())
                {
                    return(GamesManager.Get().HandleMeld(ID, meldMessage));
                }

                PassMessage passMessage = JsonConvert.DeserializeObject <PassMessage>(message);

                if (passMessage.IsValid())
                {
                    return(GamesManager.Get().HandlePass(ID, passMessage));
                }

                TurnMessage turnMessage = JsonConvert.DeserializeObject <TurnMessage>(message);

                if (turnMessage.IsValid())
                {
                    return(GamesManager.Get().HandleTurn(ID, turnMessage));
                }

                return(new MessagePackets());
            }