/** * Parse through the JSON string received from the server and translate into GameModelJSON object * * @param json String received from the server API * @return The now parsed GameModelJSON object. * @throws GeneralPlayerException * @throws InvalidTurnStatusException * @throws TurnIndexException */ private CatanModel _deserialize(String json) throws TurnIndexException, InvalidTurnStatusException, GeneralPlayerException { JsonElement jelement = new JsonParser().parse(json); JsonObject jobject = jelement.getAsJsonObject(); JsonObject deck = jobject.getAsJsonObject("deck"); JsonObject bank = jobject.getAsJsonObject("bank"); JsonObject chat = jobject.getAsJsonObject("chat"); JsonObject log = jobject.getAsJsonObject("log"); JsonObject map = jobject.getAsJsonObject("map"); JsonArray players = jobject.getAsJsonArray("players"); JsonObject tradeOffer = jobject.getAsJsonObject("tradeOffer"); JsonObject turnTracker = jobject.getAsJsonObject("turnTracker"); int version = jobject.getAsJsonPrimitive("version").getAsInt(); int winner = jobject.getAsJsonPrimitive("winner").getAsInt(); SetResourceManager(bank, players, tradeOffer); SetDevCardManager(players, deck); SetPlayerManager(players, turnTracker); SetMapManager(map); SetChatManager(chat, log); SetTurnManager(turnTracker); return catanModel = new CatanModel( resourceManager, devCardManager, playerManager, mapManager, chatManager, version); }
private void SetChatManager(JsonObject chat, JsonObject log) { List<Line> chatMessages = new ArrayList<Line>(); List<Line> gameHistory = new ArrayList<Line>(); // Get chat info { JsonArray lines = chat.getAsJsonArray("lines"); for (int i = 0; i < lines.size(); i++) { JsonObject line = lines.get(i).getAsJsonObject(); String message = line.getAsJsonPrimitive("message").getAsString(); String source = line.getAsJsonPrimitive("source").getAsString(); Line l = new Line(message, source); chatMessages.add(l); } } // Get log info { JsonArray lines = log.getAsJsonArray("lines"); for (int i = 0; i < lines.size(); i++) { JsonObject line = lines.get(i).getAsJsonObject(); String message = line.getAsJsonPrimitive("message").getAsString(); String source = line.getAsJsonPrimitive("source").getAsString(); Line l = new Line(message, source); gameHistory.add(l); } } this.chatManager = new ChatManager(chatMessages, gameHistory); }
private void SetTurnManager(JsonObject turnTracker) throws TurnIndexException, InvalidTurnStatusException, GeneralPlayerException { int currentTurn = turnTracker.getAsJsonPrimitive("currentTurn").getAsInt(); String status = turnTracker.getAsJsonPrimitive("status").getAsString(); PlayerTurnTracker playerTurnTracker = new PlayerTurnTracker(currentTurn, TurnType.toEnum(status)); playerManager.setTurnTracker(playerTurnTracker); }
private void SetPlayerManager(JsonArray players, JsonObject turnTracker) { Player[] catanPlayers = new Player[players.size()]; int longestRoad = turnTracker.getAsJsonPrimitive("longestRoad").getAsInt(); int largestArmy = turnTracker.getAsJsonPrimitive("largestArmy").getAsInt(); for (int i = 0; i < players.size(); i++) { if (!players.get(i).isJsonNull()) { JsonObject player = players.get(i).getAsJsonObject(); int index = player.getAsJsonPrimitive("playerIndex").getAsInt(); String name = player.getAsJsonPrimitive("name").getAsString(); String color = player.getAsJsonPrimitive("color").getAsString(); int playerId = player.getAsJsonPrimitive("playerID").getAsInt(); int cities = player.getAsJsonPrimitive("cities").getAsInt(); int settlements = player.getAsJsonPrimitive("settlements").getAsInt(); int roads = player.getAsJsonPrimitive("roads").getAsInt(); int victoryPoints = player.getAsJsonPrimitive("victoryPoints").getAsInt(); Player newPlayer = new Player(); newPlayer.setPoints(victoryPoints); try { newPlayer.setColor(color); } catch (InvalidColorException e) { e.printStackTrace(); } if (longestRoad == index) { newPlayer.setLongestRoad(true); } if (largestArmy == index) { newPlayer.setLargestArmy(true); } newPlayer.setId(playerId); newPlayer.setCitiesRemaining(cities); newPlayer.setSettlementsRemaining(settlements); newPlayer.setRoadsRemaining(roads); newPlayer.setPlayerIndex(index); newPlayer.setName(name); // <========Construct part of player manager here============> catanPlayers[index] = newPlayer; } } // <========Construct player manager here============> PlayerManager newPlayerManager = new PlayerManager(); newPlayerManager.setCatanPlayers(catanPlayers); newPlayerManager.setIndexOfLargestArmy(largestArmy); newPlayerManager.setIndexOfLongestRoad(longestRoad); this.playerManager = newPlayerManager; }
@Override public SageInteract deserialize( JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject jsonObject = json.getAsJsonObject(); JsonElement control = jsonObject.get(KEY_CONTROLS); varNames = new ArrayList<String>(); controls = new ArrayList<InteractControl>(); // Here we modify the model slightly and add the varName indirectly to our InteractControl // by obtaining it from the list of keys from the JSON and passing the // This way, we can continue to use Gson for the normal deserialization of // our InteractControl class // Get all the possible keys for InteractControl Log.i(TAG, "Got Control" + control.toString()); Log.i(TAG, "No. of controls " + control.getAsJsonObject().entrySet().size()); // Iterate through keys and deserialize for (Map.Entry<String, JsonElement> keys : control.getAsJsonObject().entrySet()) { varNames.add(keys.getKey()); Log.i(TAG, "Got Key: " + keys.getKey()); InteractControl interactControl = context.deserialize(keys.getValue(), InteractControl.class); Log.i(TAG, "Deserializing: " + interactControl.toString()); interactControl.setVarName(keys.getKey()); controls.add(interactControl); } // TODO Find way to add the omitted data final SageInteract interact = new SageInteract(); interact.setControls(controls); interact.setNewInteractID(jsonObject.getAsJsonPrimitive(KEY_NEW_INTERACT_ID).getAsString()); return interact; }
private static <T> Optional<T> readFromJson(JsonObject json, String name, JsonGetter<T> mapper) { return Optional.ofNullable(json.getAsJsonPrimitive(name)) .flatMap(jsonPrimitive -> Optional.of(mapper.extract(jsonPrimitive))); }
private void SetResourceManager(JsonObject bank, JsonArray players, JsonObject tradeOffer) { ResourceList bankResources; ResourceList[] playerResources = new ResourceList[4]; boolean[] hasPlayerDiscarded = new boolean[4]; TradeOffer tradeResourcesOffer = null; // Get bank resources { int brick = bank.getAsJsonPrimitive("brick").getAsInt(); int ore = bank.getAsJsonPrimitive("ore").getAsInt(); int sheep = bank.getAsJsonPrimitive("sheep").getAsInt(); int wheat = bank.getAsJsonPrimitive("wheat").getAsInt(); int wood = bank.getAsJsonPrimitive("wood").getAsInt(); bankResources = new ResourceList(brick, ore, sheep, wheat, wood); } // Get player resources for (int i = 0; i < players.size(); i++) { if (!players.get(i).isJsonNull()) { JsonObject player = players.get(i).getAsJsonObject(); JsonObject resource = player.getAsJsonObject("resources"); int index = player.getAsJsonPrimitive("playerIndex").getAsInt(); boolean discarded = player.getAsJsonPrimitive("discarded").getAsBoolean(); hasPlayerDiscarded[i] = discarded; ResourceList resources; int brick = resource.getAsJsonPrimitive("brick").getAsInt(); int ore = resource.getAsJsonPrimitive("ore").getAsInt(); int sheep = resource.getAsJsonPrimitive("sheep").getAsInt(); int wheat = resource.getAsJsonPrimitive("wheat").getAsInt(); int wood = resource.getAsJsonPrimitive("wood").getAsInt(); resources = new ResourceList(brick, ore, sheep, wheat, wood); playerResources[index] = resources; } } if (tradeOffer != null) // This is null if there is no current trade offers { int sender = tradeOffer.getAsJsonPrimitive("sender").getAsInt(); int receiver = tradeOffer.getAsJsonPrimitive("receiver").getAsInt(); ResourceList resourcesOffer; JsonObject offer = tradeOffer.getAsJsonObject("offer"); { int brick = offer.getAsJsonPrimitive("brick").getAsInt(); int ore = offer.getAsJsonPrimitive("ore").getAsInt(); int sheep = offer.getAsJsonPrimitive("sheep").getAsInt(); int wheat = offer.getAsJsonPrimitive("wheat").getAsInt(); int wood = offer.getAsJsonPrimitive("wood").getAsInt(); resourcesOffer = new ResourceList(brick, ore, sheep, wheat, wood); } tradeResourcesOffer = new TradeOffer(resourcesOffer, sender, receiver); } this.resourceManager = new ResourceManager( playerResources, bankResources, tradeResourcesOffer, hasPlayerDiscarded); }
private void SetMapManager(JsonObject map) { JsonArray hexes = map.getAsJsonArray("hexes"); JsonArray ports = map.getAsJsonArray("ports"); JsonArray roads = map.getAsJsonArray("roads"); JsonArray settlements = map.getAsJsonArray("settlements"); JsonArray cities = map.getAsJsonArray("cities"); JsonObject robber = map.getAsJsonObject("robber"); int radius = map.getAsJsonPrimitive("radius").getAsInt(); // Return data structures HashMap<HexLocation, Hex> hexes_r = new HashMap<>(); HashMap<VertexLocation, Settlement> settlements_r = new HashMap<VertexLocation, Settlement>(); HashMap<EdgeLocation, Port> ports_r = new HashMap<EdgeLocation, Port>(); HashMap<EdgeLocation, Road> roads_r = new HashMap<EdgeLocation, Road>(); // Get Hex info for (int i = 0; i < hexes.size(); i++) { JsonObject hex = hexes.get(i).getAsJsonObject(); JsonObject location = hex.getAsJsonObject("location"); String resource = "DESERT"; int number = 0; int x = location.getAsJsonPrimitive("x").getAsInt(); int y = location.getAsJsonPrimitive("y").getAsInt(); // if hex doesn't have resource and number it is desert hex if (hex.has("resource") && hex.has("number")) { resource = hex.getAsJsonPrimitive("resource").getAsString(); number = hex.getAsJsonPrimitive("number").getAsInt(); } // compile into Map structure Hex entry = new Hex(x, y, resource.toUpperCase(), number); hexes_r.put(entry.location, entry); } // Get Port info for (int i = 0; i < ports.size(); i++) { JsonObject port = ports.get(i).getAsJsonObject(); JsonObject location = port.getAsJsonObject("location"); String resource = "THREE"; int x = location.getAsJsonPrimitive("x").getAsInt(); int y = location.getAsJsonPrimitive("y").getAsInt(); // if port doesn't have resource than it is 3:1 and those are for any resource if (port.has("resource")) resource = port.getAsJsonPrimitive("resource").getAsString(); String direction = port.getAsJsonPrimitive("direction").getAsString(); int ratio = port.getAsJsonPrimitive("ratio").getAsInt(); // compile into Map structure HexLocation hexLocation = new HexLocation(x, y); EdgeLocation edgeLocation = new EdgeLocation(hexLocation, EdgeDirection.valueOf(Direction.shortToLong(direction))); // edgeLocation = edgeLocation.getNormalizedLocation(); Port entry = new Port(edgeLocation, PortType.valueOf(resource.toUpperCase()), ratio); ports_r.put(entry.location, entry); } // Get road info for (int i = 0; i < roads.size(); i++) { JsonObject road = roads.get(i).getAsJsonObject(); JsonObject location = road.getAsJsonObject("location"); int x = location.getAsJsonPrimitive("x").getAsInt(); int y = location.getAsJsonPrimitive("y").getAsInt(); int owner = road.getAsJsonPrimitive("owner").getAsInt(); String direction = location.getAsJsonPrimitive("direction").getAsString(); // compile into Map structure HexLocation hexLocation = new HexLocation(x, y); EdgeLocation edgeLocation = new EdgeLocation(hexLocation, EdgeDirection.valueOf(Direction.shortToLong(direction))); edgeLocation = edgeLocation.getNormalizedLocation(); Road entry = new Road(edgeLocation, owner); roads_r.put(entry.location, entry); } // Get settlement info for (int i = 0; i < settlements.size(); i++) { JsonObject settlement = settlements.get(i).getAsJsonObject(); JsonObject location = settlement.getAsJsonObject("location"); int x = location.getAsJsonPrimitive("x").getAsInt(); int y = location.getAsJsonPrimitive("y").getAsInt(); int owner = settlement.getAsJsonPrimitive("owner").getAsInt(); String direction = location.getAsJsonPrimitive("direction").getAsString(); // compile into Map structure HexLocation hexLocation = new HexLocation(x, y); VertexLocation vertexLocation = new VertexLocation( hexLocation, VertexDirection.valueOf(Direction.shortToLong(direction))); vertexLocation = vertexLocation.getNormalizedLocation(); Settlement entry = new Settlement(vertexLocation, owner); settlements_r.put(entry.location, entry); } // Get city info for (int i = 0; i < cities.size(); i++) { JsonObject city = cities.get(i).getAsJsonObject(); JsonObject location = city.getAsJsonObject("location"); int x = location.getAsJsonPrimitive("x").getAsInt(); int y = location.getAsJsonPrimitive("y").getAsInt(); int owner = city.getAsJsonPrimitive("owner").getAsInt(); String direction = location.getAsJsonPrimitive("direction").getAsString(); // compile into Map structure HexLocation hexLocation = new HexLocation(x, y); VertexLocation vertexLocation = new VertexLocation( hexLocation, VertexDirection.valueOf(Direction.shortToLong(direction))); vertexLocation = vertexLocation.getNormalizedLocation(); Settlement entry = new Settlement(vertexLocation, owner); entry.makeCity(); settlements_r.put(entry.location, entry); } int x = robber.getAsJsonPrimitive("x").getAsInt(); int y = robber.getAsJsonPrimitive("y").getAsInt(); this.mapManager = new MapManager(hexes_r, settlements_r, ports_r, roads_r, new HexLocation(x, y), radius); }
private void SetDevCardManager(JsonArray players, JsonObject deck) { PlayerDevCards newPlayerDevCards = new PlayerDevCards(); PlayerDevCards oldPlayerDevCards = new PlayerDevCards(); PlayerDevCards playedDevCards = new PlayerDevCards(); boolean[] hasPlayedDevCardsList = new boolean[4]; DevCardList devCardStack = new DevCardList(); int monopolyCount = deck.getAsJsonPrimitive("monopoly").getAsInt(); int monumentCount = deck.getAsJsonPrimitive("monument").getAsInt(); int roadBuilderCount = deck.getAsJsonPrimitive("roadBuilding").getAsInt(); int soldierCount = deck.getAsJsonPrimitive("soldier").getAsInt(); int yearOfPlentyCount = deck.getAsJsonPrimitive("yearOfPlenty").getAsInt(); devCardStack.setMonopoly(monopolyCount); devCardStack.setMonument(monumentCount); devCardStack.setRoadBuilder(roadBuilderCount); devCardStack.setSoldier(soldierCount); devCardStack.setYearOfPlenty(yearOfPlentyCount); for (int i = 0; i < players.size(); i++) { if (!players.get(i).isJsonNull()) { JsonObject player = players.get(i).getAsJsonObject(); int index = player.getAsJsonPrimitive("playerIndex").getAsInt(); JsonObject newDevCards = player.getAsJsonObject("newDevCards"); JsonObject oldDevCards = player.getAsJsonObject("oldDevCards"); // New Dev Cards { int monopoly = newDevCards.getAsJsonPrimitive("monopoly").getAsInt(); int monument = newDevCards.getAsJsonPrimitive("monument").getAsInt(); int roadBuilding = newDevCards.getAsJsonPrimitive("roadBuilding").getAsInt(); int soldier = newDevCards.getAsJsonPrimitive("soldier").getAsInt(); int yearOfPlenty = newDevCards.getAsJsonPrimitive("yearOfPlenty").getAsInt(); newPlayerDevCards.setDevCardsForPlayer( index, new DevCardList(monopoly, monument, roadBuilding, soldier, yearOfPlenty)); } // Old Dev Cards { int monopoly = oldDevCards.getAsJsonPrimitive("monopoly").getAsInt(); int monument = oldDevCards.getAsJsonPrimitive("monument").getAsInt(); int roadBuilding = oldDevCards.getAsJsonPrimitive("roadBuilding").getAsInt(); int soldier = oldDevCards.getAsJsonPrimitive("soldier").getAsInt(); int yearOfPlenty = oldDevCards.getAsJsonPrimitive("yearOfPlenty").getAsInt(); oldPlayerDevCards.setDevCardsForPlayer( index, new DevCardList(monopoly, monument, roadBuilding, soldier, yearOfPlenty)); } // Played Dev Cards { int monuments = player.getAsJsonPrimitive("monuments").getAsInt(); int soldiers = player.getAsJsonPrimitive("soldiers").getAsInt(); playedDevCards.setDevCardsForPlayer(index, new DevCardList(0, monuments, 0, soldiers, 0)); } // Has Played Dev Cards List { boolean playedDevCard = player.getAsJsonPrimitive("playedDevCard").getAsBoolean(); hasPlayedDevCardsList[index] = playedDevCard; } } } this.devCardManager = new DevCardManager( newPlayerDevCards, oldPlayerDevCards, playedDevCards, hasPlayedDevCardsList, devCardStack); }
@Override public WebSocketMessage deserialize( JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { WebSocketMessage webSocketData = new WebSocketMessage(); if (json instanceof JsonObject) { JsonObject root = json.getAsJsonObject(); JsonObject nodeData = root.getAsJsonObject("data"); JsonObject relData = root.getAsJsonObject("relData"); if (root.has("command")) { webSocketData.setCommand(root.getAsJsonPrimitive("command").getAsString()); } if (root.has("id")) { webSocketData.setId(root.getAsJsonPrimitive("id").getAsString()); } if (root.has("pageId")) { webSocketData.setPageId(root.getAsJsonPrimitive("pageId").getAsString()); } if (root.has("sessionId")) { webSocketData.setSessionId(root.getAsJsonPrimitive("sessionId").getAsString()); } if (root.has("token")) { webSocketData.setToken(root.getAsJsonPrimitive("token").getAsString()); } if (root.has("callback")) { webSocketData.setCallback(root.getAsJsonPrimitive("callback").getAsString()); } if (root.has("button")) { webSocketData.setButton(root.getAsJsonPrimitive("button").getAsString()); } if (root.has("parent")) { webSocketData.setParent(root.getAsJsonPrimitive("parent").getAsString()); } if (root.has("view")) { webSocketData.setView(root.getAsJsonPrimitive("view").getAsString()); } if (root.has("sort")) { webSocketData.setSortKey(root.getAsJsonPrimitive("sort").getAsString()); } if (root.has("order")) { webSocketData.setSortOrder(root.getAsJsonPrimitive("order").getAsString()); } if (root.has("pageSize")) { webSocketData.setPageSize(root.getAsJsonPrimitive("pageSize").getAsInt()); } if (root.has("page")) { webSocketData.setPage(root.getAsJsonPrimitive("page").getAsInt()); } if (nodeData != null) { for (Entry<String, JsonElement> entry : nodeData.entrySet()) { webSocketData.setNodeData(entry.getKey(), entry.getValue().getAsString()); } } if (relData != null) { for (Entry<String, JsonElement> entry : relData.entrySet()) { webSocketData.setRelData(entry.getKey(), entry.getValue().getAsString()); } } } return webSocketData; }