从 Simple-FR 拆出 Platform.Server 并重命名为 MiGu.Server;frontends 源码与构建脚本迁入本仓库。地图监控在 projection/cars 失败或为空时回退 reflection 车辆列表;Simple 仓库已移除旧 Platform.Server。 Co-authored-by: Cursor <cursoragent@cursor.com>
61 lines
3.5 KiB
C#
61 lines
3.5 KiB
C#
namespace MiGu.Server.Launcher;
|
||
|
||
/// <summary>
|
||
/// MiGu.Server 启动后由「平台登录」按 LaunchMode 拉起的 SimpleLite 子进程配置。
|
||
///
|
||
/// 会话 N+1(启动反转):原架构是 SimpleLite 启动 → 拉 MiGu.Server;现在反过来:
|
||
/// MiGu.Server 作为主入口启动 → 登录页选 LaunchMode → 后端拉起 SimpleLite.exe,
|
||
/// 通过 <c>--display-mode</c> 参数把 web / web+local 透传给 SimpleLite 的 Configuration。
|
||
///
|
||
/// 绑定 <c>appsettings.json:SimpleLite</c>。
|
||
/// </summary>
|
||
public sealed class SimpleLiteOptions
|
||
{
|
||
/// <summary>主开关。false = 永不拉起;登录无论选什么 LaunchMode 都不会启动子进程,用于「只跑 Platform 调试」场景。</summary>
|
||
public bool Enabled { get; set; } = true;
|
||
|
||
/// <summary>
|
||
/// SimpleLite 可执行文件绝对/相对路径(相对 MiGu.Server 工作目录)。留空则按以下顺序自动探测:
|
||
/// 1) <c>./SimpleLite.exe</c>(合并发布布局:SimpleLite 与 MiGu.Server 同目录)
|
||
/// 2) <c>./SimpleLite/SimpleLite.exe</c>
|
||
/// 3) <c>../SimpleLite.exe</c>(MiGu.Server 部署到子目录的常见布局)
|
||
/// 4) <c>../SimpleLite/bin/Debug/SimpleLite.exe</c>(开发态:Visual Studio 默认输出)
|
||
/// 5) <c>../SimpleLite/bin/Release/SimpleLite.exe</c>
|
||
/// 6) 沿父目录上行寻找 <c>SimpleLite/bin/{Debug|Release}/SimpleLite.exe</c>
|
||
/// </summary>
|
||
public string ExecutablePath { get; set; } = "";
|
||
|
||
/// <summary>留空时取 <see cref="ExecutablePath"/> 所在目录。SimpleLite 在 CWD 读写 simple.json / imgui.ini,CWD 选错会出意外。</summary>
|
||
public string WorkingDirectory { get; set; } = "";
|
||
|
||
/// <summary>附加命令行参数(拼在 <c>--display-mode=xxx</c> 之后)。常用于本地调试时强制 autoload 某场景。</summary>
|
||
public string Arguments { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 子进程启动后阻塞等待 Projection (:8222) 端口就绪的最长毫秒数。
|
||
/// 0 = 不等待(登录立即返回,前端可能还连不上 SimpleLite WebApi);
|
||
/// 负值 = 无限等待(直到子进程退出或就绪)。
|
||
/// </summary>
|
||
public int ReadinessTimeoutMs { get; set; } = 8000;
|
||
|
||
/// <summary>每隔多少毫秒 poll 一次 Projection 端口可达性。</summary>
|
||
public int ReadinessPollIntervalMs { get; set; } = 250;
|
||
|
||
/// <summary>SimpleLite Projection WebApi 监听端口。默认与 SimpleLite Configuration 的 `port` 一致。用于就绪检测。</summary>
|
||
public int ProjectionPort { get; set; } = 8222;
|
||
|
||
/// <summary>
|
||
/// 是否把 SimpleLite 绑定到 MiGu.Server 生命周期,默认 <b>false</b>(会话 N+2 用户反馈)。
|
||
///
|
||
/// 设计原则:SimpleLite 与 MiGu.Server 是「两个独立程序」,Platform 只是登录后顺手拉起 SimpleLite;
|
||
/// MiGu.Server 关闭不应该带走 SimpleLite,反之亦然。所以 FollowParent 默认 false:
|
||
/// - 子进程走 <c>UseShellExecute=true</c> 创建独立进程组 + 独立控制台窗口;
|
||
/// - 不挂 JobObject,不在 ApplicationStopping / ProcessExit 时 kill 子进程;
|
||
/// - SimpleLite 退出由用户自己负责(关窗口 / 任务管理器 / 调度内核异常退出)。
|
||
///
|
||
/// true 仍可用:会启动 Windows JobObject 父子绑定(仅 Windows 有效)+ 注册 ApplicationStopping 软关闭。
|
||
/// 一般只在临时联调期 / CI 流水线想自动清理时打开。
|
||
/// </summary>
|
||
public bool FollowParent { get; set; } = false;
|
||
}
|