From 1f35f3db605cc3bfc7bb580d107590b55e337901 Mon Sep 17 00:00:00 2001 From: D4VID Date: Tue, 8 Jul 2025 15:36:05 +0200 Subject: [PATCH] Utilize the optional packet framework --- .../src/client/CriticalPathAnalyzerClient.cs | 7 +++- .../network/AnnounceModPacketHandler.cs | 21 ---------- .../client/tool/CriticalPathAnalyzerTool.cs | 6 +++ .../src/server/CriticalPathAnalyzerServer.cs | 42 +++---------------- .../network/ClientJoinedPacketHandler.cs | 16 ------- .../shared/packets/s2c/AnnounceModPresence.cs | 10 ----- 6 files changed, 17 insertions(+), 85 deletions(-) delete mode 100644 CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/network/AnnounceModPacketHandler.cs delete mode 100644 CriticalPathAnalyzer/CriticalPathAnalyzer/src/server/network/ClientJoinedPacketHandler.cs delete mode 100644 CriticalPathAnalyzer/CriticalPathAnalyzer/src/shared/packets/s2c/AnnounceModPresence.cs diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerClient.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerClient.cs index f1b99c1..3c21a6c 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerClient.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerClient.cs @@ -3,6 +3,7 @@ using CriticalPathAnalyzer.Client.Network; using CriticalPathAnalyzer.Client.Tool; using CriticalPathAnalyzer.Shared.Packets.S2C; using EccsLogicWorldAPI.Client.Injectors; +using EccsLogicWorldAPI.Client.PacketIndexOrdering; using FancyInput; using LogicAPI.Client; using LogicLog; @@ -33,9 +34,11 @@ namespace CriticalPathAnalyzer.Client { } ); - // Inject packet handlers - RawPacketHandlerInjector.addPacketHandler(new AnnounceModPacketHandler(Manifest.Version)); + // Register a handler for the server response packet RawPacketHandlerInjector.addPacketHandler(new AnalyzePathResponseHandler()); + + // Mark it as optional so that the game works even if the mod is not present on one end + PacketIndexOrdering.markModAsOptional(GetType().Assembly); Logger.Info("CriticalPathAnalyzer mod loaded"); } diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/network/AnnounceModPacketHandler.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/network/AnnounceModPacketHandler.cs deleted file mode 100644 index 6791b2e..0000000 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/network/AnnounceModPacketHandler.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using CriticalPathAnalyzer.Shared.Packets.S2C; -using LogicWorld.SharedCode.Networking; - -namespace CriticalPathAnalyzer.Client.Network { - public class AnnounceModPacketHandler : PacketHandler { - private readonly Version _version; - - public AnnounceModPacketHandler(Version version) { - _version = version; - } - - public override void Handle(AnnounceModPresence packet, HandlerContext context) { - if (packet.Version == _version) { - CriticalPathAnalyzerClient.LoggerInstance.Info($"Mod is supported on the server: version={packet.Version}"); - } else { - CriticalPathAnalyzerClient.LoggerInstance.Error($"Mod version mismatch: client={_version}, server={packet.Version}"); - } - } - } -} \ No newline at end of file diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/CriticalPathAnalyzerTool.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/CriticalPathAnalyzerTool.cs index b453eee..2e84daf 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/CriticalPathAnalyzerTool.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/CriticalPathAnalyzerTool.cs @@ -1,6 +1,7 @@ using System; using CriticalPathAnalyzer.Shared.Packets.C2S; using CriticalPathAnalyzer.Shared.Packets.S2C; +using EccsLogicWorldAPI.Client.PacketIndexOrdering; using JimmysUnityUtilities; using LogicAPI.Data; using LogicLog; @@ -136,6 +137,11 @@ namespace CriticalPathAnalyzer.Client.Tool { _logger.Error("Invalid pegs"); return; } + + if (!PacketIndexOrdering.doesServerSupportPacket(typeof(AnalyzePathRequest))) { + _logger.Error("Server doesn't support this mod"); + return; + } _currentRequestGuid = Guid.NewGuid(); Instances.SendData.Send(new AnalyzePathRequest { diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/server/CriticalPathAnalyzerServer.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/server/CriticalPathAnalyzerServer.cs index 740527d..c0db892 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/server/CriticalPathAnalyzerServer.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/server/CriticalPathAnalyzerServer.cs @@ -1,26 +1,20 @@ using System; -using System.Collections.Generic; -using System.Linq; using CriticalPathAnalyzer.Server.Network; using CriticalPathAnalyzer.Server.Tool; using CriticalPathAnalyzer.Shared.Packets.S2C; using EccsLogicWorldAPI.Server; using EccsLogicWorldAPI.Server.Injectors; -using EccsLogicWorldAPI.Shared.PacketWrapper; +using EccsLogicWorldAPI.Server.PacketIndexOrdering; using LogicAPI.Data; using LogicAPI.Networking; -using LogicAPI.Networking.Packets.Initialization; using LogicAPI.Server; using LogicAPI.Server.Networking; -using LogicAPI.Server.Networking.ClientVerification; using LogicLog; -using LogicWorld.SharedCode.Networking; namespace CriticalPathAnalyzer.Server { // ReSharper disable once ClassNeverInstantiated.Global - public class CriticalPathAnalyzerServer : ServerMod, IClientVerifier { + public class CriticalPathAnalyzerServer : ServerMod { private NetworkServer _networkServer; - private readonly Dictionary _playerHasWireTracer = new Dictionary(); public static ILogicLogger LoggerInstance; @@ -33,35 +27,11 @@ namespace CriticalPathAnalyzer.Server { throw new Exception("Could not get Service 'NetworkServer'."); } - // Inject client verifier: - RawJoinVerifierInjector.addVerifier(this); - PacketHandlerManager.getCustomPacketHandler() - .addHandlerToEnd(new ClientJoinedPacketHandler(this)); + // Register a handler for the client request packet RawPacketHandlerInjector.addPacketHandler(new CriticalPathAnalyzerRequestHandler(this)); - } - - /// - /// Gets called before a player (client) joins the server. - /// Used to check if the player has this mod installed - /// - public void Verify(VerificationContext ctx) { - bool hasMod = ctx.ApprovalPacket.ClientMods.Contains((Manifest.ID, Manifest.Version)); - string playerName = ctx.PlayerID.Name; - _playerHasWireTracer[playerName] = hasMod; - LoggerInstance.Info($"Verifying player {playerName}: hasMod={hasMod}"); - } - - /// - /// Gets called after verifying a connecting player. - /// If the player has this mod installed, send a packet informing about the mod's presence on the server. - /// - public void PlayerJoined(PlayerData playerData, HandlerContext context) { - _playerHasWireTracer.TryGetValue(playerData.Name, out bool hasWireTracer); - if (hasWireTracer) { - _networkServer.Send(context.Sender, new AnnounceModPresence() { - Version = Manifest.Version - }); - } + + // Mark it as optional so that the game works even if the mod is not present on one end + PacketIndexOrdering.markModAsOptional(GetType().Assembly); } /// diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/server/network/ClientJoinedPacketHandler.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/server/network/ClientJoinedPacketHandler.cs deleted file mode 100644 index 26ba933..0000000 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/server/network/ClientJoinedPacketHandler.cs +++ /dev/null @@ -1,16 +0,0 @@ -using EccsLogicWorldAPI.Shared.PacketWrapper; -using LogicAPI.Networking.Packets.Initialization; -using LogicWorld.SharedCode.Networking; - -namespace CriticalPathAnalyzer.Server.Network { - public class ClientJoinedPacketHandler : CustomPacketHandler { - private readonly CriticalPathAnalyzerServer _criticalPathAnalyzerServer; - public ClientJoinedPacketHandler(CriticalPathAnalyzerServer criticalPathAnalyzerServer) { - _criticalPathAnalyzerServer = criticalPathAnalyzerServer; - } - - public override void handle(ref bool isCancelled, ref ClientLoadedWorldPacket packet, HandlerContext context) { - _criticalPathAnalyzerServer.PlayerJoined(packet.PlayerData, context); - } - } -} \ No newline at end of file diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/shared/packets/s2c/AnnounceModPresence.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/shared/packets/s2c/AnnounceModPresence.cs deleted file mode 100644 index 7991c5e..0000000 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/shared/packets/s2c/AnnounceModPresence.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using LogicAPI.Networking.Packets; -using MessagePack; - -namespace CriticalPathAnalyzer.Shared.Packets.S2C { - [MessagePackObject] - public class AnnounceModPresence : Packet { - [Key(0)] public Version Version; - } -} \ No newline at end of file