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