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)); } }
/// <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)); } } }
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); }
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)); }
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); } }
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()); }