From c2b887f5a7b0425ffa4cbee20cd08069fd7c68e6 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Thu, 27 Oct 2022 15:12:07 -0400 Subject: [PATCH] Close all skin sockets on shutdown (#363) --- .../geysermc/floodgate/module/CommonModule.java | 4 +++- .../floodgate/skin/SkinUploadManager.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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 050c4925..c597922c 100644 --- a/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java +++ b/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java @@ -170,7 +170,9 @@ public class CommonModule extends AbstractModule { FloodgateApi api, SkinApplier skinApplier, FloodgateLogger logger) { - return new SkinUploadManager(api, skinApplier, logger); + SkinUploadManager manager = new SkinUploadManager(api, skinApplier, logger); + eventBus.register(manager); + return manager; } @Provides diff --git a/core/src/main/java/org/geysermc/floodgate/skin/SkinUploadManager.java b/core/src/main/java/org/geysermc/floodgate/skin/SkinUploadManager.java index a6c49395..1603723d 100644 --- a/core/src/main/java/org/geysermc/floodgate/skin/SkinUploadManager.java +++ b/core/src/main/java/org/geysermc/floodgate/skin/SkinUploadManager.java @@ -29,9 +29,13 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import lombok.AllArgsConstructor; +import org.geysermc.event.Listener; +import org.geysermc.event.subscribe.Subscribe; import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.api.logger.FloodgateLogger; +import org.geysermc.floodgate.event.ShutdownEvent; +@Listener @AllArgsConstructor public final class SkinUploadManager { private final Int2ObjectMap connections = @@ -53,4 +57,16 @@ public final class SkinUploadManager { public void removeConnection(int id, SkinUploadSocket socket) { connections.remove(id, socket); } + + public void closeAllSockets() { + for (SkinUploadSocket socket : connections.values()) { + socket.close(); + } + connections.clear(); + } + + @Subscribe + public void onShutdown(ShutdownEvent ignored) { + closeAllSockets(); + } }