/** * Copyright (C) 2002-2012 The FreeCol Team * * This file is part of FreeCol. * * FreeCol is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * FreeCol is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FreeCol. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.freecol.common; import net.sf.freecol.FreeCol; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * Contains information about a single server. * This information is normally retrived from * a meta-server. * * @see net.sf.freecol.metaserver */ public class ServerInfo { private String name; private String address; private int port; private int currentlyPlaying; private int slotsAvailable; private boolean isGameStarted; private String version; private int gameState; /** * Empty constructor that can be used by subclasses. */ protected ServerInfo() { } /** * Creates a new object with the given information. * * @param name The name of the server. * @param address The IP-address of the server. * @param port The port number in which clients may connect. * @param slotsAvailable Number of players that may conncet. * @param currentlyPlaying Number of players that are currently connected. * @param isGameStarted <i>true</i> if the game has started. * @param version The version of the server. * @param gameState The current state of the game. */ public ServerInfo(String name, String address, int port, int slotsAvailable, int currentlyPlaying, boolean isGameStarted, String version, int gameState) { update(name, address, port, slotsAvailable, currentlyPlaying, isGameStarted, version, gameState); } /** * Creates an object from the given <code>Element</code>. * @param element The XML DOM Element containing the information that will be * used for the new object. */ public ServerInfo(Element element) { readFromXMLElement(element); } /** * Updates the object with the given information. * * @param name The name of the server. * @param address The IP-address of the server. * @param port The port number in which clients may connect. * @param slotsAvailable Number of players that may conncet. * @param currentlyPlaying Number of players that are currently connected. * @param isGameStarted <i>true</i> if the game has started. * @param version The version of the server. * @param gameState The current state of the game. */ public void update(String name, String address, int port, int slotsAvailable, int currentlyPlaying, boolean isGameStarted, String version, int gameState) { this.name = name; this.address = address; this.port = port; this.slotsAvailable = slotsAvailable; this.currentlyPlaying = currentlyPlaying; this.isGameStarted = isGameStarted; this.version = version; this.gameState = gameState; } /** * Returns the name of the server that is beeing represented * by this object. * * @return The name. */ public String getName() { return name; } /** * Returns the IP-address. * @return The IP-address of the server. */ public String getAddress() { return address; } /** * Returns the port in which clients may connect. * @return The port. */ public int getPort() { return port; } /** * Returns the number of currently active (connected and not dead) players. * @return The number of players. */ public int getCurrentlyPlaying() { return currentlyPlaying; } /** * Returns the number of players that may connect. * @return The number of slots available on the server. */ public int getSlotsAvailable() { return slotsAvailable; } /** * Returns the FreeCol version of the server. * * @return The version. * @see FreeCol#getVersion */ public String getVersion() { return version; } /** * Gets the current state of the game. * * @return The current state of the game. * @see net.sf.freecol.server.FreeColServer#getGameState */ public int getGameState() { return gameState; } /** * Creates an XML-representation of this object. * @param document The document in which the element should be created. * @return The XML DOM Element representing this object. */ public Element toXMLElement(Document document) { Element element = document.createElement(getXMLElementTagName()); element.setAttribute("name", name); element.setAttribute("address", address); element.setAttribute("port", Integer.toString(port)); element.setAttribute("slotsAvailable", Integer.toString(slotsAvailable)); element.setAttribute("currentlyPlaying", Integer.toString(currentlyPlaying)); element.setAttribute("isGameStarted", Boolean.toString(isGameStarted)); element.setAttribute("version", version); element.setAttribute("gameState", Integer.toString(gameState)); return element; } /** * Reads attributes from the given element. * @param element The XML DOM Element containing information that * should be read by this object. */ public void readFromXMLElement(Element element) { update(element.getAttribute("name"), element.getAttribute("address"), Integer.parseInt(element.getAttribute("port")), Integer.parseInt(element.getAttribute("slotsAvailable")), Integer.parseInt(element.getAttribute("currentlyPlaying")), Boolean.valueOf(element.getAttribute("slotsAvailable")).booleanValue(), element.getAttribute("version"), Integer.parseInt(element.getAttribute("gameState"))); } /** * Gets the tag name of the root element representing this object. * @return "metaItem". */ public static String getXMLElementTagName() { return "serverInfo"; } /** * Returns a <code>String</code> representation of this object for debugging purposes. */ public String toString() { return name + "(" + address + ":" + port + ") " + currentlyPlaying + ", " + slotsAvailable + ", " + isGameStarted + ", " + version + ", " + gameState; } }