From da2642e2998258ff4d2e29dbc348151ab54cd538 Mon Sep 17 00:00:00 2001 From: Pascal Koenig Date: Sun, 9 Oct 2011 14:46:05 +0200 Subject: [PATCH] Set the SaveTask schedule to async so it won't slow down the server anymore if the MySQL connection is slow. --- .build.number | 3 +++ build.xml | 2 +- src/com/nidefawl/Stats/Stats.java | 36 ++++++++++++++++++++++++++++--- 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 .build.number diff --git a/.build.number b/.build.number new file mode 100644 index 0000000..5191bae --- /dev/null +++ b/.build.number @@ -0,0 +1,3 @@ +#Build Number for ANT. Do not edit! +#Sun Oct 09 14:44:39 CEST 2011 +build.number=4 diff --git a/build.xml b/build.xml index 344d0e0..fcd0aa4 100644 --- a/build.xml +++ b/build.xml @@ -5,7 +5,7 @@ - + diff --git a/src/com/nidefawl/Stats/Stats.java b/src/com/nidefawl/Stats/Stats.java index de52dab..babd478 100644 --- a/src/com/nidefawl/Stats/Stats.java +++ b/src/com/nidefawl/Stats/Stats.java @@ -41,7 +41,7 @@ import com.nidefawl.Stats.util.Updater; public class Stats extends JavaPlugin { public final static Logger log = Logger.getLogger("Minecraft"); - public static final String version = "0.99.1"; + public static final String version = "0.99.2"; public static final String logprefix = "[Stats-" + version + "]"; public final static String defaultCategory = "stats"; public boolean enabled = false; @@ -479,7 +479,8 @@ public class Stats extends JavaPlugin { for (Player p : getServer().getOnlinePlayers()) { load(p); } - getServer().getScheduler().scheduleSyncRepeatingTask(this, new SaveTask(this), StatsSettings.delay * 20, StatsSettings.delay * 20); + getServer().getScheduler().scheduleAsyncRepeatingTask(this, new SaveTask(this), StatsSettings.delay * 20, StatsSettings.delay * 20); + } @@ -491,12 +492,41 @@ public class Stats extends JavaPlugin { statsInstance = plugin; } - @Override public void run() { + if (!statsInstance.enabled) return; statsInstance.saveAll(); } + + public void saveAll() { + if (StatsSettings.debugOutput) + log.info("Stats debug: saving " + this.statsInstance.stats.size() + " players stats"); + try { + Connection conn = StatsSQLConnectionManager.getConnection(StatsSettings.useMySQL); + if (conn == null) + return; + conn.setAutoCommit(false); + } catch (SQLException e) { + e.printStackTrace(); + } + for (PlayerStat stat : this.statsInstance.stats.values()) { + if (stat == null || this.statsInstance.getServer().getPlayer(stat.getName()) == null) { + stat.unload = true; + continue; + } + this.statsInstance.updateTimedStats(stat); + stat.save(false); + } + StatsSQLConnectionManager.closeConnection(StatsSettings.useMySQL); + for (PlayerStat stat : this.statsInstance.stats.values()) { + if (!stat.unload) + continue; + LogError("onPlayerQuit did not happen, unloading " + stat.getName() + " now"); + this.statsInstance.logout(stat.getName()); + this.statsInstance.unload(stat.getName()); + } + } } public void onDisable() {