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

Use a common ScheduledThreadPool and make the player map concurrent

This commit is contained in:
Tim203
2022-12-28 13:24:42 +01:00
parent 913c85c154
commit 0c4b953cdb
4 changed files with 31 additions and 28 deletions

View File

@@ -32,10 +32,10 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.inject.Inject; import com.google.inject.Inject;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.geysermc.cumulus.form.Form; import org.geysermc.cumulus.form.Form;
import org.geysermc.cumulus.form.util.FormBuilder; import org.geysermc.cumulus.form.util.FormBuilder;
@@ -51,7 +51,7 @@ import org.geysermc.floodgate.util.HttpClient;
import org.geysermc.floodgate.util.Utils; import org.geysermc.floodgate.util.Utils;
public class SimpleFloodgateApi implements FloodgateApi { public class SimpleFloodgateApi implements FloodgateApi {
private final Map<UUID, FloodgatePlayer> players = new HashMap<>(); private final Map<UUID, FloodgatePlayer> players = new ConcurrentHashMap<>();
private final Cache<UUID, FloodgatePlayer> pendingRemove = private final Cache<UUID, FloodgatePlayer> pendingRemove =
CacheBuilder.newBuilder() CacheBuilder.newBuilder()
.expireAfterWrite(20, TimeUnit.SECONDS) .expireAfterWrite(20, TimeUnit.SECONDS)

View File

@@ -38,6 +38,7 @@ import io.netty.util.AttributeKey;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.geysermc.event.PostOrder; import org.geysermc.event.PostOrder;
import org.geysermc.floodgate.addon.data.HandshakeHandlersImpl; import org.geysermc.floodgate.addon.data.HandshakeHandlersImpl;
@@ -87,8 +88,19 @@ public class CommonModule extends AbstractModule {
}); });
ExecutorService commonPool = Executors.newCachedThreadPool(); ExecutorService commonPool = Executors.newCachedThreadPool();
eventBus.subscribe(ShutdownEvent.class, ignored -> commonPool.shutdown(), PostOrder.LAST); ScheduledExecutorService commonScheduledPool = Executors.newSingleThreadScheduledExecutor();
bind(ExecutorService.class).annotatedWith(Names.named("commonPool")).toInstance(commonPool);
eventBus.subscribe(ShutdownEvent.class, ignored -> {
commonPool.shutdown();
commonScheduledPool.shutdown();
}, PostOrder.LAST);
bind(ExecutorService.class)
.annotatedWith(Names.named("commonPool"))
.toInstance(commonPool);
bind(ScheduledExecutorService.class)
.annotatedWith(Names.named("commonScheduledPool"))
.toInstance(commonScheduledPool);
bind(HttpClient.class).in(Singleton.class); bind(HttpClient.class).in(Singleton.class);

View File

@@ -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.lifecycle.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("commonScheduledPool")
private ScheduledExecutorService executorService;
@Inject @Inject
private CommandUtil commandUtil; private CommandUtil commandUtil;
@@ -199,15 +196,6 @@ public class NewsChecker {
activateNews(item); activateNews(item);
} }
public void shutdown() {
executorService.shutdown();
}
@Subscribe
public void onShutdown(ShutdownEvent ignored) {
shutdown();
}
private void activateNews(NewsItem item) { private void activateNews(NewsItem item) {
for (NewsItemAction action : item.getActions()) { for (NewsItemAction action : item.getActions()) {
handleNewsItem(null, item, action); handleNewsItem(null, item, action);

View File

@@ -26,8 +26,11 @@
package org.geysermc.floodgate.util; package org.geysermc.floodgate.util;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.name.Named;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.geysermc.event.Listener; import org.geysermc.event.Listener;
import org.geysermc.event.subscribe.Subscribe; import org.geysermc.event.subscribe.Subscribe;
import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.api.logger.FloodgateLogger;
@@ -41,6 +44,9 @@ public final class PostEnableMessages {
@Inject private FloodgateConfig config; @Inject private FloodgateConfig config;
@Inject private FloodgateLogger logger; @Inject private FloodgateLogger logger;
@Inject
@Named("commonScheduledPool")
private ScheduledExecutorService executorService;
public void add(String[] message, Object... args) { public void add(String[] message, Object... args) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
@@ -93,14 +99,11 @@ public final class PostEnableMessages {
@Subscribe @Subscribe
public void onPostEnable(PostEnableEvent ignored) { public void onPostEnable(PostEnableEvent ignored) {
new Thread(() -> { // normally proxies don't have a lot of plugins, so proxies don't need to sleep as long
// normally proxies don't have a lot of plugins, so proxies don't need to sleep as long executorService.schedule(
try { () -> messages.forEach(logger::warn),
Thread.sleep(config.isProxy() ? 2000 : 5000); config.isProxy() ? 2 : 5,
} catch (InterruptedException ignored1) { TimeUnit.SECONDS
} );
messages.forEach(logger::warn);
}).start();
} }
} }