diff --git a/src/main/java/netneutrality/ThreadManager.java b/src/main/java/netneutrality/ThreadManager.java new file mode 100644 index 0000000..990d802 --- /dev/null +++ b/src/main/java/netneutrality/ThreadManager.java @@ -0,0 +1,37 @@ +package netneutrality; + +/* + * Copyright (c) anthorob + * + * This file is closed-source. It should not be distributed or copied in any way or form + */ + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class ThreadManager { + + public static final ExecutorService executor = Executors.newSingleThreadExecutor(); + // public static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + + + public static void shutdownExecutor() { + try { + System.out.println("attempt to shutdown executor"); + executor.shutdown(); + executor.awaitTermination(5, TimeUnit.SECONDS); + } + catch (InterruptedException e) { + System.err.println("tasks interrupted"); + } + finally { + if (!executor.isTerminated()) { + System.err.println("cancel non-finished tasks"); + } + executor.shutdownNow(); + System.out.println("shutdown finished"); + } + } +} diff --git a/src/main/java/netneutrality/command/message/BlacklistCommand.java b/src/main/java/netneutrality/command/message/BlacklistCommand.java index 0699b05..3c794ff 100644 --- a/src/main/java/netneutrality/command/message/BlacklistCommand.java +++ b/src/main/java/netneutrality/command/message/BlacklistCommand.java @@ -61,18 +61,25 @@ public class BlacklistCommand extends AbstractCommand { case "get": event.getTextChannel().sendMessage("Retreiving list, please wait...").queue(t -> { - String out = ""; - ArrayList blacklist = new ArrayList<>(); + try { - blacklist = ((DBBlacklist) DBController.get("blacklist")).getBlacklistFromServer(event.getGuild().getId()); - for (MBlacklist bl : blacklist) { - out += bl.getWord() + " -> " + (bl.isEnabled() ? "enabled" : "disabled") + "\n"; - } + StringBuilder sb = new StringBuilder(); + ((DBBlacklist) DBController.get("blacklist")).getBlacklistFromServer(event.getGuild().getId(), new Consumer>() { + @Override + public void accept(ArrayList mBlacklists) { + for (MBlacklist bl : mBlacklists) { + sb.append(bl.getWord() + " -> " + (bl.isEnabled() ? "enabled" : "disabled") + "\n"); + } + + t.editMessage("List of blacklisted words for this server [" + event.getGuild().getName() + "] :\n" + (mBlacklists.isEmpty() ? "No word found" : sb.toString())).queue(); + } + }); + } catch (RuntimeException e) { e.printStackTrace(); } - t.editMessage("List of blacklisted words for this server [" + event.getGuild().getName() + "] :\n" + (blacklist.isEmpty() ? "No word found" : out)).queue(); + }); diff --git a/src/main/java/netneutrality/db/AbstractController.java b/src/main/java/netneutrality/db/AbstractController.java index 9f8626b..75fd1d5 100644 --- a/src/main/java/netneutrality/db/AbstractController.java +++ b/src/main/java/netneutrality/db/AbstractController.java @@ -1,13 +1,8 @@ package netneutrality.db; -import netneutrality.MusicBot; - -import java.sql.SQLException; - public abstract class AbstractController { protected MysqlDatabase database; - private boolean isDoingSomething = false; /** * The controller name to be used in {@link DBController} get(String controller) method @@ -15,30 +10,6 @@ public abstract class AbstractController { * @return String */ public abstract String getControllerName(); - - public boolean isDoingSomething() { - return isDoingSomething; - } - - public AbstractController start() { - DBController.isDoingSomething = true; - isDoingSomething = true; - return this; - } - - protected AbstractController end() { - DBController.isDoingSomething = false; - isDoingSomething = false; - return this; - } - - public void reconnect() { - database.reconnect(); - } - - public boolean isClosed() throws SQLException { - return database.isClosed(); - } protected void setDatabase(MysqlDatabase database) { this.database = database; diff --git a/src/main/java/netneutrality/db/DBController.java b/src/main/java/netneutrality/db/DBController.java index c5ecb0f..3af7278 100644 --- a/src/main/java/netneutrality/db/DBController.java +++ b/src/main/java/netneutrality/db/DBController.java @@ -14,9 +14,10 @@ public class DBController { /** * A map that contains all the controllers currently loaded */ - private static HashMap controllers = new HashMap<>(); + private final static HashMap controllers = new HashMap<>(); + + private static MysqlDatabase database = new MysqlDatabase("discord"); - protected static boolean isDoingSomething = false; /** * @param controller The name of the controller as defined in the {@link AbstractController#getControllerName()}'s method @@ -24,33 +25,19 @@ public class DBController { */ public static AbstractController get(String controller) { - if (controllers.isEmpty()) init(); - - + + try { + if (database.isClosed()) { + database.reconnect(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + if (controllers.containsKey(controller)) { - try { - if (controllers.get(controller).isClosed()) { - System.out.println("Reconnecting to database.."); - controllers.get(controller).reconnect(); - } - } catch (SQLException e) { - e.printStackTrace(); - } - - MusicBot.LOGGER.debug("Getting controller " + controller); - do { - - if (!isDoingSomething && !controllers.get(controller).isDoingSomething()) { - return controllers.get(controller).start(); - - } else { - - } - - } while (true); - + return controllers.get(controller); } return null; @@ -72,13 +59,6 @@ public class DBController { public static void shutdown() throws SQLException { database.close(); - controllers.forEach((k,v) -> { - try { - v.database.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - }); } /** @@ -87,6 +67,14 @@ public class DBController { public static void init() { if (controllers.isEmpty()) loadControllers(); + + /*ThreadManager.scheduler.scheduleWithFixedDelay(() -> { + try { + DBController.get().prepareAndExecute("SELECT 1;"); + } catch (SQLException e) { + e.printStackTrace(); + } + }, 60, 60, TimeUnit.SECONDS);*/ } /** diff --git a/src/main/java/netneutrality/db/controllers/DBBlacklist.java b/src/main/java/netneutrality/db/controllers/DBBlacklist.java index 5b0390a..c495f8e 100644 --- a/src/main/java/netneutrality/db/controllers/DBBlacklist.java +++ b/src/main/java/netneutrality/db/controllers/DBBlacklist.java @@ -3,7 +3,9 @@ package netneutrality.db.controllers; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.function.Consumer; +import netneutrality.ThreadManager; import netneutrality.db.AbstractController; import netneutrality.db.DBController; import netneutrality.db.MysqlDatabase; @@ -30,15 +32,12 @@ public class DBBlacklist extends AbstractController { if (!isAlreadyBlacklisted(obj.getWord(), obj.getServerId())) { database.insert("INSERT INTO blacklist VALUES(?,?,?,?)", obj.getWord(), obj.getServerId(), obj.isEnabled(), obj.getCreatorId()); } else { - end(); throw new RuntimeException("Word is already blacklisted"); } } catch (SQLException e) { - end(); e.printStackTrace(); } - end(); } public void delete(String word, String serverId) { @@ -46,15 +45,11 @@ public class DBBlacklist extends AbstractController { if (isAlreadyBlacklisted(word, serverId)) { database.delete("DELETE FROM blacklist WHERE word = ? AND serverId = ?", word, serverId); } else { - end(); throw new RuntimeException("Is not blacklisted"); } } catch (SQLException e) { - end(); e.printStackTrace(); } - - end(); } public void enable(String word, String serverId) { @@ -62,15 +57,12 @@ public class DBBlacklist extends AbstractController { if (isAlreadyBlacklisted(word, serverId)) { database.update("UPDATE blacklist SET isEnabled = 1 WHERE word = ? AND serverId = ?", word, serverId); } else { - end(); throw new RuntimeException("Is not blacklisted"); } } catch (SQLException e) { - end(); e.printStackTrace(); } - end(); } public void disable(String word, String serverId) { @@ -78,81 +70,72 @@ public class DBBlacklist extends AbstractController { if (isAlreadyBlacklisted(word, serverId)) { database.update("UPDATE blacklist SET isEnabled = 0 WHERE word = ? AND serverId = ?", word, serverId); } else { - end(); throw new RuntimeException("Is not blacklisted"); } } catch (SQLException e) { - end(); e.printStackTrace(); } - - end(); } - public MBlacklist getBlacklistForWord(String word, String serverId) { - try { - if (isAlreadyBlacklisted(word, serverId)) { - ResultSet rs = database.prepareAndExecute("SELECT * FROM blacklist WHERE word = ? AND serverId = ?", word, serverId); - Object array[][] = database.convertToArray(rs); - if (database.getNbRow() != 0) { - MBlacklist blacklisted = new MBlacklist((String) array[1][0], (Boolean) array[1][2], (String) array[1][3], - (String) array[1][1]); - end(); - return blacklisted; - } - } else { - end(); - throw new RuntimeException("Is not blacklisted"); - } - } catch (SQLException e) { - end(); - e.printStackTrace(); - } + public void getBlacklistForWord(String word, String serverId, Consumer success) { + ThreadManager.executor.submit(() -> { + MBlacklist blacklisted = null; + try { + if (isAlreadyBlacklisted(word, serverId)) { + ResultSet rs = database.prepareAndExecute("SELECT * FROM blacklist WHERE word = ? AND serverId = ?", word, serverId); + Object array[][] = database.convertToArray(rs); + if (database.getNbRow() != 0) { + blacklisted = new MBlacklist((String) array[1][0], (Boolean) array[1][2], (String) array[1][3], + (String) array[1][1]); + } + } else { + throw new RuntimeException("Is not blacklisted"); + } + } catch (SQLException e) { + e.printStackTrace(); + } + + success.accept(blacklisted); + }); - end(); - return null; } - public ArrayList getBlacklistFromServer(String serverId) { - ArrayList output = new ArrayList<>(); + public void getBlacklistFromServer(String serverId, Consumer> success) { + ThreadManager.executor.submit(() -> { + ArrayList output = new ArrayList<>(); - try { - ResultSet rs = database.prepareAndExecute("SELECT * FROM blacklist WHERE serverId = ? AND isEnabled = 1", serverId); - MTableModel model = database.convertToTableModel(rs); + try { + ResultSet rs = database.prepareAndExecute("SELECT * FROM blacklist WHERE serverId = ? AND isEnabled = 1", serverId); + MTableModel model = database.convertToTableModel(rs); - if (model.getNbRows() != 0) { - for (int row = 0; row < model.getNbRows(); row++) { - output.add(new MBlacklist((String) model.getRow(row).get(0), (Boolean) model.getRow(row).get(2), (String) model.getRow(row).get(3), - (String) model.getRow(row).get(1))); + if (model.getNbRows() != 0) { + for (int row = 0; row < model.getNbRows(); row++) { + output.add(new MBlacklist((String) model.getRow(row).get(0), (Boolean) model.getRow(row).get(2), (String) model.getRow(row).get(3), + (String) model.getRow(row).get(1))); + } + } else { + throw new RuntimeException("Blacklist is empty"); } - } else { - end(); - throw new RuntimeException("Blacklist is empty"); - } - } catch (SQLException e) { - end(); - e.printStackTrace(); - } catch (NullPointerException | IndexOutOfBoundsException e) { - end(); - } + } catch (SQLException e) { + e.printStackTrace(); + } catch (NullPointerException | IndexOutOfBoundsException e) { } + + success.accept(output); + }); - end(); - return output; } public boolean isAlreadyBlacklisted(String word, String serverId) throws SQLException { ResultSet rs = database.prepareAndExecute("SELECT COUNT(*) FROM blacklist WHERE word = ? AND serverId = ?", word, serverId); if (rs.next()) { if (rs.getInt(1) == 0) { - end(); return false; } } - end(); return true; } diff --git a/src/main/java/netneutrality/db/controllers/DBMessage.java b/src/main/java/netneutrality/db/controllers/DBMessage.java index 0bd6a40..6733150 100644 --- a/src/main/java/netneutrality/db/controllers/DBMessage.java +++ b/src/main/java/netneutrality/db/controllers/DBMessage.java @@ -4,6 +4,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.sql.ResultSet; +import netneutrality.ThreadManager; import netneutrality.db.AbstractController; import netneutrality.db.DBController; import netneutrality.db.MysqlDatabase; @@ -25,26 +26,26 @@ public class DBMessage extends AbstractController { public void log(String servername, String channelname, String username, String datesent, String messageId, String message) { - try { - database.insert("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", servername, channelname, username, datesent, messageId, message, null); - } catch (SQLException e) { - end(); - LogHandler.log(e); - } + ThreadManager.executor.submit(() -> { + try { + database.insert("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", servername, channelname, username, datesent, messageId, message, null); + } catch (SQLException e) { + LogHandler.log(e); + } + }); - end(); } public void logEdit(String messageId, String newMessage) { - - try { - database.update("UPDATE log_message SET editedMessage = ? WHERE messageId = ?", newMessage, messageId); - } catch (SQLException e) { - end(); - LogHandler.log(e); - } - - end(); + + ThreadManager.executor.submit(() -> { + try { + database.update("UPDATE log_message SET editedMessage = ? WHERE messageId = ?", newMessage, messageId); + } catch (SQLException e) { + LogHandler.log(e); + } + }); + } public MMessage getMessage(String messageId) { @@ -52,18 +53,14 @@ public class DBMessage extends AbstractController { ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE messageId = ?", messageId); Object[][] array = database.convertToArray(rs); if (database.getNbRow() != 0) { - MMessage message = new MMessage(array[1][0], array[1][1], array[1][2], array[1][3], array[1][4], array[1][5]); - end(); - return message; + return new MMessage(array[1][0], array[1][1], array[1][2], array[1][3], array[1][4], array[1][5]); } } catch (SQLException e) { - end(); LogHandler.log(e); } - end(); return null; } @@ -80,11 +77,9 @@ public class DBMessage extends AbstractController { } } catch (SQLException e) { - end(); LogHandler.log(e); } - end(); return messages; } @@ -93,16 +88,13 @@ public class DBMessage extends AbstractController { try { ResultSet rs = database.prepareAndExecute("SELECT message FROM log_message WHERE messageId = ?", messageId); if (rs.next()) { - end(); return rs.getString(1); } } catch (SQLException e) { - end(); LogHandler.log(e); } - end(); return "No message found"; } @@ -111,16 +103,13 @@ public class DBMessage extends AbstractController { try { int result = database.insert("INSERT INTO logging VALUES(?,?,?)", serverId, channelId, true); if (result == 1) { - end(); return true; } } catch (SQLException e) { - end(); LogHandler.log(e); } - end(); return false; } @@ -129,16 +118,13 @@ public class DBMessage extends AbstractController { try { int result = database.update("UPDATE logging SET enabled = NOT enabled"); if (result == 1) { - end(); return true; } } catch (SQLException e) { - end(); LogHandler.log(e); } - end(); return false; } @@ -147,16 +133,13 @@ public class DBMessage extends AbstractController { try { ResultSet rs = database.prepareAndExecute("SELECT enabled FROM logging WHERE serverId = ? AND channelId = ?", serverId, channelId); if (rs.next()) { - end(); return rs.getBoolean(1); } } catch (SQLException e) { - end(); e.printStackTrace(); } - end(); return false; } diff --git a/src/main/java/netneutrality/db/controllers/DBSettings.java b/src/main/java/netneutrality/db/controllers/DBSettings.java index 695a7bf..43b940e 100644 --- a/src/main/java/netneutrality/db/controllers/DBSettings.java +++ b/src/main/java/netneutrality/db/controllers/DBSettings.java @@ -9,22 +9,18 @@ public class DBSettings extends AbstractController { public String getLoggingChannel(String serverId) { if (serverId.isEmpty()) { - end(); return null; } try { ResultSet rs = database.prepareAndExecute("SELECT channelId FROM logging WHERE serverId = ? AND enabled = 1", serverId); if (rs.next()) { - end(); return rs.getString(1); } } catch (SQLException e) { - end(); e.printStackTrace(); } - end(); return null; } @@ -32,15 +28,12 @@ public class DBSettings extends AbstractController { try { ResultSet rs = database.prepareAndExecute("SELECT token FROM settings"); if (rs.next()) { - end(); return rs.getString(1); } } catch (SQLException e) { - end(); e.printStackTrace(); } - end(); return null; } @@ -48,15 +41,12 @@ public class DBSettings extends AbstractController { try { ResultSet rs = database.prepareAndExecute("SELECT selly_email FROM settings"); if (rs.next()) { - end(); return rs.getString(1); } } catch (SQLException e) { - end(); e.printStackTrace(); } - end(); return null; } @@ -64,15 +54,12 @@ public class DBSettings extends AbstractController { try { ResultSet rs = database.prepareAndExecute("SELECT selly_key FROM settings"); if (rs.next()) { - end(); return rs.getString(1); } } catch (SQLException e) { - end(); e.printStackTrace(); } - end(); return null; }