Files

176 lines
6.4 KiB
C#
Raw Permalink Normal View History

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using PCL.Core.App;
using PCL.Core.App.Configuration;
using PCL.Core.App.Localization;
using PCL.Core.Link.Scaffolding.EasyTier;
namespace PCL;
public partial class PageSetupGameLink
{
private bool isFirstLoad = true;
private new bool isLoaded;
public PageSetupGameLink()
{
InitializeComponent();
TextUdpNatType.Text = Lang.Text("Setup.GameLink.NetworkTest.UdpNatType", Lang.Text("Setup.GameLink.NetworkTest.NotTested"));
TextTcpNatType.Text = Lang.Text("Setup.GameLink.NetworkTest.TcpNatType", Lang.Text("Setup.GameLink.NetworkTest.NotTested"));
TextIpv6Status.Text = Lang.Text("Setup.GameLink.NetworkTest.Ipv6Status", Lang.Text("Setup.GameLink.NetworkTest.NotTested"));
Loaded += PageSetupLink_Loaded;
Loaded += (_, _) => Reload();
}
private void PageSetupLink_Loaded(object sender, RoutedEventArgs e)
{
// 重复加载部分
PanBack.ScrollToHome();
// 非重复加载部分
if (isLoaded)
return;
isLoaded = true;
ModAnimation.AniControlEnabled += 1;
Reload();
ModAnimation.AniControlEnabled -= 1;
}
public void Reload()
{
TextLinkUsername.Text = Config.Link.Username;
// TextLinkRelay.Text = Config.Link.RelayServer
// ComboRelayType.SelectedIndex = Config.Link.RelayType
// ComboServerType.SelectedIndex = Config.Link.ServerType
CheckLatencyFirstMode.Checked = Config.Link.UseLatencyFirstMode;
ComboPreferProtocol.SelectedIndex = (int)Config.Link.ProtocolPreference;
CheckTryPunchSym.Checked = Config.Link.TryPunchSym;
CheckEnableIPv6.Checked = Config.Link.EnableIPv6;
CheckEnableCliOutput.Checked = Config.Link.EnableCliOutput;
// TextRelays.Text = "正在获取信息..."
// Do While Not (PageLinkLobby.LobbyAnnouncementLoader.State = LoadState.Finished OrElse PageLinkLobby.LobbyAnnouncementLoader.State = LoadState.Failed)
// Thread.Sleep(500)
// Loop
// If ETRelay.RelayList.Count > 0 Then
// TextRelays.Text = ""
// For Each Relay In ETRelay.RelayList
// Select Case Relay.Type
// Case ETRelayType.Community
// TextRelays.Text += "[社区] "
// Case ETRelayType.Selfhosted
// TextRelays.Text += "[自有] "
// Case Else 'ETRelayType.Custom
// TextRelays.Text += "[自定义] "
// End Select
// TextRelays.Text += Relay.Name & ""
// Next
// TextRelays.Text = TextRelays.Text.BeforeLast("")
// Else
// TextRelays.Text = "暂无,你可能需要手动添加中继服务器"
// End If
}
// 初始化
public void Reset()
{
try
{
Config.Link.Reset();
ModBase.Log("[Setup] 已初始化联机页设置");
HintService.Hint(Lang.Text("Setup.GameLink.Initialized"), HintType.Success, false);
Reload();
}
catch (Exception ex)
{
ModBase.Log(
ex,
Lang.Text("Setup.GameLink.Error.InitFailed"),
ModBase.LogLevel.Msgbox,
userSummary: Lang.Text("Setup.GameLink.Error.InitFailed"));
}
Reload();
}
// 将控件改变路由到设置改变
private void TextBoxChange(object senderRaw, TextChangedEventArgs e)
{
var sender = (MyTextBox)senderRaw;
if (ModAnimation.AniControlEnabled == 0)
SetByTag(sender.Tag?.ToString(), sender.Text);
}
private static void ComboBoxChange(MyComboBox sender, object e)
{
if (ModAnimation.AniControlEnabled == 0)
SetByTag(sender.Tag?.ToString(), sender.SelectedIndex);
}
private void CheckBoxChange(object senderRaw, bool user)
{
var sender = (MyCheckBox)senderRaw;
if (ModAnimation.AniControlEnabled == 0)
SetByTag(sender.Tag?.ToString(), sender.Checked);
}
private static void SetByTag(string tag, object value)
=> ConfigService.TrySetValue(tag, value);
private void LinkProtocolPerferenceChange(object sender, SelectionChangedEventArgs e)
{
if (ModAnimation.AniControlEnabled == 0)
try
{
var selection = (LinkProtocolPreference)((MyComboBox)sender).SelectedIndex;
Config.Link.ProtocolPreference = selection;
}
catch (Exception ex)
{
ModBase.Log(
ex,
Lang.Text("Setup.GameLink.Error.ConfigChangeFailed"),
ModBase.LogLevel.Hint,
userSummary: Lang.Text("Setup.GameLink.Error.ConfigChangeFailed"));
}
}
// 网络测试
private void BtnNetTest_Click(object sender, MouseButtonEventArgs e)
{
try
{
BtnNetTest.IsEnabled = false;
BtnNetTest.Text = Lang.Text("Setup.GameLink.NetworkTest.Testing");
ModBase.RunInNewThread(() =>
{
var status = CliNetTest.GetNetStatusAsync().GetAwaiter().GetResult();
ModBase.RunInUi(() =>
{
TextUdpNatType.Text =
Lang.Text("Setup.GameLink.NetworkTest.UdpNatType", CliNetTest.GetNatTypeString(status.UdpNatType));
TextTcpNatType.Text =
Lang.Text("Setup.GameLink.NetworkTest.TcpNatType", CliNetTest.GetNatTypeString(status.TcpNatType));
TextIpv6Status.Text = Lang.Text("Setup.GameLink.NetworkTest.Ipv6Status",
status.SupportIPv6
? Lang.Text("Setup.GameLink.NetworkTest.Supported")
: Lang.Text("Setup.GameLink.NetworkTest.Unsupported"));
BtnNetTest.IsEnabled = true;
BtnNetTest.Text = Lang.Text("Setup.GameLink.NetworkTest.Start");
});
});
}
catch (Exception ex)
{
ModBase.Log(ex,
"[Link] 获取网络测试结果失败",
ModBase.LogLevel.Hint,
userSummary: Lang.Text("Setup.GameLink.Error.NetworkTestFailed"));
BtnNetTest.IsEnabled = true;
BtnNetTest.Text = Lang.Text("Setup.GameLink.NetworkTest.Start");
}
}
}