XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEliteDangerous.Client;
using System.Diagnostics;
using System.Text.Json.Nodes;
using System.Text.Json;
using XFEEliteDangerous.Core;

namespace XFEEliteDangerous.Desktop;

internal static class ManagedGameLauncher
{
    internal static async Task StartOnlineAsync(OnlineLaunch launch,CancellationToken cancel)
    {
        var file=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),"XFEEliteDangerous","Server","deployment.json");
        var deployment=JsonNode.Parse(await File.ReadAllTextAsync(file,cancel))!;
        var info=new ProcessStartInfo(deployment["bootstrapperExe"]!.GetValue<string>())
        {UseShellExecute=false,RedirectStandardInput=true,CreateNoWindow=true,WindowStyle=ProcessWindowStyle.Hidden,WorkingDirectory=deployment["workingDirectory"]!.GetValue<string>()};
        info.Environment["XFE_LANGUAGE"] = AppText.Language;
        foreach(var value in new[]{"--debug-solo","--runtime",deployment["nativeRuntime"]!.GetValue<string>(),"--online-stdin","true"})info.ArgumentList.Add(value);
        using var child=Process.Start(info)??throw new InvalidOperationException(AppText.Get("ManagedGameLauncher.Text288"));
        await child.StandardInput.WriteAsync(JsonSerializer.Serialize(launch,GameLinkJson.Default.OnlineLaunch).AsMemory(),cancel);child.StandardInput.Close();
        await Task.Delay(1500,cancel);
        if(child.HasExited&&child.ExitCode!=0)throw new InvalidOperationException(AppText.Get("ManagedGameLauncher.Text289"));
    }
    internal static async Task StartAsync(string account,CancellationToken cancel)
    {
        if(account.Length!=32||!account.All(Uri.IsHexDigit))throw new InvalidDataException(AppText.Get("ManagedGameLauncher.Text290"));
        var file=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),"XFEEliteDangerous","Server","deployment.json");
        var deployment=JsonNode.Parse(await File.ReadAllTextAsync(file,cancel))!;
        var info=new ProcessStartInfo(deployment["bootstrapperExe"]!.GetValue<string>())
        {UseShellExecute=false,CreateNoWindow=true,WindowStyle=ProcessWindowStyle.Hidden,WorkingDirectory=deployment["workingDirectory"]!.GetValue<string>()};
        info.Environment["XFE_LANGUAGE"] = AppText.Language;
        foreach(var value in new[]{"--debug-solo","--workspace",deployment["workspace"]!.GetValue<string>(),"--account",account,"--runtime",deployment["nativeRuntime"]!.GetValue<string>()})info.ArgumentList.Add(value);
        var child=Process.Start(info)??throw new InvalidOperationException(AppText.Get("ManagedGameLauncher.Text291"));
        await Task.Delay(1500,cancel);
        if(child.HasExited&&child.ExitCode!=0)throw new InvalidOperationException(AppText.Get("ManagedGameLauncher.Text292"));
    }
}