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

namespace XFEEliteDangerous.Desktop;

public sealed class OnlinePage : DesktopPage
{
    private readonly TextBox address=new(){Text=SystemProfile.OnlineServerAddress,MinWidth=460,PlaceholderText=AppText.Get("OnlinePage.Text294")};
    private readonly TextBox fingerprint=new(){Text=SystemProfile.OnlineCertificateSha256,MinWidth=460,MaxLength=64,PlaceholderText=AppText.Get("OnlinePage.Text295")};
    private readonly TextBox email=new(){Text=SystemProfile.PlayerEmail,MinWidth=360,PlaceholderText=AppText.Get("OnlinePage.Text296")};
    private readonly PasswordBox password=new(){MinWidth=360,PlaceholderText=AppText.Get("OnlinePage.Text297")};
    public OnlinePage():base(AppText.Get("AppShellPage.Text099"),AppText.Get("OnlinePage.Text298"))
    {
        address.Name="OnlineServerAddress";fingerprint.Name="OnlineServerFingerprint";email.Name="OnlineEmail";password.Name="OnlinePassword";
        Body.Children.Add(Card(AppText.Get("OnlinePage.Text299"),AppText.Get("OnlinePage.Text300"),Vertical(address,fingerprint)));
        Body.Children.Add(Card(AppText.Get("OnlinePage.Text301"),AppText.Get("OnlinePage.Text302"),Vertical(email,password)));
        var connect=Button(AppText.Get("OnlinePage.Text303"),()=>RunAsync(ConnectAsync),true);connect.Name="LaunchOnlineGame";Body.Children.Add(connect);
        Body.Children.Add(new InfoBar{IsOpen=true,IsClosable=false,Severity=InfoBarSeverity.Informational,Title=AppText.Get("OnlinePage.Text304"),Message=AppText.Get("OnlinePage.Text305")});
        Loaded+=async(_,_)=>await RunAsync(async()=>
        {
            if(DesktopVerification.IsRunning||!string.IsNullOrWhiteSpace(fingerprint.Text))return;
            var file=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),"XFEEliteDangerous","Server","game-client.json");
            if(!File.Exists(file))return;
            var local=JsonSerializer.Deserialize(await File.ReadAllTextAsync(file,Lifetime.Token),GameLinkJson.Default.OnlineServerProfile);
            if(local is not null){address.Text=local.Address;fingerprint.Text=local.CertificateSha256;}
        });
    }
    private static StackPanel Vertical(params UIElement[] elements){var panel=new StackPanel{Spacing=10};foreach(var element in elements)panel.Children.Add(element);return panel;}
    private async Task ConnectAsync()
    {
        var server=new OnlineServerProfile(address.Text.Trim(),fingerprint.Text.Trim());
        await using var connection=new OnlineConnection(server);
        var secret=password.Password;password.Password="";
        var lease=await connection.LoginAsync(email.Text.Trim(),secret,Lifetime.Token);
        SystemProfile.OnlineServerAddress=server.Address;SystemProfile.OnlineCertificateSha256=server.CertificateSha256;DesktopContext.Persist();
        await ManagedGameLauncher.StartOnlineAsync(new(server,lease),Lifetime.Token);connection.DetachLease();
        Success(AppText.Get("OnlinePage.Text306"));
    }
}