Files
SVSimServer/SVSim.EmulatedEntrypoint/Models/Dtos/Responses/ArenaTwoPick/DoMatchingResponseDto.cs
gamer147 225c20daeb feat(arena-tk2): PvP pair-up trigger via /do_matching, ?scripted=1 opt-in
Solo pollers park (3001 RETRY); two concurrent pollers pair and both
receive 3004 + same BattleId. Cache hits on the first arriver's next
poll. ?scripted=1 retains today's solo Scripted path for dev work.
Response DTO's BattleId/NodeServerUrl become nullable so 3001 omits
them on the wire (WhenWritingNull policy drops them).

ASP.NET's default bool binder rejects "1" as a value, so the scripted
opt-in is bound as string? and parsed permissively (accepts "1" and
"true"/"True"/etc.) rather than relying on built-in bool binding.
2026-06-01 22:14:04 -04:00

41 lines
1.7 KiB
C#

using System.Text.Json.Serialization;
using MessagePack;
using SVSim.EmulatedEntrypoint.Models.Dtos.Common;
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.ArenaTwoPick;
[MessagePackObject]
public sealed class DoMatchingResponseDto
{
[JsonPropertyName("matching_state")] [Key("matching_state")]
public int MatchingState { get; set; } = 3004; // SUCCEEDED
[JsonPropertyName("timeout_period")] [JsonConverter(typeof(StringifiedIntConverter))] [Key("timeout_period")]
public int TimeoutPeriod { get; set; } = 30;
[JsonPropertyName("retry_period")] [JsonConverter(typeof(StringifiedIntConverter))] [Key("retry_period")]
public int RetryPeriod { get; set; } = 3;
[JsonPropertyName("battle_id")] [Key("battle_id")]
public string? BattleId { get; set; }
[JsonPropertyName("node_server_url")] [Key("node_server_url")]
public string? NodeServerUrl { get; set; }
// Required by the client when matching_state ∈ {3004, 3007, 3011} —
// DoMatchingBase.SettingCardMasterId does jsonData["card_master_id"].ToInt()
// with no Keys.Contains guard, so omitting it throws KeyNotFoundException.
// Value matches what /load/index returns (the "current battle card master").
[JsonPropertyName("card_master_id")] [Key("card_master_id")]
public int CardMasterId { get; set; } = 1;
[JsonPropertyName("room_param")] [Key("room_param")]
public string RoomParam { get; set; } = "";
[JsonPropertyName("mission_parameter")] [Key("mission_parameter")]
public Dictionary<string, string> MissionParameter { get; set; } = new()
{
["follower_play_count_for_mission"] = "{me.game_play_cards_other_self.unit.count}",
};
}