From 1a6aa3199db2a94070d9f80b0b1ba98b52e8dfb9 Mon Sep 17 00:00:00 2001 From: Tim203 Date: Wed, 31 Aug 2022 20:53:38 +0200 Subject: [PATCH] Updated to the latest events version. Share a thread pool --- .../geysermc/floodgate/event/EventBus.java | 19 ++++++++++++------- .../floodgate/event/EventSubscriber.java | 12 +++++++++--- .../floodgate/link/CommonPlayerLink.java | 2 +- .../floodgate/module/CommonModule.java | 9 +++++++++ .../geysermc/floodgate/news/NewsChecker.java | 18 +++--------------- .../geysermc/floodgate/util/HttpClient.java | 18 +++++++----------- 6 files changed, 41 insertions(+), 37 deletions(-) diff --git a/core/src/main/java/org/geysermc/floodgate/event/EventBus.java b/core/src/main/java/org/geysermc/floodgate/event/EventBus.java index be768c51..abef2db2 100644 --- a/core/src/main/java/org/geysermc/floodgate/event/EventBus.java +++ b/core/src/main/java/org/geysermc/floodgate/event/EventBus.java @@ -27,6 +27,8 @@ package org.geysermc.floodgate.event; import java.util.function.BiConsumer; import java.util.function.Consumer; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.event.PostOrder; import org.geysermc.event.bus.impl.EventBusImpl; import org.geysermc.event.subscribe.Subscribe; import org.geysermc.event.subscribe.Subscriber; @@ -35,10 +37,11 @@ import org.geysermc.event.subscribe.Subscriber; public final class EventBus extends EventBusImpl> { @Override protected > B makeSubscription( - Class eventClass, - Subscribe subscribe, - H listener, - BiConsumer handler) { + @NonNull Class eventClass, + @NonNull Subscribe subscribe, + @NonNull H listener, + @NonNull BiConsumer handler + ) { return (B) new EventSubscriber<>( eventClass, subscribe.postOrder(), subscribe.ignoreCancelled(), listener, handler ); @@ -46,8 +49,10 @@ public final class EventBus extends EventBusImpl> { @Override protected > B makeSubscription( - Class eventClass, - Consumer handler) { - return (B) new EventSubscriber<>(eventClass, handler); + @NonNull Class eventClass, + @NonNull Consumer handler, + @NonNull PostOrder postOrder + ) { + return (B) new EventSubscriber<>(eventClass, handler, postOrder); } } diff --git a/core/src/main/java/org/geysermc/floodgate/event/EventSubscriber.java b/core/src/main/java/org/geysermc/floodgate/event/EventSubscriber.java index 1ac57cf7..e37d2fa1 100644 --- a/core/src/main/java/org/geysermc/floodgate/event/EventSubscriber.java +++ b/core/src/main/java/org/geysermc/floodgate/event/EventSubscriber.java @@ -27,12 +27,17 @@ package org.geysermc.floodgate.event; import java.util.function.BiConsumer; import java.util.function.Consumer; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.event.PostOrder; import org.geysermc.event.subscribe.impl.SubscriberImpl; public final class EventSubscriber extends SubscriberImpl { - EventSubscriber(Class eventClass, Consumer handler) { - super(eventClass, handler); + EventSubscriber( + @NonNull Class eventClass, + @NonNull Consumer handler, + @NonNull PostOrder postOrder + ) { + super(eventClass, handler, postOrder); } EventSubscriber( @@ -40,7 +45,8 @@ public final class EventSubscriber extends SubscriberImpl { PostOrder postOrder, boolean ignoreCancelled, H handlerInstance, - BiConsumer handler) { + BiConsumer handler + ) { super(eventClass, postOrder, ignoreCancelled, handlerInstance, handler); } } diff --git a/core/src/main/java/org/geysermc/floodgate/link/CommonPlayerLink.java b/core/src/main/java/org/geysermc/floodgate/link/CommonPlayerLink.java index c683c3e3..f1bfb912 100644 --- a/core/src/main/java/org/geysermc/floodgate/link/CommonPlayerLink.java +++ b/core/src/main/java/org/geysermc/floodgate/link/CommonPlayerLink.java @@ -49,7 +49,7 @@ import org.geysermc.floodgate.util.InjectorHolder; @Listener public abstract class CommonPlayerLink implements PlayerLink { @Getter(AccessLevel.PROTECTED) - private final ExecutorService executorService = Executors.newFixedThreadPool(11); + private final ExecutorService executorService = Executors.newCachedThreadPool(); @Getter private boolean enabled; @Getter private boolean allowLinking; diff --git a/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java b/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java index 2ce7341b..050c4925 100644 --- a/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java +++ b/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java @@ -30,12 +30,16 @@ import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.inject.TypeLiteral; import com.google.inject.name.Named; +import com.google.inject.name.Names; import com.google.inject.spi.InjectionListener; import com.google.inject.spi.TypeEncounter; import com.google.inject.spi.TypeListener; import io.netty.util.AttributeKey; import java.nio.file.Path; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import lombok.RequiredArgsConstructor; +import org.geysermc.event.PostOrder; import org.geysermc.floodgate.addon.data.HandshakeHandlersImpl; import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.api.SimpleFloodgateApi; @@ -53,6 +57,7 @@ import org.geysermc.floodgate.crypto.Base64Topping; import org.geysermc.floodgate.crypto.FloodgateCipher; import org.geysermc.floodgate.crypto.KeyProducer; import org.geysermc.floodgate.event.EventBus; +import org.geysermc.floodgate.event.ShutdownEvent; import org.geysermc.floodgate.event.util.ListenerAnnotationMatcher; import org.geysermc.floodgate.inject.CommonPlatformInjector; import org.geysermc.floodgate.link.PlayerLinkHolder; @@ -80,6 +85,10 @@ public class CommonModule extends AbstractModule { } }); + ExecutorService commonPool = Executors.newCachedThreadPool(); + eventBus.subscribe(ShutdownEvent.class, ignored -> commonPool.shutdown(), PostOrder.LAST); + bind(ExecutorService.class).annotatedWith(Names.named("commonPool")).toInstance(commonPool); + bind(HttpClient.class).in(Singleton.class); bind(FloodgateApi.class).to(SimpleFloodgateApi.class); diff --git a/core/src/main/java/org/geysermc/floodgate/news/NewsChecker.java b/core/src/main/java/org/geysermc/floodgate/news/NewsChecker.java index 8071a94d..a653ca59 100644 --- a/core/src/main/java/org/geysermc/floodgate/news/NewsChecker.java +++ b/core/src/main/java/org/geysermc/floodgate/news/NewsChecker.java @@ -34,14 +34,10 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import org.geysermc.event.Listener; -import org.geysermc.event.subscribe.Subscribe; import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.command.util.Permission; -import org.geysermc.floodgate.event.ShutdownEvent; import org.geysermc.floodgate.news.data.AnnouncementData; import org.geysermc.floodgate.news.data.BuildSpecificData; import org.geysermc.floodgate.news.data.CheckAfterData; @@ -52,10 +48,11 @@ import org.geysermc.floodgate.util.HttpClient; import org.geysermc.floodgate.util.HttpClient.HttpResponse; @AutoBind -@Listener public class NewsChecker { - private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); private final Map activeNewsItems = new HashMap<>(); + @Inject + @Named("commonPool") + private ScheduledExecutorService executorService; @Inject private CommandUtil commandUtil; @@ -204,13 +201,4 @@ public class NewsChecker { handleNewsItem(null, item, action); } } - - public void shutdown() { - executorService.shutdown(); - } - - @Subscribe - public void onShutdown(ShutdownEvent ignored) { - shutdown(); - } } diff --git a/core/src/main/java/org/geysermc/floodgate/util/HttpClient.java b/core/src/main/java/org/geysermc/floodgate/util/HttpClient.java index e665025f..96568fec 100644 --- a/core/src/main/java/org/geysermc/floodgate/util/HttpClient.java +++ b/core/src/main/java/org/geysermc/floodgate/util/HttpClient.java @@ -27,30 +27,31 @@ package org.geysermc.floodgate.util; import com.google.gson.Gson; import com.google.gson.JsonObject; +import com.google.inject.Inject; +import com.google.inject.Singleton; +import com.google.inject.name.Named; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; -import org.geysermc.event.Listener; -import org.geysermc.event.subscribe.Subscribe; -import org.geysermc.floodgate.event.ShutdownEvent; // resources are properly closed and ignoring the original stack trace is intended @SuppressWarnings({"PMD.CloseResource", "PMD.PreserveStackTrace"}) -@Listener +@Singleton public class HttpClient { private static final String USER_AGENT = "GeyserMC/Floodgate"; - private final ExecutorService executorService = Executors.newSingleThreadExecutor(); private final Gson gson = new Gson(); + @Inject + @Named("commonPool") + private ExecutorService executorService; public CompletableFuture asyncGet(String urlString) { return CompletableFuture.supplyAsync(() -> get(urlString), executorService); @@ -162,11 +163,6 @@ public class HttpClient { return null; } - @Subscribe - public void onShutdown(ShutdownEvent ignored) { - executorService.shutdown(); - } - @Getter @AllArgsConstructor(access = AccessLevel.PRIVATE) public static class HttpResponse {