1
0
mirror of https://github.com/GeyserMC/Floodgate.git synced 2025-12-19 14:59:20 +00:00

Updated to the latest events version. Share a thread pool

This commit is contained in:
Tim203
2022-08-31 20:53:38 +02:00
parent 359484b3be
commit 1a6aa3199d
6 changed files with 41 additions and 37 deletions

View File

@@ -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<Object, EventSubscriber<?>> {
@Override
protected <H, T, B extends Subscriber<T>> B makeSubscription(
Class<T> eventClass,
Subscribe subscribe,
H listener,
BiConsumer<H, T> handler) {
@NonNull Class<T> eventClass,
@NonNull Subscribe subscribe,
@NonNull H listener,
@NonNull BiConsumer<H, T> handler
) {
return (B) new EventSubscriber<>(
eventClass, subscribe.postOrder(), subscribe.ignoreCancelled(), listener, handler
);
@@ -46,8 +49,10 @@ public final class EventBus extends EventBusImpl<Object, EventSubscriber<?>> {
@Override
protected <T, B extends Subscriber<T>> B makeSubscription(
Class<T> eventClass,
Consumer<T> handler) {
return (B) new EventSubscriber<>(eventClass, handler);
@NonNull Class<T> eventClass,
@NonNull Consumer<T> handler,
@NonNull PostOrder postOrder
) {
return (B) new EventSubscriber<>(eventClass, handler, postOrder);
}
}

View File

@@ -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<E> extends SubscriberImpl<E> {
EventSubscriber(Class<E> eventClass, Consumer<E> handler) {
super(eventClass, handler);
EventSubscriber(
@NonNull Class<E> eventClass,
@NonNull Consumer<E> handler,
@NonNull PostOrder postOrder
) {
super(eventClass, handler, postOrder);
}
<H> EventSubscriber(
@@ -40,7 +45,8 @@ public final class EventSubscriber<E> extends SubscriberImpl<E> {
PostOrder postOrder,
boolean ignoreCancelled,
H handlerInstance,
BiConsumer<H, E> handler) {
BiConsumer<H, E> handler
) {
super(eventClass, postOrder, ignoreCancelled, handlerInstance, handler);
}
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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<Integer, NewsItem> 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();
}
}

View File

@@ -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<DefaultHttpResponse> 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<T> {