Added timer in case the bukkit scheduler fails.

This commit is contained in:
Robin Kupper
2011-04-12 03:37:22 +02:00
parent 9dca36ee4f
commit e4c2497d35
2 changed files with 11 additions and 3 deletions

View File

@@ -5,13 +5,14 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.HashSet; import java.util.HashSet;
import java.util.TimerTask;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Level; import java.util.logging.Level;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class Consumer implements Runnable public class Consumer extends TimerTask implements Runnable
{ {
private LinkedBlockingQueue<BlockRow> bqueue = new LinkedBlockingQueue<BlockRow>(); private LinkedBlockingQueue<BlockRow> bqueue = new LinkedBlockingQueue<BlockRow>();
private HashSet<Integer> hiddenplayers = new HashSet<Integer>(); private HashSet<Integer> hiddenplayers = new HashSet<Integer>();

View File

@@ -7,6 +7,7 @@ import java.sql.Connection;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.Timer;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -54,6 +55,7 @@ public class LogBlock extends JavaPlugin
public static Config config; public static Config config;
public ConnectionPool pool; public ConnectionPool pool;
private Consumer consumer = null; private Consumer consumer = null;
private Timer timer = null;
@Override @Override
public void onEnable() { public void onEnable() {
@@ -123,13 +125,18 @@ public class LogBlock extends JavaPlugin
consumer = new Consumer(this); consumer = new Consumer(this);
if (getServer().getScheduler().scheduleAsyncRepeatingTask(this, consumer, config.delay * 20, config.delay * 20) > 0) if (getServer().getScheduler().scheduleAsyncRepeatingTask(this, consumer, config.delay * 20, config.delay * 20) > 0)
log.info("[LogBlock] Started consumer"); log.info("[LogBlock] Started consumer");
else else {
log.severe("[LogBlock] Failed to start consumer"); log.warning("[LogBlock] Failed to schedule consumer with bukkit scheduler. Now trying timer scheduler.");
timer = new Timer();
timer.scheduleAtFixedRate(consumer, config.delay*1000, config.delay*1000);
}
log.info("Logblock v" + getDescription().getVersion() + " enabled."); log.info("Logblock v" + getDescription().getVersion() + " enabled.");
} }
@Override @Override
public void onDisable() { public void onDisable() {
if (timer != null)
timer.cancel();
if (consumer != null && consumer.getQueueSize() > 0) { if (consumer != null && consumer.getQueueSize() > 0) {
log.info("[LogBlock] Waiting for consumer ..."); log.info("[LogBlock] Waiting for consumer ...");
Thread thread = new Thread(consumer); Thread thread = new Thread(consumer);