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(); + } }