milimoe e09da145b9
.NET 9;窗体优化 (#30)
* 升级 .NET 9;异步事件优化

* 加入密码房间需要先检查密码

* 添加模组方法参数
2025-01-15 09:13:27 +08:00

118 lines
3.6 KiB
C#

using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Desktop.Controller;
using Milimoe.FunGame.Desktop.Library.Base;
using Milimoe.FunGame.Desktop.Model;
using Milimoe.FunGame.Desktop.Utility;
namespace Milimoe.FunGame.Desktop.UI
{
public partial class Login : BaseLogin
{
private readonly LoginController LoginController;
public Login()
{
InitializeComponent();
LoginController = new(this);
}
protected override void BindEvent()
{
base.BindEvent();
BeforeLogin += BeforeLoginEvent;
AfterLogin += AfterLoginEvent;
FailedLogin += FailedLoginEvent;
SucceedLogin += SucceedLoginEvent;
}
private async Task<bool> Login_HandlerAsync(string username, string password)
{
try
{
return await LoginController.LoginAccountAsync(username, password);
}
catch (Exception e)
{
RunTime.WritelnSystemInfo(e.GetErrorInfo());
return false;
}
}
private void RegButton_Click(object sender, EventArgs e)
{
OpenForm.SingleForm(FormType.Register, OpenFormType.Dialog);
}
private void FastLogin_Click(object sender, EventArgs e)
{
ShowMessage(ShowMessageType.Tip, "与No.16对话即可获得快速登录秘钥,快去试试吧!");
}
private async void GoToLogin_Click(object sender, EventArgs e)
{
GoToLogin.Enabled = false;
string username = UsernameText.Text.Trim();
string password = PasswordText.Text.Trim();
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
{
ShowMessage(ShowMessageType.Error, "账号或密码不能为空!");
UsernameText.Focus();
GoToLogin.Enabled = true;
return;
}
bool result = await Login_HandlerAsync(username, password);
if (result)
{
Dispose();
}
else
{
GoToLogin.Enabled = true;
}
}
private void ForgetPassword_Click(object sender, EventArgs e)
{
OpenForm.SingleForm(FormType.ForgetPassword, OpenFormType.Dialog);
UsernameText.Focus();
}
private void FailedLoginEvent(object sender, LoginEventArgs e)
{
UpdateFailedLoginUI();
RunTime.Main?.OnFailedLoginEvent(sender, e);
RunTime.PluginLoader?.OnFailedLoginEvent(sender, e);
}
private void UpdateFailedLoginUI()
{
InvokeUpdateUI(() =>
{
GoToLogin.Enabled = true;
});
}
private void SucceedLoginEvent(object sender, LoginEventArgs e)
{
RunTime.Main?.OnSucceedLoginEvent(sender, e);
RunTime.PluginLoader?.OnSucceedLoginEvent(sender, e);
}
private void BeforeLoginEvent(object sender, LoginEventArgs e)
{
RunTime.Main?.OnBeforeLoginEvent(sender, e);
RunTime.PluginLoader?.OnBeforeLoginEvent(sender, e);
if (e.Cancel) return;
}
private void AfterLoginEvent(object sender, LoginEventArgs e)
{
RunTime.Main?.OnAfterLoginEvent(sender, e);
RunTime.PluginLoader?.OnAfterLoginEvent(sender, e);
}
}
}