mirror of
https://github.com/GeyserMC/Floodgate.git
synced 2025-12-21 07:49:18 +00:00
Updated to the latest events version. Share a thread pool
This commit is contained in:
@@ -27,6 +27,8 @@ package org.geysermc.floodgate.event;
|
|||||||
|
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Consumer;
|
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.bus.impl.EventBusImpl;
|
||||||
import org.geysermc.event.subscribe.Subscribe;
|
import org.geysermc.event.subscribe.Subscribe;
|
||||||
import org.geysermc.event.subscribe.Subscriber;
|
import org.geysermc.event.subscribe.Subscriber;
|
||||||
@@ -35,10 +37,11 @@ import org.geysermc.event.subscribe.Subscriber;
|
|||||||
public final class EventBus extends EventBusImpl<Object, EventSubscriber<?>> {
|
public final class EventBus extends EventBusImpl<Object, EventSubscriber<?>> {
|
||||||
@Override
|
@Override
|
||||||
protected <H, T, B extends Subscriber<T>> B makeSubscription(
|
protected <H, T, B extends Subscriber<T>> B makeSubscription(
|
||||||
Class<T> eventClass,
|
@NonNull Class<T> eventClass,
|
||||||
Subscribe subscribe,
|
@NonNull Subscribe subscribe,
|
||||||
H listener,
|
@NonNull H listener,
|
||||||
BiConsumer<H, T> handler) {
|
@NonNull BiConsumer<H, T> handler
|
||||||
|
) {
|
||||||
return (B) new EventSubscriber<>(
|
return (B) new EventSubscriber<>(
|
||||||
eventClass, subscribe.postOrder(), subscribe.ignoreCancelled(), listener, handler
|
eventClass, subscribe.postOrder(), subscribe.ignoreCancelled(), listener, handler
|
||||||
);
|
);
|
||||||
@@ -46,8 +49,10 @@ public final class EventBus extends EventBusImpl<Object, EventSubscriber<?>> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T, B extends Subscriber<T>> B makeSubscription(
|
protected <T, B extends Subscriber<T>> B makeSubscription(
|
||||||
Class<T> eventClass,
|
@NonNull Class<T> eventClass,
|
||||||
Consumer<T> handler) {
|
@NonNull Consumer<T> handler,
|
||||||
return (B) new EventSubscriber<>(eventClass, handler);
|
@NonNull PostOrder postOrder
|
||||||
|
) {
|
||||||
|
return (B) new EventSubscriber<>(eventClass, handler, postOrder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,12 +27,17 @@ package org.geysermc.floodgate.event;
|
|||||||
|
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.geysermc.event.PostOrder;
|
import org.geysermc.event.PostOrder;
|
||||||
import org.geysermc.event.subscribe.impl.SubscriberImpl;
|
import org.geysermc.event.subscribe.impl.SubscriberImpl;
|
||||||
|
|
||||||
public final class EventSubscriber<E> extends SubscriberImpl<E> {
|
public final class EventSubscriber<E> extends SubscriberImpl<E> {
|
||||||
EventSubscriber(Class<E> eventClass, Consumer<E> handler) {
|
EventSubscriber(
|
||||||
super(eventClass, handler);
|
@NonNull Class<E> eventClass,
|
||||||
|
@NonNull Consumer<E> handler,
|
||||||
|
@NonNull PostOrder postOrder
|
||||||
|
) {
|
||||||
|
super(eventClass, handler, postOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
<H> EventSubscriber(
|
<H> EventSubscriber(
|
||||||
@@ -40,7 +45,8 @@ public final class EventSubscriber<E> extends SubscriberImpl<E> {
|
|||||||
PostOrder postOrder,
|
PostOrder postOrder,
|
||||||
boolean ignoreCancelled,
|
boolean ignoreCancelled,
|
||||||
H handlerInstance,
|
H handlerInstance,
|
||||||
BiConsumer<H, E> handler) {
|
BiConsumer<H, E> handler
|
||||||
|
) {
|
||||||
super(eventClass, postOrder, ignoreCancelled, handlerInstance, handler);
|
super(eventClass, postOrder, ignoreCancelled, handlerInstance, handler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ import org.geysermc.floodgate.util.InjectorHolder;
|
|||||||
@Listener
|
@Listener
|
||||||
public abstract class CommonPlayerLink implements PlayerLink {
|
public abstract class CommonPlayerLink implements PlayerLink {
|
||||||
@Getter(AccessLevel.PROTECTED)
|
@Getter(AccessLevel.PROTECTED)
|
||||||
private final ExecutorService executorService = Executors.newFixedThreadPool(11);
|
private final ExecutorService executorService = Executors.newCachedThreadPool();
|
||||||
|
|
||||||
@Getter private boolean enabled;
|
@Getter private boolean enabled;
|
||||||
@Getter private boolean allowLinking;
|
@Getter private boolean allowLinking;
|
||||||
|
|||||||
@@ -30,12 +30,16 @@ import com.google.inject.Provides;
|
|||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.google.inject.TypeLiteral;
|
import com.google.inject.TypeLiteral;
|
||||||
import com.google.inject.name.Named;
|
import com.google.inject.name.Named;
|
||||||
|
import com.google.inject.name.Names;
|
||||||
import com.google.inject.spi.InjectionListener;
|
import com.google.inject.spi.InjectionListener;
|
||||||
import com.google.inject.spi.TypeEncounter;
|
import com.google.inject.spi.TypeEncounter;
|
||||||
import com.google.inject.spi.TypeListener;
|
import com.google.inject.spi.TypeListener;
|
||||||
import io.netty.util.AttributeKey;
|
import io.netty.util.AttributeKey;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.geysermc.event.PostOrder;
|
||||||
import org.geysermc.floodgate.addon.data.HandshakeHandlersImpl;
|
import org.geysermc.floodgate.addon.data.HandshakeHandlersImpl;
|
||||||
import org.geysermc.floodgate.api.FloodgateApi;
|
import org.geysermc.floodgate.api.FloodgateApi;
|
||||||
import org.geysermc.floodgate.api.SimpleFloodgateApi;
|
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.FloodgateCipher;
|
||||||
import org.geysermc.floodgate.crypto.KeyProducer;
|
import org.geysermc.floodgate.crypto.KeyProducer;
|
||||||
import org.geysermc.floodgate.event.EventBus;
|
import org.geysermc.floodgate.event.EventBus;
|
||||||
|
import org.geysermc.floodgate.event.ShutdownEvent;
|
||||||
import org.geysermc.floodgate.event.util.ListenerAnnotationMatcher;
|
import org.geysermc.floodgate.event.util.ListenerAnnotationMatcher;
|
||||||
import org.geysermc.floodgate.inject.CommonPlatformInjector;
|
import org.geysermc.floodgate.inject.CommonPlatformInjector;
|
||||||
import org.geysermc.floodgate.link.PlayerLinkHolder;
|
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(HttpClient.class).in(Singleton.class);
|
||||||
|
|
||||||
bind(FloodgateApi.class).to(SimpleFloodgateApi.class);
|
bind(FloodgateApi.class).to(SimpleFloodgateApi.class);
|
||||||
|
|||||||
@@ -34,14 +34,10 @@ import java.util.Collection;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
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.api.logger.FloodgateLogger;
|
||||||
import org.geysermc.floodgate.command.util.Permission;
|
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.AnnouncementData;
|
||||||
import org.geysermc.floodgate.news.data.BuildSpecificData;
|
import org.geysermc.floodgate.news.data.BuildSpecificData;
|
||||||
import org.geysermc.floodgate.news.data.CheckAfterData;
|
import org.geysermc.floodgate.news.data.CheckAfterData;
|
||||||
@@ -52,10 +48,11 @@ import org.geysermc.floodgate.util.HttpClient;
|
|||||||
import org.geysermc.floodgate.util.HttpClient.HttpResponse;
|
import org.geysermc.floodgate.util.HttpClient.HttpResponse;
|
||||||
|
|
||||||
@AutoBind
|
@AutoBind
|
||||||
@Listener
|
|
||||||
public class NewsChecker {
|
public class NewsChecker {
|
||||||
private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
|
|
||||||
private final Map<Integer, NewsItem> activeNewsItems = new HashMap<>();
|
private final Map<Integer, NewsItem> activeNewsItems = new HashMap<>();
|
||||||
|
@Inject
|
||||||
|
@Named("commonPool")
|
||||||
|
private ScheduledExecutorService executorService;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private CommandUtil commandUtil;
|
private CommandUtil commandUtil;
|
||||||
@@ -204,13 +201,4 @@ public class NewsChecker {
|
|||||||
handleNewsItem(null, item, action);
|
handleNewsItem(null, item, action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown() {
|
|
||||||
executorService.shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onShutdown(ShutdownEvent ignored) {
|
|
||||||
shutdown();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,30 +27,31 @@ package org.geysermc.floodgate.util;
|
|||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
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.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
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
|
// resources are properly closed and ignoring the original stack trace is intended
|
||||||
@SuppressWarnings({"PMD.CloseResource", "PMD.PreserveStackTrace"})
|
@SuppressWarnings({"PMD.CloseResource", "PMD.PreserveStackTrace"})
|
||||||
@Listener
|
@Singleton
|
||||||
public class HttpClient {
|
public class HttpClient {
|
||||||
private static final String USER_AGENT = "GeyserMC/Floodgate";
|
private static final String USER_AGENT = "GeyserMC/Floodgate";
|
||||||
|
|
||||||
private final ExecutorService executorService = Executors.newSingleThreadExecutor();
|
|
||||||
private final Gson gson = new Gson();
|
private final Gson gson = new Gson();
|
||||||
|
@Inject
|
||||||
|
@Named("commonPool")
|
||||||
|
private ExecutorService executorService;
|
||||||
|
|
||||||
public CompletableFuture<DefaultHttpResponse> asyncGet(String urlString) {
|
public CompletableFuture<DefaultHttpResponse> asyncGet(String urlString) {
|
||||||
return CompletableFuture.supplyAsync(() -> get(urlString), executorService);
|
return CompletableFuture.supplyAsync(() -> get(urlString), executorService);
|
||||||
@@ -162,11 +163,6 @@ public class HttpClient {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onShutdown(ShutdownEvent ignored) {
|
|
||||||
executorService.shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public static class HttpResponse<T> {
|
public static class HttpResponse<T> {
|
||||||
|
|||||||
Reference in New Issue
Block a user