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 d6dbac0..f28e992 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 @@ -12,8 +12,11 @@ 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; import com.imaginarycode.minecraft.redisbungee.api.util.uuid.UUIDTranslator; +import org.checkerframework.checker.units.qual.A; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.Protocol; +import redis.clients.jedis.UnifiedJedis; import redis.clients.jedis.exceptions.JedisConnectionException; import java.net.InetAddress; @@ -67,7 +70,7 @@ public interface RedisBungeePlugin

extends EventsPlatform, ConfigLoader { @Override public Long clusterJedisTask(JedisCluster jedisCluster) { long total = 0; - long redisTime = getRedisTime(); + long redisTime = getRedisTime(jedisCluster); Map heartBeats = jedisCluster.hgetAll("heartbeats"); for (Map.Entry stringStringEntry : heartBeats.entrySet()) { String k = stringStringEntry.getKey(); @@ -250,7 +253,7 @@ public interface RedisBungeePlugin

extends EventsPlatform, ConfigLoader { @Override public List clusterJedisTask(JedisCluster jedisCluster) { try { - long time = getRedisTime(); + long time = getRedisTime(jedisCluster); ImmutableList.Builder servers = ImmutableList.builder(); Map heartbeats = jedisCluster.hgetAll("heartbeats"); for (Map.Entry entry : heartbeats.entrySet()) { @@ -337,6 +340,12 @@ public interface RedisBungeePlugin

extends EventsPlatform, ConfigLoader { sendProxyCommand(getConfiguration().getProxyId(), cmd); } + default Long getRedisTime(UnifiedJedis unifiedJedis) { + List data = (List) unifiedJedis.sendCommand(Protocol.Command.TIME); + List times = new ArrayList<>(); + data.forEach((o) -> times.add(new String((byte[])o))); + return getRedisTime(times); + } default long getRedisTime(List timeRes) { return Long.parseLong(timeRes.get(0)); } @@ -368,8 +377,6 @@ public interface RedisBungeePlugin

extends EventsPlatform, ConfigLoader { RedisBungeeMode getRedisBungeeMode(); - Long getRedisTime(); - 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 index 44e208b..a58cb30 100644 --- 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 @@ -43,7 +43,7 @@ public class HeartbeatTask extends RedisTask{ @Override public Void clusterJedisTask(JedisCluster jedisCluster) { try { - long redisTime = plugin.getRedisTime(); + long redisTime = plugin.getRedisTime(jedisCluster); jedisCluster.hset("heartbeats", plugin.getConfiguration().getProxyId(), String.valueOf(redisTime)); } catch (JedisConnectionException e) { // Redis server has disappeared! diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/InitialUtils.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/InitialUtils.java index 86e5482..3b89c30 100644 --- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/InitialUtils.java +++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/tasks/InitialUtils.java @@ -2,24 +2,20 @@ package com.imaginarycode.minecraft.redisbungee.api.tasks; import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; import com.imaginarycode.minecraft.redisbungee.api.util.RedisUtil; -import com.imaginarycode.minecraft.redisbungee.api.util.io.IOUtil; -import com.imaginarycode.minecraft.redisbungee.api.util.lua.LuaManager; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster; -import redis.clients.jedis.exceptions.JedisException; +import redis.clients.jedis.Protocol; import java.io.IOException; -import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Collections; public class InitialUtils { - public static LuaManager.Script getTimeScript(RedisBungeePlugin plugin, LuaManager luaManager) { - return new RedisTask(plugin) { + public static void checkRedisVersion(RedisBungeePlugin plugin) { + new RedisTask(plugin) { @Override - public LuaManager.Script jedisTask(Jedis jedis) { + public Void jedisTask(Jedis jedis) { // This is more portable than INFO

String info = jedis.info(); for (String s : info.split("\r\n")) { @@ -41,15 +37,10 @@ public class InitialUtils { } @Override - public LuaManager.Script clusterJedisTask(JedisCluster jedisCluster) { + public Void clusterJedisTask(JedisCluster jedisCluster) { // This is more portable than INFO
- LuaManager.Script getRedisClusterTimeScript; - try { - getRedisClusterTimeScript = luaManager.createScript(IOUtil.readInputStreamAsString(getResourceAsStream("lua/get_time.lua"))); - } catch (JedisException e) { - throw new RuntimeException("possible not supported redis version", e); - } - String info = (String) luaManager.createScript(IOUtil.readInputStreamAsString(getResourceAsStream("lua/get_info.lua"))).eval(Collections.singletonList("0"), Collections.emptyList()); + + String info = new String((byte[]) jedisCluster.sendCommand(Protocol.Command.INFO)); for (String s : info.split("\r\n")) { if (s.startsWith("redis_version:")) { String version = s.split(":")[1]; @@ -65,7 +56,7 @@ public class InitialUtils { break; } } - return getRedisClusterTimeScript; + return null; } }.execute(); } @@ -110,7 +101,7 @@ public class InitialUtils { } else if (jedisCluster.hexists("heartbeats", plugin.getConfiguration().getProxyId())) { try { long value = Long.parseLong(jedisCluster.hget("heartbeats", plugin.getConfiguration().getProxyId())); - long redisTime = plugin.getRedisTime(); + long redisTime = plugin.getRedisTime(jedisCluster); if (redisTime < value + RedisUtil.PROXY_TIMEOUT) { logImposter(plugin); @@ -130,7 +121,4 @@ public class InitialUtils { plugin.logFatal("If this instance is coming up from a crash, create a file in your RedisBungee plugins directory with the name 'restarted_from_crash.txt' and RedisBungee will not perform this check."); } - private static InputStream getResourceAsStream(String resource) { - return InitialUtils.class.getClassLoader().getResourceAsStream(resource); - } } diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/util/lua/LuaManager.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/util/lua/LuaManager.java deleted file mode 100644 index 60689af..0000000 --- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/util/lua/LuaManager.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.imaginarycode.minecraft.redisbungee.api.util.lua; - -import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin; -import com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisCluster; -import redis.clients.jedis.exceptions.JedisDataException; - -import java.util.List; - -public class LuaManager { - private final RedisBungeePlugin plugin; - - public LuaManager(RedisBungeePlugin plugin) { - this.plugin = plugin; - } - - - - public Script createScript(String script) { - RedisTask