/**
* 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;
}
}