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:
@@ -32,10 +32,10 @@ import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.inject.Inject;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import org.geysermc.cumulus.form.Form;
|
||||
import org.geysermc.cumulus.form.util.FormBuilder;
|
||||
@@ -51,7 +51,7 @@ import org.geysermc.floodgate.util.HttpClient;
|
||||
import org.geysermc.floodgate.util.Utils;
|
||||
|
||||
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 =
|
||||
CacheBuilder.newBuilder()
|
||||
.expireAfterWrite(20, TimeUnit.SECONDS)
|
||||
|
||||
@@ -38,6 +38,7 @@ import io.netty.util.AttributeKey;
|
||||
import java.nio.file.Path;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.geysermc.event.PostOrder;
|
||||
import org.geysermc.floodgate.addon.data.HandshakeHandlersImpl;
|
||||
@@ -87,8 +88,19 @@ 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);
|
||||
ScheduledExecutorService commonScheduledPool = Executors.newSingleThreadScheduledExecutor();
|
||||
|
||||
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);
|
||||
|
||||
|
||||
@@ -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.lifecycle.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("commonScheduledPool")
|
||||
private ScheduledExecutorService executorService;
|
||||
|
||||
@Inject
|
||||
private CommandUtil commandUtil;
|
||||
@@ -199,15 +196,6 @@ public class NewsChecker {
|
||||
activateNews(item);
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
executorService.shutdown();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onShutdown(ShutdownEvent ignored) {
|
||||
shutdown();
|
||||
}
|
||||
|
||||
private void activateNews(NewsItem item) {
|
||||
for (NewsItemAction action : item.getActions()) {
|
||||
handleNewsItem(null, item, action);
|
||||
|
||||
@@ -26,8 +26,11 @@
|
||||
package org.geysermc.floodgate.util;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.name.Named;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
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;
|
||||
@@ -41,6 +44,9 @@ public final class PostEnableMessages {
|
||||
|
||||
@Inject private FloodgateConfig config;
|
||||
@Inject private FloodgateLogger logger;
|
||||
@Inject
|
||||
@Named("commonScheduledPool")
|
||||
private ScheduledExecutorService executorService;
|
||||
|
||||
public void add(String[] message, Object... args) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
@@ -93,14 +99,11 @@ public final class PostEnableMessages {
|
||||
|
||||
@Subscribe
|
||||
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
|
||||
try {
|
||||
Thread.sleep(config.isProxy() ? 2000 : 5000);
|
||||
} catch (InterruptedException ignored1) {
|
||||
}
|
||||
|
||||
messages.forEach(logger::warn);
|
||||
}).start();
|
||||
// normally proxies don't have a lot of plugins, so proxies don't need to sleep as long
|
||||
executorService.schedule(
|
||||
() -> messages.forEach(logger::warn),
|
||||
config.isProxy() ? 2 : 5,
|
||||
TimeUnit.SECONDS
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user