feat(battle-node): thread MatchContext through bridge to BattleSession
IMatchingBridge.RegisterPendingBattle now takes a MatchContext; PendingBattle carries it; BattleSession stores it. ArenaTwoPickBattleController builds ctx from IMatchContextBuilder. ScriptedLifecycle still uses ScriptedProfiles for the player half — Tasks 5/6 migrate the lifecycle. Existing tests updated: MatchingBridgeTests, BattleNodeFlowTests, InMemoryBattleSessionStoreTests, BattleSessionDispatchTests, BattleSession PumpTests, ArenaTwoPickBattleControllerTests (which now seeds a TK2 run + adds a no-active-run 400 case). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@ using System.Text;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using NUnit.Framework;
|
||||
using SVSim.BattleNode.Bridge;
|
||||
using SVSim.BattleNode.Protocol;
|
||||
using SVSim.BattleNode.Sessions;
|
||||
using SVSim.BattleNode.Wire;
|
||||
@@ -39,7 +40,7 @@ public class BattleSessionPumpTests
|
||||
{
|
||||
var ws = new TestWebSocket();
|
||||
var session = new BattleSession(
|
||||
ws: ws, battleId: "bid-pump", viewerId: 906243102,
|
||||
ws: ws, battleId: "bid-pump", viewerId: 906243102, context: FixtureCtx(),
|
||||
log: NullLogger<BattleSession>.Instance);
|
||||
|
||||
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(8));
|
||||
@@ -84,7 +85,7 @@ public class BattleSessionPumpTests
|
||||
{
|
||||
var ws = new TestWebSocket();
|
||||
var session = new BattleSession(
|
||||
ws: ws, battleId: "bid-cancel", viewerId: 906243102,
|
||||
ws: ws, battleId: "bid-cancel", viewerId: 906243102, context: FixtureCtx(),
|
||||
log: NullLogger<BattleSession>.Instance);
|
||||
|
||||
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(8));
|
||||
@@ -127,7 +128,7 @@ public class BattleSessionPumpTests
|
||||
var ws = new TestWebSocket();
|
||||
var logCapture = new CapturingLogger();
|
||||
var session = new BattleSession(
|
||||
ws: ws, battleId: "bid-clip", viewerId: 906243102, log: logCapture);
|
||||
ws: ws, battleId: "bid-clip", viewerId: 906243102, context: FixtureCtx(), log: logCapture);
|
||||
|
||||
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(8));
|
||||
var runTask = session.RunAsync(cts.Token);
|
||||
@@ -208,6 +209,13 @@ public class BattleSessionPumpTests
|
||||
return NodeCrypto.GenerateKey(() => (seq++ * 7) % 16);
|
||||
}
|
||||
|
||||
private static MatchContext FixtureCtx() => new(
|
||||
SelfDeckCardIds: Enumerable.Range(1, 30).Select(i => 100_011_010L).ToList(),
|
||||
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
|
||||
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
|
||||
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
|
||||
BattleType: 11);
|
||||
|
||||
private sealed class CapturingLogger : ILogger<BattleSession>
|
||||
{
|
||||
public List<string> Warnings { get; } = new();
|
||||
|
||||
Reference in New Issue
Block a user