49 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|