diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/RedisBungeePlugin.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/RedisBungeePlugin.java index 3b49d24..9f50887 100644 --- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/RedisBungeePlugin.java +++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/RedisBungeePlugin.java @@ -102,4 +102,6 @@ public interface RedisBungeePlugin

extends EventsPlatform { Long getRedisClusterTime(); + void updateProxyIds(); + } diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/HeartbeatTask.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/HeartbeatTask.java new file mode 100644 index 0000000..4e61df2 --- /dev/null +++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/HeartbeatTask.java @@ -0,0 +1,66 @@ +package com.imaginarycode.minecraft.redisbungee.api.tasks; + +import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.exceptions.JedisConnectionException; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +public class HeartbeatTask extends RedisTask{ + + public final static TimeUnit REPEAT_INTERVAL_TIME_UNIT = TimeUnit.SECONDS; + public final static int INTERVAL = 1; + private final AtomicInteger globalPlayerCount; + + public HeartbeatTask(RedisBungeePlugin plugin, AtomicInteger globalPlayerCount) { + super(plugin); + this.globalPlayerCount = globalPlayerCount; + } + + @Override + public Void jedisTask(Jedis jedis) { + try { + long redisTime = plugin.getRedisTime(jedis.time()); + jedis.hset("heartbeats", plugin.getConfiguration().getProxyId(), String.valueOf(redisTime)); + } catch (JedisConnectionException e) { + // Redis server has disappeared! + plugin.logFatal("Unable to update heartbeat - did your Redis server go away?"); + e.printStackTrace(); + return null; + } + try { + plugin.updateProxyIds(); + globalPlayerCount.set(plugin.getCurrentCount()); + } catch (Throwable e) { + plugin.logFatal("Unable to update data - did your Redis server go away?"); + e.printStackTrace(); + } + return null; + } + + @Override + public Void clusterJedisTask(JedisCluster jedisCluster) { + try { + long redisTime = plugin.getRedisClusterTime(); + jedisCluster.hset("heartbeats", plugin.getConfiguration().getProxyId(), String.valueOf(redisTime)); + } catch (JedisConnectionException e) { + // Redis server has disappeared! + plugin.logFatal("Unable to update heartbeat - did your Redis server go away?"); + e.printStackTrace(); + return null; + } + try { + plugin.updateProxyIds(); + globalPlayerCount.set(plugin.getCurrentCount()); + } catch (Throwable e) { + plugin.logFatal("Unable to update data - did your Redis server go away?"); + e.printStackTrace(); + } + return null; + } + + + +} diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/RedisTask.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/RedisTask.java index 9dc7bec..42ff9a3 100644 --- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/RedisTask.java +++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/RedisTask.java @@ -13,10 +13,10 @@ import java.util.concurrent.Callable; public abstract class RedisTask implements Runnable, Callable { - private final Summoner summoner; - private final RedisBungeeAPI api; - private Jedis jedis; - private RedisBungeePlugin plugin; + protected final Summoner summoner; + protected final RedisBungeeAPI api; + protected Jedis jedis; + protected RedisBungeePlugin plugin; @Override public V call() throws Exception { diff --git a/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeePlugin.java b/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeePlugin.java index 25f3fc9..96bb766 100644 --- a/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeePlugin.java +++ b/RedisBungee-Bungee/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeBungeePlugin.java @@ -9,6 +9,7 @@ import com.google.common.collect.Multimap; import com.google.common.io.ByteStreams; import com.imaginarycode.minecraft.redisbungee.api.summoners.ClusterJedisSummoner; import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisSummoner; +import com.imaginarycode.minecraft.redisbungee.api.tasks.HeartbeatTask; import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask; import com.imaginarycode.minecraft.redisbungee.api.util.RedisUtil; import com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils; @@ -567,8 +568,6 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin } } catch (NumberFormatException ignored) { } - } else { - jedis.hset("heartbeats", configuration.getProxyId(), jedis.time().get(0)); } return null; @@ -592,58 +591,17 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin } } catch (NumberFormatException ignored) { } - } else { - jedisCluster.hset("heartbeats", configuration.getProxyId(), String.valueOf(getRedisClusterTime())); } return null; } }.execute(); - proxiesIds = getCurrentProxiesIds(true, false); + updateProxyIds(); uuidTranslator = new UUIDTranslator(this); - RedisTask heartBeatRedisTask = new RedisTask(api) { - @Override - public Void jedisTask(Jedis jedis) { - try { - long redisTime = getRedisTime(jedis.time()); - jedis.hset("heartbeats", configuration.getProxyId(), String.valueOf(redisTime)); - } catch (JedisConnectionException e) { - // Redis server has disappeared! - getLogger().log(Level.SEVERE, "Unable to update heartbeat - did your Redis server go away?", e); - return null; - } - try { - proxiesIds = getCurrentProxiesIds(true, false); - globalPlayerCount.set(getCurrentCount()); - } catch (Throwable e) { - getLogger().log(Level.SEVERE, "Unable to update data - did your Redis server go away?", e); - } - return null; - } - @Override - public Void clusterJedisTask(JedisCluster jedisCluster) { - try { - long redisTime = getRedisClusterTime(); - jedisCluster.hset("heartbeats", configuration.getProxyId(), String.valueOf(redisTime)); - } catch (JedisConnectionException e) { - // Redis server has disappeared! - getLogger().log(Level.SEVERE, "Unable to update heartbeat - did your Redis server go away?", e); - return null; - } - try { - proxiesIds = getCurrentProxiesIds(true, false); - globalPlayerCount.set(getCurrentCount()); - } catch (Throwable e) { - getLogger().log(Level.SEVERE, "Unable to update data - did your Redis server go away?", e); - } - return null; - } - }; - - heartbeatTask = service.scheduleAtFixedRate(heartBeatRedisTask::execute, 0, 3, TimeUnit.SECONDS); + heartbeatTask = service.scheduleAtFixedRate(new HeartbeatTask(this, this.globalPlayerCount), 0, HeartbeatTask.INTERVAL, HeartbeatTask.REPEAT_INTERVAL_TIME_UNIT); dataManager = new BungeeDataManager(this); getProxy().getPluginManager().registerListener(this, new RedisBungeeBungeeListener(this, configuration.getExemptAddresses())); @@ -954,6 +912,11 @@ public class RedisBungeeBungeePlugin extends Plugin implements RedisBungeePlugin return getRedisTime((List) this.getRedisClusterTimeScript.eval(Collections.singletonList("0"), Collections.emptyList())); } + @Override + public void updateProxyIds() { + proxiesIds = getCurrentProxiesIds(true, false); + } + @Override public void onEnable() { initialize(); diff --git a/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityPlugin.java b/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityPlugin.java index 36fbbde..8309751 100644 --- a/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityPlugin.java +++ b/RedisBungee-Velocity/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeVelocityPlugin.java @@ -12,6 +12,7 @@ import com.imaginarycode.minecraft.redisbungee.api.*; import com.imaginarycode.minecraft.redisbungee.api.summoners.ClusterJedisSummoner; import com.imaginarycode.minecraft.redisbungee.api.summoners.JedisSummoner; import com.imaginarycode.minecraft.redisbungee.api.summoners.Summoner; +import com.imaginarycode.minecraft.redisbungee.api.tasks.HeartbeatTask; import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask; import com.imaginarycode.minecraft.redisbungee.api.util.RedisUtil; import com.imaginarycode.minecraft.redisbungee.api.util.payload.PayloadUtils; @@ -178,10 +179,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin { } } catch (NumberFormatException ignored) { } - } else { - jedis.hset("heartbeats", configuration.getProxyId(), jedis.time().get(0)); } - return null; } @@ -208,8 +206,6 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin { } } catch (NumberFormatException ignored) { } - } else { - jedisCluster.hset("heartbeats", configuration.getProxyId(), String.valueOf(getRedisClusterTime())); } return null; } @@ -634,48 +630,9 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin { @Override public void initialize() { - proxiesIds = getCurrentProxiesIds(true, false); + updateProxyIds(); // start heartbeat task - RedisTask heartBeatRedisTask = new RedisTask(api) { - @Override - public Void jedisTask(Jedis jedis) { - try { - long redisTime = getRedisTime(jedis.time()); - jedis.hset("heartbeats", configuration.getProxyId(), String.valueOf(redisTime)); - } catch (JedisConnectionException e) { - // Redis server has disappeared! - getLogger().error("Unable to update heartbeat - did your Redis server go away?", e); - return null; - } - try { - proxiesIds = getCurrentProxiesIds(true, false); - globalPlayerCount.set(getCurrentCount()); - } catch (Throwable e) { - getLogger().error("Unable to update data - did your Redis server go away?", e); - } - return null; - } - - @Override - public Void clusterJedisTask(JedisCluster jedisCluster) { - try { - long redisTime = getRedisClusterTime(); - jedisCluster.hset("heartbeats", configuration.getProxyId(), String.valueOf(redisTime)); - } catch (JedisConnectionException e) { - // Redis server has disappeared! - getLogger().error("Unable to update heartbeat - did your Redis server go away?", e); - return null; - } - try { - proxiesIds = getCurrentProxiesIds(true, false); - globalPlayerCount.set(getCurrentCount()); - } catch (Throwable e) { - getLogger().error("Unable to update data - did your Redis server go away?", e); - } - return null; - } - }; - heartbeatTask = getProxy().getScheduler().buildTask(this, heartBeatRedisTask::execute).repeat(3, TimeUnit.SECONDS).schedule(); + heartbeatTask = getProxy().getScheduler().buildTask(this, new HeartbeatTask(this, this.globalPlayerCount)).repeat(HeartbeatTask.INTERVAL, HeartbeatTask.REPEAT_INTERVAL_TIME_UNIT).schedule(); getProxy().getEventManager().register(this, new RedisBungeeVelocityListener(this, configuration.getExemptAddresses())); getProxy().getEventManager().register(this, dataManager); @@ -992,6 +949,11 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin { return getRedisTime((List) this.getRedisClusterTimeScript.eval(Collections.singletonList("0"), Collections.emptyList())); } + @Override + public void updateProxyIds() { + this.proxiesIds = this.getCurrentProxiesIds(true, false); + } + @Subscribe public void proxyInit(ProxyInitializeEvent event) { initialize();