Files
SVSimServer/SVSim.BattleNode/Protocol/Bodies/BattleStartBody.cs
gamer147 578d0a75ef refactor(battlenode): rename mode-id field off BattleType, add BattleModes (§D)
Behavior-preserving; 271 BattleNode/Matching/Services tests green, full solution builds.

"BattleType" meant two things: the Sessions.BattleType enum (Pvp/Bot) and an int
"mode id" field. Renamed the int field on MatchContext AND the BattleStartBody wire
DTO to BattleModeId (wire key stays "battleType" via JsonPropertyName), so BattleType
now means only the enum project-wide.

New Bridge/BattleModes.cs (TakeTwo = 11) replaces every 11 literal — both prod
MatchContextBuilder sites and the test fixtures/assertions. The arbitrary-passthrough
42 and bot 0 stay literal.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 07:44:02 -04:00

33 lines
1.8 KiB
C#

using System.Text.Json.Serialization;
namespace SVSim.BattleNode.Protocol.Bodies;
public sealed record BattleStartBody(
[property: JsonPropertyName("turnState")]
[property: JsonConverter(typeof(JsonNumberEnumConverter<TurnState>))] TurnState TurnState,
// Wire key stays "battleType" (the client's contract); the CLR name is BattleModeId so the
// project keeps one meaning of "BattleType" — the Sessions.BattleType enum (Pvp/Bot).
[property: JsonPropertyName("battleType")] int BattleModeId,
[property: JsonPropertyName("selfInfo")] BattleStartSelfInfo SelfInfo,
[property: JsonPropertyName("oppoInfo")] BattleStartOppoInfo OppoInfo,
[property: JsonPropertyName("resultCode")] int ResultCode = (int)ReceiveNodeResultCode.Success) : IMsgBody;
public sealed record BattleStartSelfInfo(
[property: JsonPropertyName("rank")] string Rank,
[property: JsonPropertyName("battlePoint")] string BattlePoint,
[property: JsonPropertyName("classId")] string ClassId,
[property: JsonPropertyName("charaId")] string CharaId,
[property: JsonPropertyName("cardMasterName")] string CardMasterName);
// Note: BattlePoint is int on the wire here (not string as on self) — matches the
// captured prod frame at data_dumps/captures/battle-traffic_tk2_regular.ndjson.
// The string-self / int-oppo split is INTENTIONAL; do NOT unify the two for "consistency".
public sealed record BattleStartOppoInfo(
[property: JsonPropertyName("rank")] string Rank,
[property: JsonPropertyName("isMasterRank")] string IsMasterRank,
[property: JsonPropertyName("battlePoint")] int BattlePoint,
[property: JsonPropertyName("masterPoint")] string MasterPoint,
[property: JsonPropertyName("classId")] string ClassId,
[property: JsonPropertyName("charaId")] string CharaId,
[property: JsonPropertyName("cardMasterName")] string CardMasterName);