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"));
}
}
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"));
}
}