diff --git a/src/main/java/net/pingex/dcf/core/CoreEventsHandler.java b/src/main/java/net/pingex/dcf/core/CoreEventsHandler.java index 20eb9ad..e2c6beb 100644 --- a/src/main/java/net/pingex/dcf/core/CoreEventsHandler.java +++ b/src/main/java/net/pingex/dcf/core/CoreEventsHandler.java @@ -23,7 +23,7 @@ public class CoreEventsHandler public static void onReady(ReadyEvent event) { LOGGER.info("Connection with user #{} ready.", event.getClient().getOurUser().getID()); - EventManager.getInstance().updateConnectionHandlers(event.getClient()); + EventManager.getInstance().updateConnectionHandlers(); } @EventSubscriber diff --git a/src/main/java/net/pingex/dcf/core/GatewayConnectionsManager.java b/src/main/java/net/pingex/dcf/core/GatewayConnectionsManager.java index 61eba46..1bf3c5c 100644 --- a/src/main/java/net/pingex/dcf/core/GatewayConnectionsManager.java +++ b/src/main/java/net/pingex/dcf/core/GatewayConnectionsManager.java @@ -17,14 +17,14 @@ import java.util.Set; public class GatewayConnectionsManager { /** - * Main datastore + * Main connection */ - private static Set connectionsDatastore = new HashSet<>(); + private static IDiscordClient connection; /** - * List of registered listeners for each connection, as we can't access registered listeners in IDC dispatcher. + * List of registered listeners as we cannot access registered listeners in IDC dispatcher. */ - private static Map> registeredListeners = new HashMap<>(); + private static Set registeredListeners = new HashSet<>(); /** * Logger @@ -32,17 +32,16 @@ public class GatewayConnectionsManager private static final Logger LOGGER = LogManager.getLogger(GatewayConnectionsManager.class); /** - * Registers a connection and login automatically - * @param builder Filled and builder ready for log in + * Registers a connection and login automatically, called once in main + * @param builder Builder filled and ready to login */ public static void registerConnection(ClientBuilder builder) { LOGGER.info("Registering new connection"); try { - IDiscordClient builtConnection = builder.login(); - connectionsDatastore.add(builtConnection); - builtConnection.getDispatcher().registerListener(CoreEventsHandler.class); // Register the core event handler independently from the events package + connection = builder.login(); + connection.getDispatcher().registerListener(CoreEventsHandler.class); // Register the DCF core events handler needed for core operations and logging. } catch (DiscordException e) { @@ -50,76 +49,45 @@ public class GatewayConnectionsManager } } - /** - * Logout and unregister specified connection - * @param client Target connection - */ - public static void unregisterConnection(IDiscordClient client) - { - LOGGER.info("Unregistering connection with user #" + client.getOurUser().getID()); - - DiscordInteractionsUtil.disconnect(client); - connectionsDatastore.remove(client); - registeredListeners.remove(client); - } - /** * Update listeners for target connection - * @param target Target conection, must be registered * @param refListeners Reference listeners list */ - public static void updateListeners(IDiscordClient target, Set> refListeners) + public static void updateListeners(Set> refListeners) { - LOGGER.debug("Updating listeners for target " + target.getOurUser().getID()); - - if(!connectionsDatastore.contains(target)) return; - if(!registeredListeners.containsKey(target)) registeredListeners.put(target, new HashSet<>()); - - Set currentListeners = registeredListeners.get(target); + LOGGER.debug("Updating connection listeners."); // Case 1: item is not registered in IDC - long toRegister = refListeners.stream().filter(item -> !currentListeners.contains(item)).count(); - refListeners.stream().filter(item -> !currentListeners.contains(item)).forEach(item -> + long toRegister = refListeners.stream().filter(item -> !registeredListeners.contains(item)).count(); + refListeners.stream().filter(item -> !registeredListeners.contains(item)).forEach(item -> { - target.getDispatcher().registerListener(item); - currentListeners.add(item); + connection.getDispatcher().registerListener(item); + registeredListeners.add(item); }); // Case 2: item is registered, but shouldn't be - long toUnregister = currentListeners.stream().filter(item -> !refListeners.contains(item)).count(); - currentListeners.stream().filter(item -> !refListeners.contains(item)).forEach(item -> + long toUnregister = registeredListeners.stream().filter(item -> !refListeners.contains(item)).count(); + registeredListeners.stream().filter(item -> !refListeners.contains(item)).forEach(item -> { - target.getDispatcher().unregisterListener(item); - currentListeners.remove(item); + connection.getDispatcher().unregisterListener(item); + registeredListeners.remove(item); }); - LOGGER.debug("Registered " + toRegister + " listeners and unregistered " + toUnregister + " listeners."); - } - - /** - * Update all connections listeners - * @param refListeners Reference listeners list - */ - public static void updateAllListeners(Set> refListeners) - { - for(IDiscordClient i : connectionsDatastore) updateListeners(i, refListeners); + LOGGER.debug("Update done. diff: +{} -{}", toRegister, toUnregister); } /** * Reconnect a disconnected gateway connection - * @param target Disconnected connection */ - public static void reconnect(IDiscordClient target) + public static void reconnect() { - if(!connectionsDatastore.contains(target)) return; - try { - target.login(); + connection.login(); } catch (DiscordException e) { - LOGGER.warn("User #" + target.getOurUser().getID() + " failed to reconnect to the gateway.", e); + LOGGER.warn("User #" + connection.getOurUser().getID() + " failed to reconnect to the gateway.", e); } } } diff --git a/src/main/java/net/pingex/dcf/modularity/events/EventManager.java b/src/main/java/net/pingex/dcf/modularity/events/EventManager.java index a8e0be5..a8c7719 100644 --- a/src/main/java/net/pingex/dcf/modularity/events/EventManager.java +++ b/src/main/java/net/pingex/dcf/modularity/events/EventManager.java @@ -57,7 +57,7 @@ public class EventManager { LOGGER.debug("Registering event handlers for plugin {}.", plugin.getId()); handlers.add(plugin); - updateConnectionsHandlers(); // Trigger update + updateConnectionHandlers(); // Trigger update } else LOGGER.trace("Plugin {} has no event handlers.", plugin.getId()); } @@ -72,7 +72,7 @@ public class EventManager { LOGGER.debug("Unregistering event handlers for plugin {}.", plugin.getId()); handlers.remove(plugin); - updateConnectionsHandlers(); // Trigger update + updateConnectionHandlers(); // Trigger update } } @@ -90,16 +90,8 @@ public class EventManager /** * Delegated method */ - public void updateConnectionsHandlers() + public void updateConnectionHandlers() { - GatewayConnectionsManager.updateAllListeners(collectAllHandlers()); - } - - /** - * Delegated method - */ - public void updateConnectionHandlers(IDiscordClient target) - { - GatewayConnectionsManager.updateListeners(target, collectAllHandlers()); + GatewayConnectionsManager.updateListeners(collectAllHandlers()); } }