--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/web/StatusListener.java 2011/12/21 11:05:51 1665 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/web/StatusListener.java 2012/02/27 14:54:56 1695 @@ -5,23 +5,38 @@ import java.util.Date; import java.util.Set; import java.util.Map; +import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.configuration.Configuration; -import org.kokakiwi.apicraft.events.ApiEvent; -import org.kokakiwi.apicraft.events.ApiListener; +/*import org.kokakiwi.apicraft.events.ApiEvent; +import org.kokakiwi.apicraft.events.ApiListener;*/ +import de.codeinfection.quickwango.ApiBukkit.ApiBukkit; +import de.codeinfection.quickwango.ApiBukkit.ApiServer.*; -public class StatusListener extends ApiListener { + +@Controller( name = "webstatus", authenticate = false ) +public class StatusListener extends ApiController { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Server server; - public StatusListener(Server server) { - this.server = server; + Configuration loginConfig; + Configuration homeConfig; + + long cachedTime = 0; + String cachedXml = ""; + + public StatusListener(Plugin plugin, Server server, Configuration loginConfig, Configuration homeConfig) { + super(plugin); + + this.server = server; + this.loginConfig = loginConfig; + this.homeConfig = homeConfig; } String formatTime(String input) { @@ -33,71 +48,114 @@ } @Override - public void onApiEvent(ApiEvent event) { - if(event.path[0].equalsIgnoreCase("webstatus")) { - StringBuilder sb = new StringBuilder(); + public void defaultAction(String action, ApiRequest request, ApiResponse response) { +/* if(!event.path[0].equalsIgnoreCase("webstatus")) { + return; + }*/ + + String xml; + + synchronized(this) { //is this necessary ? + long now = System.currentTimeMillis(); + if ( (now-cachedTime) > 5000) { + xml = buildXML(); + cachedXml = xml; + cachedTime = now; + } else { + xml = cachedXml; + } + } - //out.writeBytes("Server: " + server.getServerName() + "\n"); - sb.append("Version: " + server.getVersion() + "\n"); - long mb = 1024*1024; - Runtime rt = Runtime.getRuntime(); - sb.append("VM Memory, free: " + rt.freeMemory()/mb + ", total:" + rt.totalMemory()/mb + ", max:" + rt.maxMemory()/mb + "\n\n"); - - sb.append("--- Online players ---\n"); - for (Player p : server.getOnlinePlayers()) { +/* event.setResponse(xml); + event.setActionTaken(true);*/ - sb.append( p.getName() + "\n" ); - } - sb.append("\n"); + response.setContent( xml); + } + + private String buildXML() { - sb.append("--- Last seen players/offline ---\n"); -/* - File configFile = new File("./plugins/LastSeen/times.yml"); - if (configFile.exists() ) { - - YamlConfiguration config = new YamlConfiguration(); - try { - config.load(configFile); - } catch (Exception e) { - event.setResponse(e.toString() ); - event.setActionTaken(true); - return; - } - - Set keys = config.getKeys(false); - if (keys != null) { - for (String key : keys) { - if (server.getPlayer(key) != null) // player is online - continue; - - String last = config.getString( key + ".logout"); - sb.append("" + key + ": " + formatTime(last) + "\n") ; - } - } else { - sb.append("no players found\n"); - } - } else { - sb.append("could not find LastSeen/times.yml\n"); + StringBuilder sb = new StringBuilder(); + + sb.append(" \n"); + sb.append(""); + + sb.append("" + server.getVersion() + "\n"); + + long mb = 1024*1024; + Runtime rt = Runtime.getRuntime(); + sb.append("\n"); + sb.append("" + rt.freeMemory()/mb + "\n"); + sb.append("" + rt.totalMemory()/mb + "\n"); + sb.append("" + rt.maxMemory()/mb + "\n"); + sb.append("\n"); + + + long now = System.currentTimeMillis(); + + sb.append("\n"); + OfflinePlayer playerList[] = server.getOfflinePlayers(); + for (OfflinePlayer player : playerList) { + long first = player.getFirstPlayed(); + long last = player.getLastPlayed(); + + + sb.append("\n"); + sb.append("" + player.getName() + "\n" ); + + sb.append("" + formatTime(first) + "\n"); + sb.append("" + formatTime(last) + "\n"); + + sb.append("" + (player.isOnline() ? 1 : 0 ) + "\n" ); + + if (player.isOnline() ) { + long login = loginConfig.getLong( player.getName() + ".logintime", -1); + long elapsed = (login>-1 ? (now-login) / 1000 : -1); + + Player p2 = server.getPlayer( player.getName() ); + Location loc = p2.getLocation(); + + sb.append("" + elapsed + "\n" ); + sb.append("" + p2.getAddress().getAddress().toString().replace("/","") + "\n" ); + sb.append(""); + sb.append("" + loc.getBlockX() + ""); + sb.append("" + loc.getBlockY() + ""); + sb.append("" + loc.getBlockZ() + ""); + sb.append("" + loc.getWorld().getName() + ""); + sb.append(""); } - sb.append("\n");*/ - OfflinePlayer playerList[] = server.getOfflinePlayers(); - for (OfflinePlayer player : playerList) { - //long first = p.getFirstPlayed(); - long last = player.getLastPlayed(); - sb.append(player.getName() + ": " + formatTime(last) + "\n"); + String homeWorld = homeConfig.getString( player.getName() + ".world"); + if (homeWorld != null) { + sb.append(""); + sb.append("" + homeWorld + "\n"); + sb.append("" + (int)homeConfig.getDouble(player.getName() + ".x") + "\n"); + sb.append("" + (int)homeConfig.getDouble(player.getName() + ".y") + "\n"); + sb.append("" + (int)homeConfig.getDouble(player.getName() + ".z") + "\n"); + sb.append(""); + } + + sb.append("\n"); + } + sb.append("\n"); - sb.append("--- Plugins ---\n"); - for (Plugin plugin : server.getPluginManager().getPlugins()) { - sb.append( plugin.getDescription().getName() + " " + plugin.getDescription().getVersion() + "\n"); - } - - event.setResponse(sb.toString()); - event.setActionTaken(true); + sb.append("\n"); + for (Plugin plugin : server.getPluginManager().getPlugins()) { + + sb.append("\n"); + sb.append("" + plugin.getDescription().getName() + "\n"); + sb.append("" + plugin.getDescription().getVersion() + "\n"); + sb.append("" + (plugin.getDescription().getWebsite() != null ? plugin.getDescription().getWebsite() : "") + "\n"); + sb.append("\n"); } + sb.append("\n"); + + sb.append(""); + + return sb.toString(); + } }