From ba18790156dc172a7a961159b8f7de2735cc7128 Mon Sep 17 00:00:00 2001 From: gamer147 Date: Wed, 3 Jun 2026 20:36:32 -0400 Subject: [PATCH] refactor(battle-node): rename ScriptedLifecycle->ServerBattleFrames, ScriptedProfiles->BattleFrameDefaults MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pure rename. These hold the shared server-authored frame builders used by every battle mode's handshake/mulligan dispatch — the 'Scripted' name was a historical accident that hid the PvP/Bot crossover. No behavior change. Co-Authored-By: Claude Opus 4.8 --- ...ptedProfiles.cs => BattleFrameDefaults.cs} | 10 +++--- ...ptedLifecycle.cs => ServerBattleFrames.cs} | 20 ++++++------ .../Sessions/Dispatch/BattleFrames.cs | 10 +++--- .../Dispatch/Handlers/InitBattleHandler.cs | 4 +-- .../Dispatch/Handlers/LoadedHandler.cs | 4 +-- .../Sessions/Dispatch/Handlers/SwapHandler.cs | 8 ++--- .../Sessions/IBattleParticipant.cs | 2 +- .../Participants/NoOpBotParticipant.cs | 4 +-- .../Sessions/Participants/RealParticipant.cs | 2 +- .../Integration/CaptureConformanceTests.cs | 2 +- ...cleTests.cs => ServerBattleFramesTests.cs} | 32 +++++++++---------- .../Lifecycle/TypedBodyWireShapeTests.cs | 16 +++++----- .../Sessions/BattleSessionDispatchTests.cs | 2 +- .../Participants/NoOpBotParticipantTests.cs | 2 +- 14 files changed, 59 insertions(+), 59 deletions(-) rename SVSim.BattleNode/Lifecycle/{ScriptedProfiles.cs => BattleFrameDefaults.cs} (75%) rename SVSim.BattleNode/Lifecycle/{ScriptedLifecycle.cs => ServerBattleFrames.cs} (90%) rename SVSim.UnitTests/BattleNode/Lifecycle/{ScriptedLifecycleTests.cs => ServerBattleFramesTests.cs} (80%) diff --git a/SVSim.BattleNode/Lifecycle/ScriptedProfiles.cs b/SVSim.BattleNode/Lifecycle/BattleFrameDefaults.cs similarity index 75% rename from SVSim.BattleNode/Lifecycle/ScriptedProfiles.cs rename to SVSim.BattleNode/Lifecycle/BattleFrameDefaults.cs index 3f4b419..ca937bf 100644 --- a/SVSim.BattleNode/Lifecycle/ScriptedProfiles.cs +++ b/SVSim.BattleNode/Lifecycle/BattleFrameDefaults.cs @@ -1,13 +1,13 @@ namespace SVSim.BattleNode.Lifecycle; /// -/// Named constants and templates for the v1 scripted lifecycle. Every value here -/// originated in a real prod frame in -/// data_dumps/captures/battle-traffic_tk2_regular.ndjson; pulling them out -/// of makes the magic numerics navigable and gives +/// Default frame constants templated from TK2 prod captures, shared by the +/// server-authored battle-frame builders. Every value here originated in a real prod +/// frame in data_dumps/captures/battle-traffic_tk2_regular.ndjson; pulling them +/// out of makes the magic numerics navigable and gives /// the seed a single source of truth instead of two duplicated literals. /// -internal static class ScriptedProfiles +internal static class BattleFrameDefaults { // Shared per the spec — selfInfo.seed and oppoInfo.seed always agree. // From frame[2] (Matched). diff --git a/SVSim.BattleNode/Lifecycle/ScriptedLifecycle.cs b/SVSim.BattleNode/Lifecycle/ServerBattleFrames.cs similarity index 90% rename from SVSim.BattleNode/Lifecycle/ScriptedLifecycle.cs rename to SVSim.BattleNode/Lifecycle/ServerBattleFrames.cs index a1389f6..fd8063e 100644 --- a/SVSim.BattleNode/Lifecycle/ScriptedLifecycle.cs +++ b/SVSim.BattleNode/Lifecycle/ServerBattleFrames.cs @@ -10,13 +10,13 @@ namespace SVSim.BattleNode.Lifecycle; /// (Matched / BattleStart / Deal / Swap response / Ready) plus the post-mulligan hand /// computation. Used by every battle mode's handshake/mulligan dispatch arms. Hardcoded /// values are templated from the TK2 prod captures (battle-traffic_tk2_*.ndjson); see -/// for provenance. +/// for provenance. /// -public static class ScriptedLifecycle +public static class ServerBattleFrames { /// - /// Viewer id we present as the opponent on every scripted push. Out-of-range vs. real - /// viewer ids so it can't collide with a real account in the auth pipeline. + /// Viewer id we present as the opponent on every server-authored opponent push. Out-of-range + /// vs. real viewer ids so it can't collide with a real account in the auth pipeline. /// public const long FakeOpponentViewerId = 999_999_999L; @@ -57,8 +57,8 @@ public static class ScriptedLifecycle TurnState: turnState, // 0 = this side goes first, 1 = second. Caller decides. BattleType: selfCtx.BattleType, SelfInfo: new BattleStartSelfInfo( - Rank: ScriptedProfiles.PlayerRank, - BattlePoint: ScriptedProfiles.PlayerBattlePoint, + Rank: BattleFrameDefaults.PlayerRank, + BattlePoint: BattleFrameDefaults.PlayerBattlePoint, ClassId: selfCtx.ClassId, CharaId: selfCtx.CharaId, CardMasterName: selfCtx.CardMasterName), @@ -111,8 +111,8 @@ public static class ScriptedLifecycle EnvelopeForPush(NetworkBattleUri.Swap, new SwapResponseBody(Self: BuildPosIdxList(hand))); - /// Non-interactive opponent (scripted single / AINetwork): oppo is the - /// placeholder (v1 behaviour). + /// Non-interactive opponent (Bot/AI): oppo is the placeholder + /// . public static MsgEnvelope BuildReady(IReadOnlyList hand) => BuildReady(hand, InitialHand); /// Both hands known (the mulligan barrier supplies the opponent's @@ -122,8 +122,8 @@ public static class ScriptedLifecycle new ReadyBody( Self: BuildPosIdxList(selfHand), Oppo: BuildPosIdxList(oppoHand), - IdxChangeSeed: ScriptedProfiles.ReadyIdxChangeSeed, - Spin: ScriptedProfiles.ReadySpin)); + IdxChangeSeed: BattleFrameDefaults.ReadyIdxChangeSeed, + Spin: BattleFrameDefaults.ReadySpin)); private static IReadOnlyList BuildPosIdxList(IReadOnlyList hand) { diff --git a/SVSim.BattleNode/Sessions/Dispatch/BattleFrames.cs b/SVSim.BattleNode/Sessions/Dispatch/BattleFrames.cs index c911a83..7b4b2a3 100644 --- a/SVSim.BattleNode/Sessions/Dispatch/BattleFrames.cs +++ b/SVSim.BattleNode/Sessions/Dispatch/BattleFrames.cs @@ -10,7 +10,7 @@ internal static class BattleFrames { internal static MsgEnvelope BuildAck(NetworkBattleUri uri) => new( uri, - ViewerId: ScriptedLifecycle.FakeOpponentViewerId, + ViewerId: ServerBattleFrames.FakeOpponentViewerId, Uuid: WireConstants.ServerUuid, Bid: null, Try: 0, @@ -21,7 +21,7 @@ internal static class BattleFrames internal static MsgEnvelope BuildTurnEndBroadcast() => new( NetworkBattleUri.TurnEnd, - ViewerId: ScriptedLifecycle.FakeOpponentViewerId, + ViewerId: ServerBattleFrames.FakeOpponentViewerId, Uuid: WireConstants.ServerUuid, Bid: null, Try: 0, @@ -32,18 +32,18 @@ internal static class BattleFrames internal static MsgEnvelope BuildJudgeBroadcast() => new( NetworkBattleUri.Judge, - ViewerId: ScriptedLifecycle.FakeOpponentViewerId, + ViewerId: ServerBattleFrames.FakeOpponentViewerId, Uuid: WireConstants.ServerUuid, Bid: null, Try: 0, Cat: EmitCategory.Battle, PubSeq: null, PlaySeq: null, - Body: new JudgeBody(Spin: ScriptedProfiles.OpponentJudgeSpin)); + Body: new JudgeBody(Spin: BattleFrameDefaults.OpponentJudgeSpin)); internal static MsgEnvelope BuildBattleFinish(BattleResult result) => new( NetworkBattleUri.BattleFinish, - ViewerId: ScriptedLifecycle.FakeOpponentViewerId, + ViewerId: ServerBattleFrames.FakeOpponentViewerId, Uuid: WireConstants.ServerUuid, Bid: null, Try: 0, diff --git a/SVSim.BattleNode/Sessions/Dispatch/Handlers/InitBattleHandler.cs b/SVSim.BattleNode/Sessions/Dispatch/Handlers/InitBattleHandler.cs index 44ba643..053c2fa 100644 --- a/SVSim.BattleNode/Sessions/Dispatch/Handlers/InitBattleHandler.cs +++ b/SVSim.BattleNode/Sessions/Dispatch/Handlers/InitBattleHandler.cs @@ -23,9 +23,9 @@ internal sealed class InitBattleHandler : IFrameHandler { var r = new List { - new(ctx.From, ScriptedLifecycle.BuildMatched( + new(ctx.From, ServerBattleFrames.BuildMatched( ctx.From.Context, ctx.Other.Context, ctx.From.ViewerId, ctx.Other.ViewerId, - ctx.BattleId, ScriptedProfiles.BattleSeed), false), + ctx.BattleId, BattleFrameDefaults.BattleSeed), false), }; ctx.SenderPhase = BattleSessionPhase.AwaitingLoaded; return r; diff --git a/SVSim.BattleNode/Sessions/Dispatch/Handlers/LoadedHandler.cs b/SVSim.BattleNode/Sessions/Dispatch/Handlers/LoadedHandler.cs index 9d2f326..a1bdfad 100644 --- a/SVSim.BattleNode/Sessions/Dispatch/Handlers/LoadedHandler.cs +++ b/SVSim.BattleNode/Sessions/Dispatch/Handlers/LoadedHandler.cs @@ -21,9 +21,9 @@ internal sealed class LoadedHandler : IFrameHandler var turnState = ReferenceEquals(ctx.From, ctx.A) ? 0 : 1; var r = new List { - new(ctx.From, ScriptedLifecycle.BuildBattleStart( + new(ctx.From, ServerBattleFrames.BuildBattleStart( ctx.From.Context, ctx.Other.Context, ctx.From.ViewerId, turnState), false), - new(ctx.From, ScriptedLifecycle.BuildDeal(), false), + new(ctx.From, ServerBattleFrames.BuildDeal(), false), }; ctx.SenderPhase = BattleSessionPhase.AwaitingSwap; return r; diff --git a/SVSim.BattleNode/Sessions/Dispatch/Handlers/SwapHandler.cs b/SVSim.BattleNode/Sessions/Dispatch/Handlers/SwapHandler.cs index efc2db9..b4837ce 100644 --- a/SVSim.BattleNode/Sessions/Dispatch/Handlers/SwapHandler.cs +++ b/SVSim.BattleNode/Sessions/Dispatch/Handlers/SwapHandler.cs @@ -12,10 +12,10 @@ internal sealed class SwapHandler : IFrameHandler return Array.Empty(); var routes = new List(); - var hand = ScriptedLifecycle.ComputeHandAfterSwap(BattleFrames.ExtractIdxList(ctx.Env)); + var hand = ServerBattleFrames.ComputeHandAfterSwap(BattleFrames.ExtractIdxList(ctx.Env)); // SwapResponse is always immediate — completes the sender's own mulligan UI. - routes.Add(new DispatchRoute(ctx.From, ScriptedLifecycle.BuildSwapResponse(hand), false)); + routes.Add(new DispatchRoute(ctx.From, ServerBattleFrames.BuildSwapResponse(hand), false)); ctx.State.PostSwapHands[ctx.From] = hand; ctx.SenderPhase = BattleSessionPhase.AfterReady; @@ -29,8 +29,8 @@ internal sealed class SwapHandler : IFrameHandler var opponent = ReferenceEquals(p, ctx.A) ? ctx.B : ctx.A; var ready = opponent is IHasHandshakePhase && ctx.State.PostSwapHands.TryGetValue(opponent, out var oppoHand) - ? ScriptedLifecycle.BuildReady(ctx.State.PostSwapHands[p], oppoHand) - : ScriptedLifecycle.BuildReady(ctx.State.PostSwapHands[p]); + ? ServerBattleFrames.BuildReady(ctx.State.PostSwapHands[p], oppoHand) + : ServerBattleFrames.BuildReady(ctx.State.PostSwapHands[p]); routes.Add(new DispatchRoute(p, ready, false)); } } diff --git a/SVSim.BattleNode/Sessions/IBattleParticipant.cs b/SVSim.BattleNode/Sessions/IBattleParticipant.cs index 23152e1..cb31188 100644 --- a/SVSim.BattleNode/Sessions/IBattleParticipant.cs +++ b/SVSim.BattleNode/Sessions/IBattleParticipant.cs @@ -14,7 +14,7 @@ namespace SVSim.BattleNode.Sessions; public interface IBattleParticipant : IAsyncDisposable { /// Real viewer id, or a synthetic stable id for bots - /// (). + /// (). long ViewerId { get; } /// Per-battle MatchContext snapshot, used for building Matched/BattleStart diff --git a/SVSim.BattleNode/Sessions/Participants/NoOpBotParticipant.cs b/SVSim.BattleNode/Sessions/Participants/NoOpBotParticipant.cs index 3d5048f..65fc111 100644 --- a/SVSim.BattleNode/Sessions/Participants/NoOpBotParticipant.cs +++ b/SVSim.BattleNode/Sessions/Participants/NoOpBotParticipant.cs @@ -8,13 +8,13 @@ namespace SVSim.BattleNode.Sessions.Participants; /// Silent participant — produces no frames, swallows everything pushed to it. /// Used as the "other" participant in sessions, where /// the real opponent runs in the client and the server has no opponent-side state -/// to model. ViewerId is ; +/// to model. ViewerId is ; /// Context is a fixed stub (irrelevant — never read because no frames are pushed /// to the other side). /// public sealed class NoOpBotParticipant : IBattleParticipant { - public long ViewerId => ScriptedLifecycle.FakeOpponentViewerId; + public long ViewerId => ServerBattleFrames.FakeOpponentViewerId; public MatchContext Context { get; } = new( SelfDeckCardIds: Array.Empty(), ClassId: "0", CharaId: "0", CardMasterName: "card_master_node_10015", diff --git a/SVSim.BattleNode/Sessions/Participants/RealParticipant.cs b/SVSim.BattleNode/Sessions/Participants/RealParticipant.cs index dfd53d0..727fc0e 100644 --- a/SVSim.BattleNode/Sessions/Participants/RealParticipant.cs +++ b/SVSim.BattleNode/Sessions/Participants/RealParticipant.cs @@ -369,7 +369,7 @@ public sealed class RealParticipant : IBattleParticipant, IHasHandshakePhase } var aliveEnv = new MsgEnvelope( Uri: NetworkBattleUri.Gungnir, - ViewerId: SVSim.BattleNode.Lifecycle.ScriptedLifecycle.FakeOpponentViewerId, + ViewerId: SVSim.BattleNode.Lifecycle.ServerBattleFrames.FakeOpponentViewerId, Uuid: WireConstants.ServerUuid, Bid: null, Try: 0, diff --git a/SVSim.UnitTests/BattleNode/Integration/CaptureConformanceTests.cs b/SVSim.UnitTests/BattleNode/Integration/CaptureConformanceTests.cs index 35234ec..dc20179 100644 --- a/SVSim.UnitTests/BattleNode/Integration/CaptureConformanceTests.cs +++ b/SVSim.UnitTests/BattleNode/Integration/CaptureConformanceTests.cs @@ -34,7 +34,7 @@ namespace SVSim.UnitTests.BattleNode.Integration; /// Coverage: a two-client PvP session emits all ten server-authored URIs /// (InitNetwork, Matched, BattleStart, Deal, Swap, Ready, TurnStart, TurnEnd, Judge, /// BattleFinish). PvP authors the handshake/mulligan frames through the same shared -/// builders, and the turn cycle +/// builders, and the turn cycle /// (TurnStart/TurnEnd/Judge) falls out of the real two-client handover. Forwarded frames /// (PlayActions / TurnEndActions / ChatStamp / TurnEndFinal) relay the /// client's own bytes verbatim, so their shape is the client's contract, not ours — out of scope diff --git a/SVSim.UnitTests/BattleNode/Lifecycle/ScriptedLifecycleTests.cs b/SVSim.UnitTests/BattleNode/Lifecycle/ServerBattleFramesTests.cs similarity index 80% rename from SVSim.UnitTests/BattleNode/Lifecycle/ScriptedLifecycleTests.cs rename to SVSim.UnitTests/BattleNode/Lifecycle/ServerBattleFramesTests.cs index b3a73cc..535861b 100644 --- a/SVSim.UnitTests/BattleNode/Lifecycle/ScriptedLifecycleTests.cs +++ b/SVSim.UnitTests/BattleNode/Lifecycle/ServerBattleFramesTests.cs @@ -7,14 +7,14 @@ using SVSim.BattleNode.Protocol.Bodies; namespace SVSim.UnitTests.BattleNode.Lifecycle; [TestFixture] -public class ScriptedLifecycleTests +public class ServerBattleFramesTests { [Test] public void BuildMatched_PutsOppoIdInSelfInfoEqualToTheRealOpponentVid() { - var env = ScriptedLifecycle.BuildMatched(FixtureCtx(), ScriptedBotCtx(), + var env = ServerBattleFrames.BuildMatched(FixtureCtx(), ScriptedBotCtx(), selfViewerId: 906243102, oppoViewerId: 847666884, - battleId: "b", seed: ScriptedProfiles.BattleSeed); + battleId: "b", seed: BattleFrameDefaults.BattleSeed); Assert.That(env.Uri, Is.EqualTo(NetworkBattleUri.Matched)); var body = (MatchedBody)env.Body; @@ -26,7 +26,7 @@ public class ScriptedLifecycleTests [Test] public void BuildMatched_ContainsThirtyCardSelfDeck() { - var env = ScriptedLifecycle.BuildMatched(FixtureCtx(), ScriptedBotCtx(), 1, 2, "b", ScriptedProfiles.BattleSeed); + var env = ServerBattleFrames.BuildMatched(FixtureCtx(), ScriptedBotCtx(), 1, 2, "b", BattleFrameDefaults.BattleSeed); var body = (MatchedBody)env.Body; Assert.That(body.SelfDeck.Count, Is.EqualTo(30)); } @@ -35,7 +35,7 @@ public class ScriptedLifecycleTests public void BuildMatched_deck_idxs_pair_1to30_with_context_card_ids() { var draftedDeck = Enumerable.Range(1, 30).Select(i => 200_000_000L + i).ToList(); - var env = ScriptedLifecycle.BuildMatched(FixtureCtx(draftedDeck), ScriptedBotCtx(), 1, 2, "b", ScriptedProfiles.BattleSeed); + var env = ServerBattleFrames.BuildMatched(FixtureCtx(draftedDeck), ScriptedBotCtx(), 1, 2, "b", BattleFrameDefaults.BattleSeed); var body = (MatchedBody)env.Body; for (int i = 0; i < 30; i++) @@ -56,7 +56,7 @@ public class ScriptedLifecycleTests EmblemId = "888", DegreeId = "777", FieldId = 42, IsOfficial = 1, }; - var env = ScriptedLifecycle.BuildMatched(ctx, ScriptedBotCtx(), 1, 2, "b", ScriptedProfiles.BattleSeed); + var env = ServerBattleFrames.BuildMatched(ctx, ScriptedBotCtx(), 1, 2, "b", BattleFrameDefaults.BattleSeed); var body = (MatchedBody)env.Body; Assert.That(body.SelfInfo.CountryCode, Is.EqualTo("JPN")); @@ -71,7 +71,7 @@ public class ScriptedLifecycleTests [Test] public void BuildBattleStart_HasTurnStateZero_AndUsesContextBattleType() { - var env = ScriptedLifecycle.BuildBattleStart(FixtureCtx(), ScriptedBotCtx(), selfViewerId: 1, turnState: 0); + var env = ServerBattleFrames.BuildBattleStart(FixtureCtx(), ScriptedBotCtx(), selfViewerId: 1, turnState: 0); var body = (BattleStartBody)env.Body; Assert.That(body.TurnState, Is.EqualTo(0)); Assert.That(body.BattleType, Is.EqualTo(11)); @@ -87,7 +87,7 @@ public class ScriptedLifecycleTests BattleType = 42, }; - var env = ScriptedLifecycle.BuildBattleStart(ctx, ScriptedBotCtx(), selfViewerId: 1, turnState: 0); + var env = ServerBattleFrames.BuildBattleStart(ctx, ScriptedBotCtx(), selfViewerId: 1, turnState: 0); var body = (BattleStartBody)env.Body; Assert.That(body.SelfInfo.ClassId, Is.EqualTo("7")); @@ -99,7 +99,7 @@ public class ScriptedLifecycleTests [Test] public void BuildDeal_HasThreeSelfAndThreeOppoEntries() { - var env = ScriptedLifecycle.BuildDeal(); + var env = ServerBattleFrames.BuildDeal(); var body = (DealBody)env.Body; Assert.That(body.Self.Count, Is.EqualTo(3)); Assert.That(body.Oppo.Count, Is.EqualTo(3)); @@ -108,28 +108,28 @@ public class ScriptedLifecycleTests [Test] public void ComputeHandAfterSwap_NoSwap_ReturnsInitialHand() { - var hand = ScriptedLifecycle.ComputeHandAfterSwap(Array.Empty()); + var hand = ServerBattleFrames.ComputeHandAfterSwap(Array.Empty()); Assert.That(hand, Is.EqualTo(new long[] { 1, 2, 3 })); } [Test] public void ComputeHandAfterSwap_SwapMiddleCard_ReplacesWithFreshDeckIdx() { - var hand = ScriptedLifecycle.ComputeHandAfterSwap(new long[] { 2 }); + var hand = ServerBattleFrames.ComputeHandAfterSwap(new long[] { 2 }); Assert.That(hand, Is.EqualTo(new long[] { 1, 4, 3 })); } [Test] public void ComputeHandAfterSwap_SwapAll_ReplacesAllWithFreshDeckIdxs() { - var hand = ScriptedLifecycle.ComputeHandAfterSwap(new long[] { 1, 2, 3 }); + var hand = ServerBattleFrames.ComputeHandAfterSwap(new long[] { 1, 2, 3 }); Assert.That(hand, Is.EqualTo(new long[] { 4, 5, 6 })); } [Test] public void BuildSwapResponse_RendersGivenHandAsPositions() { - var env = ScriptedLifecycle.BuildSwapResponse(new long[] { 1, 4, 3 }); + var env = ServerBattleFrames.BuildSwapResponse(new long[] { 1, 4, 3 }); var body = (SwapResponseBody)env.Body; Assert.That(body.Self.Count, Is.EqualTo(3)); Assert.That(body.Self[1].Idx, Is.EqualTo(4)); @@ -138,7 +138,7 @@ public class ScriptedLifecycleTests [Test] public void BuildReady_IncludesIdxChangeSeedAndSpin_AndUsesGivenHand() { - var env = ScriptedLifecycle.BuildReady(new long[] { 1, 4, 3 }); + var env = ServerBattleFrames.BuildReady(new long[] { 1, 4, 3 }); var body = (ReadyBody)env.Body; Assert.That(body.IdxChangeSeed, Is.EqualTo(771_335_280)); Assert.That(body.Spin, Is.EqualTo(243)); @@ -148,7 +148,7 @@ public class ScriptedLifecycleTests [Test] public void BuildReady_two_arg_sets_oppo_to_supplied_hand() { - var env = ScriptedLifecycle.BuildReady(new long[] { 1, 4, 3 }, new long[] { 1, 2, 6 }); + var env = ServerBattleFrames.BuildReady(new long[] { 1, 4, 3 }, new long[] { 1, 2, 6 }); var body = (ReadyBody)env.Body; Assert.That(body.Self.Select(p => p.Idx), Is.EqualTo(new[] { 1, 4, 3 })); @@ -159,7 +159,7 @@ public class ScriptedLifecycleTests [Test] public void BuildReady_one_arg_defaults_oppo_to_InitialHand() { - var env = ScriptedLifecycle.BuildReady(new long[] { 1, 4, 3 }); + var env = ServerBattleFrames.BuildReady(new long[] { 1, 4, 3 }); var body = (ReadyBody)env.Body; Assert.That(body.Oppo.Select(p => p.Idx), Is.EqualTo(new[] { 1, 2, 3 }), diff --git a/SVSim.UnitTests/BattleNode/Lifecycle/TypedBodyWireShapeTests.cs b/SVSim.UnitTests/BattleNode/Lifecycle/TypedBodyWireShapeTests.cs index a37cfff..fbc5d2a 100644 --- a/SVSim.UnitTests/BattleNode/Lifecycle/TypedBodyWireShapeTests.cs +++ b/SVSim.UnitTests/BattleNode/Lifecycle/TypedBodyWireShapeTests.cs @@ -27,8 +27,8 @@ public class TypedBodyWireShapeTests // Matching.StartBattleLoad reads it back, and GetSelfDeck().Select(...) crashes // with "Value cannot be null. Parameter name: source". The prod wire format // emits envelope keys (uri first) before body keys; we must too. - var env = ScriptedLifecycle.BuildMatched(FixtureCtx(), ScriptedBotCtx(), - selfViewerId: 1, oppoViewerId: 2, battleId: "b", seed: ScriptedProfiles.BattleSeed); + var env = ServerBattleFrames.BuildMatched(FixtureCtx(), ScriptedBotCtx(), + selfViewerId: 1, oppoViewerId: 2, battleId: "b", seed: BattleFrameDefaults.BattleSeed); var json = MsgEnvelope.ToJson(env); var uriIdx = json.IndexOf("\"uri\":", StringComparison.Ordinal); @@ -45,9 +45,9 @@ public class TypedBodyWireShapeTests [Test] public void BuildMatched_SerializesAllWireKeysExpectedByTheClient() { - var env = ScriptedLifecycle.BuildMatched(FixtureCtx(), ScriptedBotCtx(), + var env = ServerBattleFrames.BuildMatched(FixtureCtx(), ScriptedBotCtx(), selfViewerId: 906243102, oppoViewerId: 847666884, battleId: "597830888107", - seed: ScriptedProfiles.BattleSeed); + seed: BattleFrameDefaults.BattleSeed); var json = MsgEnvelope.ToJson(env); var node = JsonNode.Parse(json)!.AsObject(); @@ -86,7 +86,7 @@ public class TypedBodyWireShapeTests [Test] public void BuildBattleStart_SerializesAllWireKeysAndPreservesBattlePointAsymmetry() { - var env = ScriptedLifecycle.BuildBattleStart(FixtureCtx(), ScriptedBotCtx(), selfViewerId: 906243102, turnState: 0); + var env = ServerBattleFrames.BuildBattleStart(FixtureCtx(), ScriptedBotCtx(), selfViewerId: 906243102, turnState: 0); var json = MsgEnvelope.ToJson(env); var node = JsonNode.Parse(json)!.AsObject(); @@ -109,7 +109,7 @@ public class TypedBodyWireShapeTests [Test] public void BuildDeal_SerializesSelfAndOppoArraysWithPosIdxShape() { - var env = ScriptedLifecycle.BuildDeal(); + var env = ServerBattleFrames.BuildDeal(); var json = MsgEnvelope.ToJson(env); var node = JsonNode.Parse(json)!.AsObject(); @@ -125,7 +125,7 @@ public class TypedBodyWireShapeTests [Test] public void BuildSwapResponse_SerializesSelfWithoutOppo() { - var env = ScriptedLifecycle.BuildSwapResponse(new long[] { 1, 4, 3 }); + var env = ServerBattleFrames.BuildSwapResponse(new long[] { 1, 4, 3 }); var json = MsgEnvelope.ToJson(env); var node = JsonNode.Parse(json)!.AsObject(); @@ -137,7 +137,7 @@ public class TypedBodyWireShapeTests [Test] public void BuildReady_SerializesAllFieldsIncludingSeedAndSpin() { - var env = ScriptedLifecycle.BuildReady(new long[] { 1, 4, 3 }); + var env = ServerBattleFrames.BuildReady(new long[] { 1, 4, 3 }); var json = MsgEnvelope.ToJson(env); var node = JsonNode.Parse(json)!.AsObject(); diff --git a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs index bfd1b3b..d9409da 100644 --- a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs +++ b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs @@ -412,7 +412,7 @@ public class BattleSessionDispatchTests private static (BattleSession, FakeRealParticipant, FakeParticipant) NewBotSession() { var a = new FakeRealParticipant(viewerId: 1001, PlayerACtx()); - var b = new FakeParticipant(viewerId: ScriptedLifecycle.FakeOpponentViewerId, NoOpBotContext()); + var b = new FakeParticipant(viewerId: ServerBattleFrames.FakeOpponentViewerId, NoOpBotContext()); var s = new BattleSession("bid-bot-1", BattleType.Bot, a, b, NullLogger.Instance); return (s, a, b); } diff --git a/SVSim.UnitTests/BattleNode/Sessions/Participants/NoOpBotParticipantTests.cs b/SVSim.UnitTests/BattleNode/Sessions/Participants/NoOpBotParticipantTests.cs index 153bdb7..00090ab 100644 --- a/SVSim.UnitTests/BattleNode/Sessions/Participants/NoOpBotParticipantTests.cs +++ b/SVSim.UnitTests/BattleNode/Sessions/Participants/NoOpBotParticipantTests.cs @@ -39,6 +39,6 @@ public class NoOpBotParticipantTests public void ViewerId_is_FakeOpponent() { var p = new NoOpBotParticipant(); - Assert.That(p.ViewerId, Is.EqualTo(SVSim.BattleNode.Lifecycle.ScriptedLifecycle.FakeOpponentViewerId)); + Assert.That(p.ViewerId, Is.EqualTo(SVSim.BattleNode.Lifecycle.ServerBattleFrames.FakeOpponentViewerId)); } }