AnotherReplayReader/Window1.xaml.cs
2021-10-09 12:13:44 +02:00

135 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Script.Serialization;
using System.Windows;
namespace AnotherReplayReader
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
internal partial class Window1 : Window
{
private PlayerIdentity _identity;
public Window1(PlayerIdentity identity)
{
InitializeComponent();
_identity = identity;
Refresh();
}
private async void Refresh()
{
Dispatcher.Invoke(() => _setIPButton.IsEnabled = false);
try
{
Dispatcher.Invoke(() =>
{
_dataGrid.Items.Clear();
_dataGrid.Items.Add(new IPAndPlayer { IP = 0, ID = "正在加载..." });
});
await _identity.Fetch();
Display();
}
catch(Exception e)
{
Dispatcher.Invoke(() => MessageBox.Show(this, $"无法加载IP表{e}"));
}
Dispatcher.Invoke(() => _setIPButton.IsEnabled = true);
}
private void Display(string filter = "", string nameFilter = "")
{
var newList = _identity
.AsSortedList()
.Where(x => x.IPString.StartsWith(filter) && x.ID.StartsWith(nameFilter, StringComparison.CurrentCultureIgnoreCase))
.ToArray();
Dispatcher.Invoke(() =>
{
_dataGrid.Items.Clear();
foreach (var item in newList)
{
_dataGrid.Items.Add(item);
}
});
}
private async void OnClick(object sender, RoutedEventArgs e)
{
Dispatcher.Invoke(() => _setIPButton.IsEnabled = false);
await Task.Run(() =>
{
var ipText = Dispatcher.Invoke(() => _ipField.Text);
if (!IPAddress.TryParse(ipText, out var ip))
{
Dispatcher.Invoke(() => MessageBox.Show(this, "IP格式不正确"));
return;
}
var idText = Dispatcher.Invoke(() => _idField.Text);
if (string.IsNullOrWhiteSpace(idText))
{
var result = Dispatcher.Invoke(() => MessageBox.Show(this, "你没填输入任何说明,是否确认继续?", "注意", MessageBoxButton.OKCancel));
if(result != MessageBoxResult.OK)
{
return;
}
}
try
{
var bytes = ip.GetAddressBytes();
var ipNum = (uint)bytes[0] * 256 * 256 * 256 + bytes[1] * 256 * 256 + bytes[2] * 256 + bytes[3];
var text = HttpUtility.UrlEncode(idText);
var key = HttpUtility.UrlEncode(Auth.GetKey());
var request = WebRequest.Create($"https://lanyi.altervista.org/playertable/playertable.php?do=setIP&ip={ipNum}&id={text}&key={key}");
using (var stream = request.GetResponse().GetResponseStream())
using (var reader = new StreamReader(stream))
{
var response = reader.ReadToEnd();
var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<bool>(response);
if(!result)
{
Dispatcher.Invoke(() => MessageBox.Show(this, "设置IP表失败"));
}
}
}
catch (Exception exception)
{
Dispatcher.Invoke(() => MessageBox.Show(this, $"设置IP表时发生错误。\r\n{exception}"));
}
});
Refresh();
}
private async void OnIPFieldChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
var ipText = _ipField.Text;
var idText = _idField.Text;
await Task.Run(() => Display(ipText, idText));
}
private void DataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
}
}
}