Added a possibility to reload the webserver (not accessible for the user

though) and fixed a bug that prevented the userstats.xml from delivering
up-to-date data.
This commit is contained in:
Pascal Koenig
2011-08-29 01:31:48 +02:00
parent 265989c5c4
commit b8821b9208
8 changed files with 69 additions and 76 deletions

View File

@@ -28,7 +28,7 @@ public abstract class Datasource {
* *
* @return the array list * @return the array list
*/ */
protected ArrayList<String> fetchAllPlayers(){ public ArrayList<String> fetchAllPlayers(){
File[] files = new File("world/players").listFiles(); File[] files = new File("world/players").listFiles();
ArrayList<String> result = new ArrayList<String>(); ArrayList<String> result = new ArrayList<String>();

View File

@@ -15,7 +15,6 @@
package de.sockenklaus.XmlStats.Datasource; package de.sockenklaus.XmlStats.Datasource;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.Stats;
@@ -32,16 +31,12 @@ import de.sockenklaus.XmlStats.XmlStatsRegistry;
public class UserstatsDS extends Datasource { public class UserstatsDS extends Datasource {
private Stats statsPlugin; private Stats statsPlugin;
private ArrayList<String> allPlayerNames;
private HashMap<String, PlayerStat> stats = new HashMap<String, PlayerStat>();
/** /**
* Instantiates a new stats ds. * Instantiates a new stats ds.
*/ */
public UserstatsDS() { public UserstatsDS() {
this.statsPlugin = (Stats)XmlStatsRegistry.get("stats"); this.statsPlugin = (Stats)XmlStatsRegistry.get("stats");
this.allPlayerNames = fetchAllPlayers();
this.stats = fetchPlayerStats(allPlayerNames);
} }
/** /**
@@ -62,39 +57,11 @@ public class UserstatsDS extends Datasource {
return this.statsPlugin.getDataFolder(); return this.statsPlugin.getDataFolder();
} }
/**
* Fetch all player stats.
*
* @param pPlayerNames the player names
* @return the hash map
*/
private HashMap<String, PlayerStat> fetchPlayerStats(ArrayList<String> pPlayerNames){
HashMap<String, PlayerStat> result = new HashMap<String, PlayerStat>();
for (String playerName : pPlayerNames){
PlayerStat ps = new PlayerStatSQL(playerName, statsPlugin);
ps.load();
result.put(playerName, ps);
}
return result;
}
/**
* Gets the stats.
*
* @return the stats
*/
public HashMap<String, PlayerStat> getStats(){
return this.stats;
}
public HashMap<String, HashMap<String, Integer>> getAddedStats(){ public HashMap<String, HashMap<String, Integer>> getAddedStats(){
HashMap <String, HashMap<String, Integer>> result = new HashMap<String, HashMap<String, Integer>>(); HashMap <String, HashMap<String, Integer>> result = new HashMap<String, HashMap<String, Integer>>();
for(String playerName : this.stats.keySet()){ for(String playerName : this.fetchAllPlayers()){
PlayerStat player = this.stats.get(playerName); PlayerStat player = this.getPlayerStat(playerName);
for(String catName : player.getCats()){ for(String catName : player.getCats()){
Category cat = player.get(catName); Category cat = player.get(catName);
@@ -129,8 +96,12 @@ public class UserstatsDS extends Datasource {
return result; return result;
} }
public void sortStats(){ public PlayerStat getPlayerStat(String playerName){
PlayerStat result = new PlayerStatSQL(playerName, this.statsPlugin);
result.load();
return result;
} }
} }

View File

@@ -42,7 +42,6 @@ public class Settings {
else { else {
conf.setProperty("options.webserver-enabled", false); conf.setProperty("options.webserver-enabled", false);
conf.setProperty("options.webserver-port", 9123); conf.setProperty("options.webserver-port", 9123);
conf.setProperty("options.gzip-enabled", false);
conf.setProperty("options.verbose-enabled", false); conf.setProperty("options.verbose-enabled", false);
conf.save(); conf.save();
} }
@@ -93,7 +92,7 @@ public class Settings {
* *
* @return the settings filename * @return the settings filename
*/ */
public String getSettingsFilename(){ protected String getSettingsFilename(){
return configFilename; return configFilename;
} }

View File

@@ -37,13 +37,51 @@ public class Webserver {
* @param port the port * @param port the port
* @throws IOException Signals that an I/O exception has occurred. * @throws IOException Signals that an I/O exception has occurred.
*/ */
public Webserver(int port) throws IOException { public Webserver() throws IOException {
Settings settingsTemp = (Settings)XmlStatsRegistry.get("settings");
this.start(settingsTemp.getInt("options.webserver-port"));
}
/**
* Stop server.
*/
public void stop() {
server.stop(0);
this.server = null;
}
/**
* Server running.
*
* @return true, if successful
*/
public boolean isRunning(){
return (this.server == null) ? false : true;
}
public void reload() throws IOException {
this.stop();
Settings settingsTemp = (Settings)XmlStatsRegistry.get("settings");
this.start(settingsTemp.getInt("options.webserver-port"));
}
private void start(int port) throws IOException {
this.address = null;
this.server = null;
this.address = new InetSocketAddress(port); this.address = new InetSocketAddress(port);
server = HttpServer.create(address, 0); this.server = HttpServer.create(this.address, 0);
server.createContext("/users.xml", new XmlWorkerUsers()); this.server.createContext("/users.xml", new XmlWorkerUsers());
server.createContext("/userstats.xml", new XmlWorkerUserstats());
if(XmlStats.isStatsHooked()){
server.createContext("/userstats.xml", new XmlWorkerUserstats());
XmlStats.LogInfo("Stats seems to be loaded correctly. Enabling /userstats.xml");
}
if (XmlStats.isiConomyHooked()){ if (XmlStats.isiConomyHooked()){
server.createContext("/money.xml", new XmlWorkerMoney()); server.createContext("/money.xml", new XmlWorkerMoney());
@@ -55,20 +93,4 @@ public class Webserver {
this.server.start(); this.server.start();
} }
/**
* Stop server.
*/
public void stopServer() {
server.stop(0);
}
/**
* Server running.
*
* @return true, if successful
*/
public boolean isRunning(){
return (this.server == null) ? false : true;
}
} }

View File

@@ -17,11 +17,8 @@ package de.sockenklaus.XmlStats;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.bukkit.Server;
import org.bukkit.event.Event.Priority; import org.bukkit.event.Event.Priority;
import org.bukkit.event.Event.Type; import org.bukkit.event.Event.Type;
import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@@ -49,7 +46,7 @@ public class XmlStats extends JavaPlugin {
if(this.enabled && webserverTemp.isRunning()){ if(this.enabled && webserverTemp.isRunning()){
this.enabled = false; this.enabled = false;
webserverTemp.stopServer(); webserverTemp.stop();
getServer().getScheduler().cancelTasks(this); getServer().getScheduler().cancelTasks(this);
@@ -77,10 +74,13 @@ public class XmlStats extends JavaPlugin {
LogDebug("options.verbose-enabled: "+settingsTemp.getBoolean("options.verbose-enabled")); LogDebug("options.verbose-enabled: "+settingsTemp.getBoolean("options.verbose-enabled"));
this.hookPlugins(); this.hookPlugins();
this.registerEvents();
if (settingsTemp.getBoolean("options.webserver-enabled")){ if (settingsTemp.getBoolean("options.webserver-enabled")){
try { try {
XmlStatsRegistry.put("webserver", new Webserver(settingsTemp.getInt("options.webserver-port"))); XmlStatsRegistry.put("webserver", new Webserver());
this.enabled = true; this.enabled = true;
LogInfo("Plugin Enabled"); LogInfo("Plugin Enabled");
@@ -172,4 +172,11 @@ public class XmlStats extends JavaPlugin {
} }
return false; return false;
} }
private void registerEvents(){
XmlStatsServerListener listener = new XmlStatsServerListener(this);
getServer().getPluginManager().registerEvent(Type.PLUGIN_ENABLE, listener, Priority.Monitor, this);
getServer().getPluginManager().registerEvent(Type.PLUGIN_DISABLE, listener, Priority.Monitor, this);
}
} }

View File

@@ -6,7 +6,6 @@ package de.sockenklaus.XmlStats;
import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.event.server.ServerListener; import org.bukkit.event.server.ServerListener;
import org.bukkit.plugin.Plugin;
import com.iConomy.iConomy; import com.iConomy.iConomy;
import com.nidefawl.Stats.Stats; import com.nidefawl.Stats.Stats;

View File

@@ -30,9 +30,7 @@ import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpExchange;
import de.sockenklaus.XmlStats.Settings;
import de.sockenklaus.XmlStats.XmlStats; import de.sockenklaus.XmlStats.XmlStats;
import de.sockenklaus.XmlStats.XmlStatsRegistry;
// TODO: Auto-generated Javadoc // TODO: Auto-generated Javadoc
/** /**
@@ -48,7 +46,6 @@ public abstract class XmlWorker implements HttpHandler {
Map<String, List<String>> parameters = new HashMap<String, List<String>>(); Map<String, List<String>> parameters = new HashMap<String, List<String>>();
Headers headers = exchange.getRequestHeaders(); Headers headers = exchange.getRequestHeaders();
Settings settingsTemp = (Settings)XmlStatsRegistry.get("settings");
if("get".equalsIgnoreCase(exchange.getRequestMethod())){ if("get".equalsIgnoreCase(exchange.getRequestMethod())){
String queryString = exchange.getRequestURI().getRawQuery(); String queryString = exchange.getRequestURI().getRawQuery();
@@ -109,7 +106,7 @@ public abstract class XmlWorker implements HttpHandler {
* @return the map * @return the map
* @throws UnsupportedEncodingException the unsupported encoding exception * @throws UnsupportedEncodingException the unsupported encoding exception
*/ */
public Map<String, List<String>> parseParameters(String queryString) throws UnsupportedEncodingException { private Map<String, List<String>> parseParameters(String queryString) throws UnsupportedEncodingException {
Map<String, List<String>> result = new HashMap<String, List<String>>(); Map<String, List<String>> result = new HashMap<String, List<String>>();
if (queryString != null){ if (queryString != null){

View File

@@ -59,8 +59,6 @@ public class XmlWorkerUserstats extends XmlWorker {
resolveCats = new String[]{"blockdestroy", "blockcreate", "itemdrop", "itempickup"}; resolveCats = new String[]{"blockdestroy", "blockcreate", "itemdrop", "itempickup"};
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map) * @see de.sockenklaus.XmlStats.XmlWorkers.XmlWorker#getXML(java.util.Map)
*/ */
@@ -84,12 +82,12 @@ public class XmlWorkerUserstats extends XmlWorker {
if (!parameters.containsKey("player")){ if (!parameters.containsKey("player")){
// Generate a summarized XML // Generate a summarized XML
root.appendChild(getAddedUpStats(doc)); root.appendChild(getAddedUpStatsElement(doc));
} }
else { else {
// Generate the XML for the given user(s) // Generate the XML for the given user(s)
for(String playerName : statsDS.getStats().keySet()){ for(String playerName : statsDS.fetchAllPlayers()){
if (parameters.containsKey("player") && parameters.get("player").contains(playerName)){ if (parameters.containsKey("player") && parameters.get("player").contains(playerName)){
root.appendChild(getPlayerElement(playerName, doc)); root.appendChild(getPlayerElement(playerName, doc));
} }
@@ -120,7 +118,7 @@ public class XmlWorkerUserstats extends XmlWorker {
* @return Returns a XML subtree for the given playerName. * @return Returns a XML subtree for the given playerName.
*/ */
private Element getPlayerElement(String playerName, Document doc){ private Element getPlayerElement(String playerName, Document doc){
PlayerStat player_stats = statsDS.getStats().get(playerName); PlayerStat player_stats = statsDS.getPlayerStat(playerName);
Element elem_player = doc.createElement("player"); Element elem_player = doc.createElement("player");
elem_player.setAttribute("name", playerName); elem_player.setAttribute("name", playerName);
@@ -150,7 +148,7 @@ public class XmlWorkerUserstats extends XmlWorker {
return elem_player; return elem_player;
} }
private Element getAddedUpStats(Document doc){ private Element getAddedUpStatsElement(Document doc){
HashMap<String, HashMap<String, Integer>> addedStats = statsDS.getAddedStats(); HashMap<String, HashMap<String, Integer>> addedStats = statsDS.getAddedStats();
Element elem_player = doc.createElement("player"); Element elem_player = doc.createElement("player");