135 lines
4.4 KiB
C#
135 lines
4.4 KiB
C#
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)
|
||
{
|
||
|
||
}
|
||
}
|
||
}
|