Files
Workspace/Assets/Demos/Demo2/Runtime/Demo2HeadlessBootstrap.cs
T
2026-08-18 02:03:34 +08:00

49 lines
1.8 KiB
C#

#nullable enable
using System;
using Demo2.Domain;
using UnityEngine;
namespace Demo2.Runtime
{
public sealed class Demo2HeadlessBootstrap : MonoBehaviour
{
private Demo2GameService? _service;
private Demo2LanRuntime? _lan;
private void Awake()
{
var args = Environment.GetCommandLineArgs();
if (!Application.isBatchMode && Array.IndexOf(args, "-demo2-headless") < 0) { enabled = false; return; }
var port = ReadInt(args, "-demo2-port", 27320);
var mode = ReadString(args, "-demo2-transport", "tcp").Equals("kcp", StringComparison.OrdinalIgnoreCase) ? Demo2TransportMode.Kcp : Demo2TransportMode.Tcp;
var seed = (ulong)ReadInt(args, "-demo2-seed", 20260817);
_service = Demo2GameService.Current ?? new Demo2GameService();
_service.StartNewGame(seed);
_lan = new Demo2LanRuntime(_service);
_lan.Host(port, mode, "headless");
Debug.Log($"[Demo2] Headless server ready. transport={mode} port={port} seed={seed}");
}
private void Update()
{
_lan?.Pump();
_service?.AdvanceFrame(Time.unscaledDeltaTime);
}
private void OnDestroy() => _lan?.Dispose();
private static int ReadInt(string[] args, string key, int fallback)
{
var index = Array.IndexOf(args, key);
return index >= 0 && index + 1 < args.Length && int.TryParse(args[index + 1], out var value) ? value : fallback;
}
private static string ReadString(string[] args, string key, string fallback)
{
var index = Array.IndexOf(args, key);
return index >= 0 && index + 1 < args.Length ? args[index + 1] : fallback;
}
}
}