From 7c36933c06ca36adcd095315eacec46b5b703d8b Mon Sep 17 00:00:00 2001 From: gamer147 Date: Wed, 3 Jun 2026 14:04:58 -0400 Subject: [PATCH] refactor(battle-node): extract InitNetworkHandler --- SVSim.BattleNode/Sessions/BattleSession.cs | 6 +++++- .../Dispatch/Handlers/InitNetworkHandler.cs | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 SVSim.BattleNode/Sessions/Dispatch/Handlers/InitNetworkHandler.cs diff --git a/SVSim.BattleNode/Sessions/BattleSession.cs b/SVSim.BattleNode/Sessions/BattleSession.cs index 9fb66bc..808437e 100644 --- a/SVSim.BattleNode/Sessions/BattleSession.cs +++ b/SVSim.BattleNode/Sessions/BattleSession.cs @@ -3,6 +3,7 @@ using SVSim.BattleNode.Lifecycle; using SVSim.BattleNode.Protocol; using SVSim.BattleNode.Protocol.Bodies; using SVSim.BattleNode.Sessions.Dispatch; +using SVSim.BattleNode.Sessions.Dispatch.Handlers; using SVSim.BattleNode.Sessions.Participants; namespace SVSim.BattleNode.Sessions; @@ -33,7 +34,10 @@ public sealed class BattleSession // Per-URI handlers consulted before the legacy switch. Populated incrementally (Tasks 5-14); // each registered URI is served by its handler and its legacy switch arm goes dead. private static readonly IReadOnlyDictionary Handlers = - new Dictionary(); + new Dictionary + { + [NetworkBattleUri.InitNetwork] = new InitNetworkHandler(), + }; private FrameDispatchContext BuildContext(IBattleParticipant from, MsgEnvelope env) => new() diff --git a/SVSim.BattleNode/Sessions/Dispatch/Handlers/InitNetworkHandler.cs b/SVSim.BattleNode/Sessions/Dispatch/Handlers/InitNetworkHandler.cs new file mode 100644 index 0000000..f3d8661 --- /dev/null +++ b/SVSim.BattleNode/Sessions/Dispatch/Handlers/InitNetworkHandler.cs @@ -0,0 +1,20 @@ +using SVSim.BattleNode.Lifecycle; +using SVSim.BattleNode.Protocol; + +namespace SVSim.BattleNode.Sessions.Dispatch.Handlers; + +internal sealed class InitNetworkHandler : IFrameHandler +{ + public IReadOnlyList Handle(FrameDispatchContext ctx) + { + if (ctx.SenderPhase != BattleSessionPhase.AwaitingInitNetwork) + return Array.Empty(); + + var routes = new List + { + new(ctx.From, BattleFrames.BuildAck(NetworkBattleUri.InitNetwork), true), + }; + ctx.SenderPhase = BattleSessionPhase.AwaitingInitBattle; + return routes; + } +}