diff --git a/pom.xml b/pom.xml
index 1bbb1e5..47a2e5c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
net.limework.rediskript
RediSkript
- 1.2.2
+ 1.2.5
jar
diff --git a/src/main/java/net/limework/rediskript/RediSkript.java b/src/main/java/net/limework/rediskript/RediSkript.java
index e09a3b7..55c8d9a 100644
--- a/src/main/java/net/limework/rediskript/RediSkript.java
+++ b/src/main/java/net/limework/rediskript/RediSkript.java
@@ -2,11 +2,14 @@ package net.limework.rediskript;
import net.limework.rediskript.commands.CommandReloadRedis;
import net.limework.rediskript.skript.SkriptHook;
import net.limework.rediskript.managers.RedisManager;
+import org.bukkit.Bukkit;
import org.bukkit.command.PluginCommand;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.plugin.java.JavaPlugin;
+import java.util.concurrent.TimeUnit;
+
public class RediSkript extends JavaPlugin {
//Redis manager
@@ -31,14 +34,12 @@ public class RediSkript extends JavaPlugin {
@Override
//using HIGHEST event priority so it shuts down last and code can still execute well in "on script unload" and "on skript unload" events
- @EventHandler(priority = EventPriority.HIGHEST)
+ @EventHandler(priority = EventPriority.LOWEST)
public void onDisable() {
if (rm != null) {
rm.shutdown();
}
}
-
-
public RedisManager getRm() {
return rm;
}
diff --git a/src/main/java/net/limework/rediskript/managers/RedisManager.java b/src/main/java/net/limework/rediskript/managers/RedisManager.java
index 090f030..e5cd3f1 100644
--- a/src/main/java/net/limework/rediskript/managers/RedisManager.java
+++ b/src/main/java/net/limework/rediskript/managers/RedisManager.java
@@ -18,10 +18,12 @@ import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
public class RedisManager extends BinaryJedisPubSub implements Runnable {
+ private final ExecutorService RedisReconnector;
private RediSkript plugin;
private JedisPool jedisPool;
@@ -52,7 +54,8 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
config.getInt("Redis.TimeOut"),
config.getString("Redis.Password"),
config.getBoolean("Redis.useTLS"));
- RedisService = Executors.newFixedThreadPool(3);
+ RedisReconnector = Executors.newSingleThreadExecutor();
+ RedisService = Executors.newSingleThreadExecutor();
try {
this.subscribeJedis = this.jedisPool.getResource();
} catch (Exception ignored) {
@@ -63,7 +66,7 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
}
public void start() {
- this.RedisService.execute(this);
+ this.RedisReconnector.execute(this);
}
@Override
@@ -130,7 +133,12 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
JSONObject j = new JSONObject(receivedMessage);
//System.out.println("Message got from channel: "+channel +" and the Message: " +json.toString());
RedisMessageEvent event = new RedisMessageEvent(channelString, j.getString("Message"), j.getLong("Date"));
- Bukkit.getScheduler().runTask(plugin, () -> plugin.getServer().getPluginManager().callEvent(event));
+
+ //if plugin is disabling, don't call events anymore
+
+ if (plugin.isEnabled()) {
+ Bukkit.getScheduler().runTask(plugin, () -> plugin.getServer().getPluginManager().callEvent(event));
+ }
}
} catch (Exception e) {
e.printStackTrace();
@@ -141,6 +149,11 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
}
public void shutdown() {
+ try {
+ this.RedisService.awaitTermination(1, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
this.isShuttingDown.set(true);
if (this.subscribeJedis != null) {
this.unsubscribe();
@@ -148,6 +161,7 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
this.subscribeJedis.getClient().close();
this.jedisPool.getResource().close();
}
+ this.RedisReconnector.shutdown();
this.RedisService.shutdown();
}
diff --git a/src/main/java/net/limework/rediskript/skript/SkriptHook.java b/src/main/java/net/limework/rediskript/skript/SkriptHook.java
index 27bf0f3..5f54935 100644
--- a/src/main/java/net/limework/rediskript/skript/SkriptHook.java
+++ b/src/main/java/net/limework/rediskript/skript/SkriptHook.java
@@ -16,12 +16,10 @@ import net.limework.rediskript.skript.elements.ExprMessageDate;
import java.io.IOException;
public class SkriptHook {
-
- private SkriptAddon addon;
public SkriptHook(RediSkript plugin) {
- addon = Skript.registerAddon(plugin);
+ SkriptAddon addon = Skript.registerAddon(plugin);
try {
- addon.loadClasses("net.limework.core.skript", "elements");
+ addon.loadClasses("net.limework.rediskript.skript", "elements");
Skript.registerEvent("redis message", EvtRedis.class, RedisMessageEvent.class, "redis message");
Skript.registerExpression(ExprChannel.class, String.class, ExpressionType.SIMPLE, "redis channel");
EventValues.registerEventValue(RedisMessageEvent.class, String.class, new Getter() {
diff --git a/src/main/java/net/limework/rediskript/skript/elements/EffSendMessage.java b/src/main/java/net/limework/rediskript/skript/elements/EffSendMessage.java
index 427d704..f0ce436 100644
--- a/src/main/java/net/limework/rediskript/skript/elements/EffSendMessage.java
+++ b/src/main/java/net/limework/rediskript/skript/elements/EffSendMessage.java
@@ -55,11 +55,23 @@ public class EffSendMessage extends Effect {
msg = json.toString().getBytes(StandardCharsets.UTF_8);
}
try {
- manager.getRedisService().execute(() -> {
+
+ //execute sending of redis message on the main thread if plugin is disabling
+ //so it can still process the sending
+
+ //sending a redis message blocks main thread if there's no more connections available
+ //so to avoid issues, it's best to do it always on separate thread
+ if (plugin.isEnabled()) {
+ manager.getRedisService().execute(() -> {
+ BinaryJedis j = manager.getJedisPool().getResource();
+ j.publish(channel.getBytes(StandardCharsets.UTF_8), msg);
+ j.close();
+ });
+ } else {
BinaryJedis j = manager.getJedisPool().getResource();
j.publish(channel.getBytes(StandardCharsets.UTF_8), msg);
j.close();
- });
+ }
} catch (JedisConnectionException exception) {
exception.printStackTrace();
}