176 lines
6.4 KiB
C#
176 lines
6.4 KiB
C#
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");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|