using AcDream.Core.Net;
namespace AcDream.Runtime.Session;
public sealed record LiveSessionCharacterSelector(
int? ActiveIndex = null,
uint? CharacterId = null,
string? CharacterName = null);
public sealed record LiveSessionConnectOptions(
bool Enabled,
string Host,
int Port,
string User,
string Password,
LiveSessionCharacterSelector? Character = null,
///
/// Campaign LA slice LA2: short-circuits
/// 's connect transaction right after
/// the roster report (before TrySelectCharacter/
/// ApplySelectedCharacter/EnterWorld) — connect, receive
/// CharacterList, report the roster, gracefully disconnect via the
/// same StopCore teardown the
/// path already uses, and return
/// . The pinned launch
/// contract (docs/plans/2026-08-14-launcher-campaign.md LA1's
/// mode field) requires a probe session to omit both
/// and its policy entirely, but the controller
/// itself does not enforce that pairing — the headless config loader
/// does, before a is ever built.
///
bool Probe = false,
///
/// Keep the connected transport in Runtime's pre-world selection state
/// instead of applying the legacy first-available fallback. Graphical
/// composition enables this only when no explicit selector was supplied;
/// direct/headless callers retain the existing default behavior.
///
bool AwaitCharacterSelection = false);
public interface IRuntimeLiveSessionFramePhase
{
void Tick();
}
public interface ILiveSessionEventRouting : IDisposable
{
void Attach();
}
public interface ILiveSessionCommandRouting : IDisposable
{
void Activate();
}