From 2f42cf93664670b7769bf58ee45d30faf619bf13 Mon Sep 17 00:00:00 2001 From: devbeni Date: Sun, 14 Dec 2025 10:50:57 +0100 Subject: [PATCH] Fix: Server event handler duplication and null safety MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove static constructor that registered MessageReceived handler - Add proper cleanup in StartServer() before creating new instance - Add null checks in IsRunning, Update(), and OnApplicationQuit() - Prevents double event handler registration on reconnect 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- KCServer.cs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/KCServer.cs b/KCServer.cs index 0648689..04b55d5 100644 --- a/KCServer.cs +++ b/KCServer.cs @@ -18,18 +18,22 @@ namespace KCM { public class KCServer : MonoBehaviour { - public static Server server = new Server(Main.steamServer); + public static Server server = null; public static bool started = false; - static KCServer() - { - //server.registerMessageHandler(typeof(KCServer).GetMethod("ClientJoined")); - - server.MessageReceived += PacketHandler.HandlePacketServer; - } - public static void StartServer() { + // Stop and cleanup existing server if running + if (server != null) + { + if (server.IsRunning) + { + server.Stop(); + } + // Unsubscribe old event handlers to prevent memory leaks + server.MessageReceived -= PacketHandler.HandlePacketServer; + } + server = new Server(Main.steamServer); server.MessageReceived += PacketHandler.HandlePacketServer; @@ -95,16 +99,18 @@ namespace KCM } }*/ - public static bool IsRunning { get { return server.IsRunning; } } + public static bool IsRunning { get { return server != null && server.IsRunning; } } private void Update() { - server.Update(); + if (server != null) + server.Update(); } private void OnApplicationQuit() { - server.Stop(); + if (server != null && server.IsRunning) + server.Stop(); } private void Preload(KCModHelper helper)