forked from Limework/RediSkript
Fix wrong class name & Fully fix sending messages while disabled
This commit is contained in:
parent
f35ad377d1
commit
f53f9dd5a2
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>net.limework.rediskript</groupId>
|
<groupId>net.limework.rediskript</groupId>
|
||||||
<artifactId>RediSkript</artifactId>
|
<artifactId>RediSkript</artifactId>
|
||||||
<version>1.2.2</version>
|
<version>1.2.5</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -2,11 +2,14 @@ package net.limework.rediskript;
|
|||||||
import net.limework.rediskript.commands.CommandReloadRedis;
|
import net.limework.rediskript.commands.CommandReloadRedis;
|
||||||
import net.limework.rediskript.skript.SkriptHook;
|
import net.limework.rediskript.skript.SkriptHook;
|
||||||
import net.limework.rediskript.managers.RedisManager;
|
import net.limework.rediskript.managers.RedisManager;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class RediSkript extends JavaPlugin {
|
public class RediSkript extends JavaPlugin {
|
||||||
|
|
||||||
//Redis manager
|
//Redis manager
|
||||||
@ -31,14 +34,12 @@ public class RediSkript extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@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
|
//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() {
|
public void onDisable() {
|
||||||
if (rm != null) {
|
if (rm != null) {
|
||||||
rm.shutdown();
|
rm.shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public RedisManager getRm() {
|
public RedisManager getRm() {
|
||||||
return rm;
|
return rm;
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,12 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class RedisManager extends BinaryJedisPubSub implements Runnable {
|
public class RedisManager extends BinaryJedisPubSub implements Runnable {
|
||||||
|
|
||||||
|
private final ExecutorService RedisReconnector;
|
||||||
private RediSkript plugin;
|
private RediSkript plugin;
|
||||||
|
|
||||||
private JedisPool jedisPool;
|
private JedisPool jedisPool;
|
||||||
@ -52,7 +54,8 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
|
|||||||
config.getInt("Redis.TimeOut"),
|
config.getInt("Redis.TimeOut"),
|
||||||
config.getString("Redis.Password"),
|
config.getString("Redis.Password"),
|
||||||
config.getBoolean("Redis.useTLS"));
|
config.getBoolean("Redis.useTLS"));
|
||||||
RedisService = Executors.newFixedThreadPool(3);
|
RedisReconnector = Executors.newSingleThreadExecutor();
|
||||||
|
RedisService = Executors.newSingleThreadExecutor();
|
||||||
try {
|
try {
|
||||||
this.subscribeJedis = this.jedisPool.getResource();
|
this.subscribeJedis = this.jedisPool.getResource();
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
@ -63,7 +66,7 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
this.RedisService.execute(this);
|
this.RedisReconnector.execute(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -130,8 +133,13 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
|
|||||||
JSONObject j = new JSONObject(receivedMessage);
|
JSONObject j = new JSONObject(receivedMessage);
|
||||||
//System.out.println("Message got from channel: "+channel +" and the Message: " +json.toString());
|
//System.out.println("Message got from channel: "+channel +" and the Message: " +json.toString());
|
||||||
RedisMessageEvent event = new RedisMessageEvent(channelString, j.getString("Message"), j.getLong("Date"));
|
RedisMessageEvent event = new RedisMessageEvent(channelString, j.getString("Message"), j.getLong("Date"));
|
||||||
|
|
||||||
|
//if plugin is disabling, don't call events anymore
|
||||||
|
|
||||||
|
if (plugin.isEnabled()) {
|
||||||
Bukkit.getScheduler().runTask(plugin, () -> plugin.getServer().getPluginManager().callEvent(event));
|
Bukkit.getScheduler().runTask(plugin, () -> plugin.getServer().getPluginManager().callEvent(event));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Bukkit.getLogger().warning(ChatColor.translateAlternateColorCodes('&', "&cI got a message that was empty from channel " + channelString + " please check your code that you used to send the message. Message content:"));
|
Bukkit.getLogger().warning(ChatColor.translateAlternateColorCodes('&', "&cI got a message that was empty from channel " + channelString + " please check your code that you used to send the message. Message content:"));
|
||||||
@ -141,6 +149,11 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
|
try {
|
||||||
|
this.RedisService.awaitTermination(1, TimeUnit.SECONDS);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
this.isShuttingDown.set(true);
|
this.isShuttingDown.set(true);
|
||||||
if (this.subscribeJedis != null) {
|
if (this.subscribeJedis != null) {
|
||||||
this.unsubscribe();
|
this.unsubscribe();
|
||||||
@ -148,6 +161,7 @@ public class RedisManager extends BinaryJedisPubSub implements Runnable {
|
|||||||
this.subscribeJedis.getClient().close();
|
this.subscribeJedis.getClient().close();
|
||||||
this.jedisPool.getResource().close();
|
this.jedisPool.getResource().close();
|
||||||
}
|
}
|
||||||
|
this.RedisReconnector.shutdown();
|
||||||
this.RedisService.shutdown();
|
this.RedisService.shutdown();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,10 @@ import net.limework.rediskript.skript.elements.ExprMessageDate;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class SkriptHook {
|
public class SkriptHook {
|
||||||
|
|
||||||
private SkriptAddon addon;
|
|
||||||
public SkriptHook(RediSkript plugin) {
|
public SkriptHook(RediSkript plugin) {
|
||||||
addon = Skript.registerAddon(plugin);
|
SkriptAddon addon = Skript.registerAddon(plugin);
|
||||||
try {
|
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.registerEvent("redis message", EvtRedis.class, RedisMessageEvent.class, "redis message");
|
||||||
Skript.registerExpression(ExprChannel.class, String.class, ExpressionType.SIMPLE, "redis channel");
|
Skript.registerExpression(ExprChannel.class, String.class, ExpressionType.SIMPLE, "redis channel");
|
||||||
EventValues.registerEventValue(RedisMessageEvent.class, String.class, new Getter<String, RedisMessageEvent>() {
|
EventValues.registerEventValue(RedisMessageEvent.class, String.class, new Getter<String, RedisMessageEvent>() {
|
||||||
|
@ -55,11 +55,23 @@ public class EffSendMessage extends Effect {
|
|||||||
msg = json.toString().getBytes(StandardCharsets.UTF_8);
|
msg = json.toString().getBytes(StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
//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(() -> {
|
manager.getRedisService().execute(() -> {
|
||||||
BinaryJedis j = manager.getJedisPool().getResource();
|
BinaryJedis j = manager.getJedisPool().getResource();
|
||||||
j.publish(channel.getBytes(StandardCharsets.UTF_8), msg);
|
j.publish(channel.getBytes(StandardCharsets.UTF_8), msg);
|
||||||
j.close();
|
j.close();
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
BinaryJedis j = manager.getJedisPool().getResource();
|
||||||
|
j.publish(channel.getBytes(StandardCharsets.UTF_8), msg);
|
||||||
|
j.close();
|
||||||
|
}
|
||||||
} catch (JedisConnectionException exception) {
|
} catch (JedisConnectionException exception) {
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user