namespace SVSim.BattleNode.Bridge; /// /// DI-injected options for the battle node. NodeServerUrl matches the prod /// do_matching wire format: host:port/socket.io/, no scheme prefix. /// BestHTTP's SocketManager parses it as the Socket.IO v2 endpoint URL. /// public sealed class BattleNodeOptions { public string NodeServerUrl { get; set; } = "localhost:5148/socket.io/"; /// /// How long the first arriver's WS waits for a partner before disconnecting. /// Matches the architecture spec's 60s default; override (typically lower) /// in tests via the factory. /// public TimeSpan WaitingRoomTimeout { get; set; } = TimeSpan.FromSeconds(60); /// /// Dev convenience: when true, matchmaking endpoints that would otherwise park /// a solo poller (returning 3002 RETRY until a partner arrives) instead return /// a Scripted match immediately — equivalent to passing ?scripted=1 on /// every request. Turn off to test real PvP with two clients. Default false. /// Trade-off: while on, two viewers polling simultaneously each get /// their own Scripted match instead of pairing with each other. Toggling off /// is the only way to get PvP behavior. /// public bool SoloDefaultsToScripted { get; set; } = false; }