package games.strategy.engine.framework.message; import java.io.Serializable; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import games.strategy.util.Version; /** * data from the server indicating what players are available to be * taken, and what players are being played. * This object also contains versioning info which the client should * check to ensure that it is playing the same game as the server. * (updated by veqryn to be the object that, besides game options, determines the starting setup for game. ie: who is * playing what) */ public class PlayerListing implements Serializable { // keep compatability with older versions static final long serialVersionUID = -8913538086737733980L; /** * Maps String player name -> node Name * if node name is null then the player is available to play. */ private final Map<String, String> m_playerToNodeListing; private final Map<String, Boolean> m_playersEnabledListing; private final Map<String, String> m_localPlayerTypes; // private final Map<String, String> m_remotePlayerTypes = new HashMap<String, String>(); private final Collection<String> m_playersAllowedToBeDisabled; private final Version m_gameVersion; private final String m_gameName; private final String m_gameRound; private final Map<String, Collection<String>> m_playerNamesAndAlliancesInTurnOrder; /** * Creates a new instance of PlayerListing. */ public PlayerListing(final Map<String, String> playerToNodeListing, final Map<String, Boolean> playersEnabledListing, final Map<String, String> localPlayerTypes, final Version gameVersion, final String gameName, final String gameRound, final Collection<String> playersAllowedToBeDisabled, final Map<String, Collection<String>> playerNamesAndAlliancesInTurnOrderLinkedHashMap) { m_playerToNodeListing = playerToNodeListing == null ? new HashMap<>() : new HashMap<>(playerToNodeListing); m_playersEnabledListing = playersEnabledListing == null ? new HashMap<>() : new HashMap<>(playersEnabledListing); m_localPlayerTypes = localPlayerTypes == null ? new HashMap<>() : new HashMap<>(localPlayerTypes); m_playersAllowedToBeDisabled = playersAllowedToBeDisabled == null ? new HashSet<>() : new HashSet<>(playersAllowedToBeDisabled); m_gameVersion = gameVersion; m_gameName = gameName; m_gameRound = gameRound; m_playerNamesAndAlliancesInTurnOrder = new LinkedHashMap<>(); if (playerNamesAndAlliancesInTurnOrderLinkedHashMap != null) { for (final Entry<String, Collection<String>> entry : playerNamesAndAlliancesInTurnOrderLinkedHashMap.entrySet()) { m_playerNamesAndAlliancesInTurnOrder.put(entry.getKey(), new HashSet<>(entry.getValue())); } } } public Collection<String> getPlayersAllowedToBeDisabled() { return m_playersAllowedToBeDisabled; } public Map<String, String> getPlayerToNodeListing() { return m_playerToNodeListing; } public Map<String, Boolean> getPlayersEnabledListing() { return m_playersEnabledListing; } public Map<String, Collection<String>> getPlayerNamesAndAlliancesInTurnOrderLinkedHashMap() { return m_playerNamesAndAlliancesInTurnOrder; } public String getGameName() { return m_gameName; } public Version getGameVersion() { return m_gameVersion; } @Override public String toString() { return "PlayerListingMessage:" + m_playerToNodeListing; } public Set<String> getPlayers() { return m_playerToNodeListing.keySet(); } public String getGameRound() { return m_gameRound; } public Map<String, String> getLocalPlayerTypes() { return m_localPlayerTypes; } }