添加注册逻辑,完善MailSender

This commit is contained in:
Mili 2023-03-04 01:33:21 +08:00
parent 736cab93b5
commit a9306d2495
17 changed files with 335 additions and 107 deletions

View File

@ -23,7 +23,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
_SmtpClientInfo = new SmtpClientInfo(SenderMailAddress, SenderName, SenderPassword, Host, Port, OpenSSL);
}
public MailObject CreateMail(string Subject, string Body, MailPriority Priority, bool HTML, string[] ToList, string[] CCList, string[] BCCList)
public MailObject CreateMail(string Subject, string Body, MailPriority Priority, bool HTML, string[] ToList, string[]? CCList = null, string[]? BCCList = null)
{
return new MailObject(this, Subject, Body, Priority, HTML, ToList, CCList, BCCList);
}

View File

@ -179,7 +179,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
DateTime now = DateTime.Now;
return type switch
{
TimeType.DateOnly => now.Date.ToString(""),
TimeType.DateOnly => now.Date.ToString("D"),
TimeType.TimeOnly => now.ToString("T"),
TimeType.Year4 => now.Year.ToString(),
TimeType.Year2 => "'" + now.ToString("yy"),

View File

@ -8,7 +8,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/*
* API函数
*/
[LibraryImport("kernel32", StringMarshalling = StringMarshalling.Utf16)]
[LibraryImport("kernel32", EntryPoint = "WritePrivateProfileStringW", StringMarshalling = StringMarshalling.Utf16)]
private static partial long WritePrivateProfileString(string section, string key, string val, string filePath);
[LibraryImport("Kernel32.dll", EntryPoint = "GetPrivateProfileStringW", StringMarshalling = StringMarshalling.Utf16)]
private static partial int GetPrivateProfileString(string section, string key, string def, char[] val, int size, string filePath);
@ -83,6 +83,11 @@ namespace Milimoe.FunGame.Core.Api.Utility
WriteINI("Server", "Notice", "This is the FunGame Server's Notice.");
WriteINI("Server", "Key", "");
WriteINI("Server", "Status", "1");
/**
* ServerMail
*/
WriteINI("ServerMail", "OfficialMail", "");
WriteINI("ServerMail", "SupportMail", "");
/**
* Socket
*/
@ -97,6 +102,16 @@ namespace Milimoe.FunGame.Core.Api.Utility
WriteINI("MySQL", "DBName", "fungame");
WriteINI("MySQL", "DBUser", "root");
WriteINI("MySQL", "DBPassword", "pass");
/**
* Mailer
*/
WriteINI("Mailer", "UseMailSender", "false");
WriteINI("Mailer", "MailAddress", "");
WriteINI("Mailer", "Name", "");
WriteINI("Mailer", "Password", "");
WriteINI("Mailer", "Host", "");
WriteINI("Mailer", "Port", "587");
WriteINI("Mailer", "OpenSSL", "true");
break;
}
}

View File

@ -12,10 +12,10 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
public MailPriority Priority { get; } = MailPriority.Normal;
public bool HTML { get; } = false;
public string[] ToList { get; } = Array.Empty<string>();
public string[] CCList { get; } = Array.Empty<string>();
public string[] BCCList { get; } = Array.Empty<string>();
public string[]? CCList { get; } = Array.Empty<string>();
public string[]? BCCList { get; } = Array.Empty<string>();
public MailObject(MailSender Sender, string Subject, string Body, MailPriority Priority, bool HTML, string[] ToList, string[] CCList, string[] BCCList)
public MailObject(MailSender Sender, string Subject, string Body, MailPriority Priority, bool HTML, string[] ToList, string[]? CCList = null, string[]? BCCList = null)
{
this.Sender = Sender.SmtpClientInfo.SenderMailAddress;
this.SenderName = Sender.SmtpClientInfo.SenderName;

View File

@ -1,44 +0,0 @@
namespace Milimoe.FunGame.Core.Library.Constant
{
public class SQLConstant
{
/**
* Commands
*/
public const string Command_Select = "Select";
public const string Command_Update = "Update";
public const string Command_Delete = "Delete";
public const string Command_Insert = "Insert";
public const string Command_Set = "Set";
public const string Command_Where = "Where";
public const string Command_From = "From";
public const string Command_All = "*";
public const string Command_Into = "Into";
public const string Command_Values = "Values";
public const string Command_And = "And";
public const string Command_Or = "Or";
/**
* Tables
*/
public const string Table_Users = "Users";
public const string Table_ServerLoginLogs = "ServerLoginLogs";
/**
* Select
*/
public const string Select_Users = $"{Command_Select} {Command_All} {Command_From} {Table_Users}";
/**
* Update
*/
/**
* Insert
*/
public static string Insert_ServerLoginLogs(string ServerName, string ServerKey)
{
return $"{Command_Insert} {Command_Into} {Table_ServerLoginLogs} (ServerName, ServerKey, LoginTime) {Command_Values} ('{ServerName}', '{ServerKey}', '{DateTime.Now}')";
}
}
}

View File

@ -58,7 +58,9 @@
Disconnect,
HeartBeat,
IntoRoom,
Chat
Chat,
Reg,
CheckReg
}
public enum SocketRuntimeType

View File

@ -124,4 +124,9 @@
{
public override string Message => "无法发送邮件 (#10025)";
}
public class SmtpHelperException : Exception
{
public override string Message => "无法创建Smtp服务 (#10026)";
}
}

View File

@ -0,0 +1,56 @@
namespace Milimoe.FunGame.Core.Library.SQLScript
{
public class Constant
{
/**
* Commands
*/
public const string Command_Select = "Select";
public const string Command_Update = "Update";
public const string Command_Delete = "Delete";
public const string Command_Insert = "Insert";
public const string Command_Set = "Set";
public const string Command_Where = "Where";
public const string Command_From = "From";
public const string Command_All = "*";
public const string Command_Into = "Into";
public const string Command_Values = "Values";
public const string Command_And = "And";
public const string Command_Or = "Or";
}
}
namespace Milimoe.FunGame.Core.Library.SQLScript.Common
{
public class ServerLoginLogs
{
public const string TableName = "ServerLoginLogs";
public const string Column_ServerName = "ServerName";
public const string Column_ServerKey = "ServerKey";
public const string Column_LoginTime = "LoginTime";
public static string Insert_ServerLoginLogs(string ServerName, string ServerKey)
{
return $"{Constant.Command_Insert} {Constant.Command_Into} {TableName} ({Column_ServerName}, {Column_ServerKey}, {Column_LoginTime}) {Constant.Command_Values} ('{ServerName}', '{ServerKey}', '{DateTime.Now}')";
}
}
public class RegVerifyCodes
{
public const string TableName = "RegVerifyCodes";
public const string Column_Username = "Username";
public const string Column_Email = "Email";
public const string Column_RegVerifyCode = "RegVerifyCode";
public const string Column_RegTime = "RegTime";
public static string Insert_RegVerifyCodes(string Username, string Email, string RegVerifyCodes)
{
return $"{Constant.Command_Insert} {Constant.Command_Into} {TableName} ({Column_Username}, {Column_Email}, {Column_RegVerifyCode}, {Column_RegTime}) {Constant.Command_Values} ('{Username}', '{Email}', '{RegVerifyCodes}', '{DateTime.Now}')";
}
public static string Select_RegVerifyCode(string Username, string Email, string RegVerifyCode)
{
return $"{Constant.Command_Select} {Constant.Command_All} {Constant.Command_From} {TableName} {Constant.Command_Where} {Column_Username} = '{Username}' and {Column_Email} = '{Email}' and {Column_RegVerifyCode} = '{RegVerifyCode}'";
}
}
}

View File

@ -0,0 +1,45 @@
namespace Milimoe.FunGame.Core.Library.SQLScript.Entity
{
public class UserQuery
{
public const string TableName= "User";
public const string Column_UID = "UID";
public const string Column_Username = "Username";
public const string Column_Password = "Password";
public const string Column_RegTime = "RegTime";
public const string Column_LastTime = "LastTime";
public const string Column_LastIP = "LastIP";
public const string Column_Email = "Email";
public const string Column_Nickname = "Nickname";
public const string Column_IsAdmin = "IsAdmin";
public const string Column_IsOperator = "IsOperator";
public const string Column_IsEnable = "IsEnable";
public const string Column_OnlineState = "OnlineState";
public const string Column_Credits = "Credits";
public const string Column_Materials = "Materials";
public const string Column_GameTime = "GameTime";
public const string Select_Users = $"{Constant.Command_Select} {Constant.Command_All} {Constant.Command_From} {TableName}";
public static string Select_Users_LoginQuery(string Username, string Password)
{
return $"{Select_Users} {Constant.Command_Where} {Column_Username} = '{Username}' and {Column_Password} = '{Password}'";
}
public static string Select_Users_Where(string Where)
{
return $"{Select_Users} {Constant.Command_Where} {Where}'";
}
public static string CheckLogin(string Username, string IP)
{
return @$"{Constant.Command_Update} {TableName} {Constant.Command_Set} {Column_LastTime} = '{DateTime.Now}', {Column_LastIP} = '{IP}'
{Constant.Command_Where} {Column_Username} = '{Username}'";
}
public static string Register(string UserName, string Password, string Email)
{
return @$"{Constant.Command_Insert} {Constant.Command_Into} {TableName} ({Column_Username}, {Column_Password}, {Column_Email}, {Column_RegTime})
{Constant.Command_Values} ('{UserName}', '{Password}', {Email}, '{DateTime.Now}')";
}
}
}

View File

@ -37,22 +37,32 @@ namespace Milimoe.FunGame.Core.Service
MailMessage Msg = new()
{
Subject = Mail.Subject,
SubjectEncoding = General.DefaultEncoding,
SubjectEncoding = System.Text.Encoding.UTF8,
Body = Mail.Body,
BodyEncoding = General.DefaultEncoding,
From = new MailAddress(Mail.Sender, Mail.SenderName, General.DefaultEncoding),
BodyEncoding = System.Text.Encoding.UTF8,
From = new MailAddress(Mail.Sender, Mail.SenderName, System.Text.Encoding.UTF8),
IsBodyHtml = Mail.HTML,
Priority = Mail.Priority
};
foreach (string To in Mail.ToList)
{
Msg.To.Add(To);
if (To.Trim() != "") Msg.To.Add(To);
}
foreach (string CC in Mail.CCList)
if (Mail.CCList != null)
{
Msg.CC.Add(CC);
foreach (string CC in Mail.CCList)
{
if (CC.Trim() != "") Msg.CC.Add(CC);
}
}
Smtp.Send(Msg);
if (Mail.BCCList != null)
{
foreach (string BCC in Mail.BCCList)
{
if (BCC.Trim() != "") Msg.Bcc.Add(BCC);
}
}
Smtp.SendMailAsync(Msg);
return MailSendResult.Success;
}
catch (Exception e)

View File

@ -1,21 +1,22 @@
using Milimoe.FunGame.Desktop.Library.Interface;
using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Desktop.Library.Component;
using Milimoe.FunGame.Desktop.Library;
using Milimoe.FunGame.Desktop.Model;
using Milimoe.FunGame.Desktop.UI;
namespace Milimoe.FunGame.Desktop.Controller
{
public class RegisterController : IReg
public class RegisterController
{
RegisterModel RegisterModel { get; }
public RegisterController(Register Register)
public static bool Reg(params object[]? objs)
{
RegisterModel = new RegisterModel(Register);
}
public bool Reg()
{
return RegisterModel.Reg();
RunTime.Register?.OnBeforeRegEvent(new GeneralEventArgs());
bool result = RegisterModel.Reg(objs);
if (!result)
{
ShowMessage.ErrorMessage("注册失败!!", "注册失败", 5);
RunTime.Register?.OnFailedRegEvent(new GeneralEventArgs());
}
return result;
}
}
}

View File

@ -0,0 +1,51 @@
using Milimoe.FunGame.Core.Interface;
using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Desktop.Library.Component;
namespace Milimoe.FunGame.Desktop.Library.Base
{
public class BaseReg : GeneralForm, IRegEventHandler
{
public event IEventHandler.BeforeEventHandler? BeforeReg;
public event IEventHandler.AfterEventHandler? AfterReg;
public event IEventHandler.SucceedEventHandler? SucceedReg;
public event IEventHandler.FailedEventHandler? FailedReg;
public EventResult OnAfterRegEvent(GeneralEventArgs e)
{
if (AfterReg != null)
{
return AfterReg(this, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnBeforeRegEvent(GeneralEventArgs e)
{
if (BeforeReg != null)
{
return BeforeReg(this, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnFailedRegEvent(GeneralEventArgs e)
{
if (FailedReg != null)
{
return FailedReg(this, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnSucceedRegEvent(GeneralEventArgs e)
{
if (SucceedReg != null)
{
return SucceedReg(this, e);
}
else return EventResult.NoEventImplement;
}
}
}

View File

@ -1,7 +0,0 @@
namespace Milimoe.FunGame.Desktop.Library.Interface
{
public interface IReg
{
public bool Reg();
}
}

View File

@ -1,23 +1,33 @@
using Milimoe.FunGame.Desktop.Library;
using Milimoe.FunGame.Desktop.Library.Interface;
using Milimoe.FunGame.Desktop.UI;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Desktop.Library;
namespace Milimoe.FunGame.Desktop.Model
{
public class RegisterModel : IReg
public class RegisterModel
{
private readonly Register Register;
private Core.Library.Common.Network.Socket? Socket;
public RegisterModel(Register register)
public static bool Reg(params object[]? objs)
{
Register = register;
Socket = RunTime.Socket;
}
public bool Reg()
{
return true;
try
{
Core.Library.Common.Network.Socket? Socket = RunTime.Socket;
if (Socket != null && objs != null)
{
string username = "";
string email = "";
if (objs.Length > 0) username = (string)objs[0];
if (objs.Length > 1) email = (string)objs[1];
if (Socket.Send(SocketMessageType.Reg, username, email) == SocketResult.Success)
{
return true;
}
}
}
catch (Exception e)
{
e.GetErrorInfo();
}
return false;
}
}
}

View File

@ -19,8 +19,10 @@ namespace Milimoe.FunGame.Desktop.UI
protected override void BindEvent()
{
base.BindEvent();
SucceedLogin += SucceedLoginEvent;
BeforeLogin += BeforeLoginEvent;
AfterLogin += AfterLoginEvent;
FailedLogin += FailedLoginEvent;
SucceedLogin += SucceedLoginEvent;
}
private bool Login_Handler()
@ -56,7 +58,7 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="e"></param>
private void RegButton_Click(object sender, EventArgs e)
{
OpenForm.SingleForm(Core.Library.Constant.FormType.Register, Core.Library.Constant.OpenFormType.Dialog);
OpenForm.SingleForm(FormType.Register, OpenFormType.Dialog);
}
private void FastLogin_Click(object sender, EventArgs e)

View File

@ -46,6 +46,15 @@
this.TransparentRect.SuspendLayout();
this.SuspendLayout();
//
// Title
//
this.Title.Font = new System.Drawing.Font("LanaPixel", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
this.Title.Location = new System.Drawing.Point(4, 4);
this.Title.Size = new System.Drawing.Size(391, 47);
this.Title.TabIndex = 8;
this.Title.Text = "FunGame Register";
this.Title.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// ExitButton
//
this.ExitButton.Anchor = System.Windows.Forms.AnchorStyles.None;
@ -60,6 +69,7 @@
this.ExitButton.ForeColor = System.Drawing.Color.Red;
this.ExitButton.Location = new System.Drawing.Point(453, 4);
this.ExitButton.Name = "ExitButton";
this.ExitButton.RelativeForm = null;
this.ExitButton.Size = new System.Drawing.Size(47, 47);
this.ExitButton.TabIndex = 7;
this.ExitButton.TextAlign = System.Drawing.ContentAlignment.TopLeft;
@ -80,21 +90,12 @@
this.MinButton.ForeColor = System.Drawing.Color.Black;
this.MinButton.Location = new System.Drawing.Point(401, 4);
this.MinButton.Name = "MinButton";
this.MinButton.RelativeForm = null;
this.MinButton.Size = new System.Drawing.Size(47, 47);
this.MinButton.TabIndex = 6;
this.MinButton.TextAlign = System.Drawing.ContentAlignment.TopLeft;
this.MinButton.UseVisualStyleBackColor = false;
//
// Title
//
this.Title.Font = new System.Drawing.Font("LanaPixel", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
this.Title.Location = new System.Drawing.Point(4, 4);
this.Title.Name = "Title";
this.Title.Size = new System.Drawing.Size(391, 47);
this.Title.TabIndex = 8;
this.Title.Text = "FunGame Register";
this.Title.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// Username
//
this.Username.Font = new System.Drawing.Font("LanaPixel", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
@ -160,6 +161,7 @@
this.RegButton.TabIndex = 4;
this.RegButton.Text = "注册";
this.RegButton.UseVisualStyleBackColor = true;
this.RegButton.Click += new System.EventHandler(this.RegButton_Click);
//
// GoToLogin
//
@ -170,6 +172,7 @@
this.GoToLogin.TabIndex = 5;
this.GoToLogin.Text = "登录";
this.GoToLogin.UseVisualStyleBackColor = true;
this.GoToLogin.Click += new System.EventHandler(this.GoToLogin_Click);
//
// EmailText
//
@ -214,6 +217,19 @@
this.TransparentRect.Size = new System.Drawing.Size(503, 319);
this.TransparentRect.TabIndex = 13;
this.TransparentRect.TabStop = false;
this.TransparentRect.Controls.SetChildIndex(this.UsernameText, 0);
this.TransparentRect.Controls.SetChildIndex(this.CheckPassword, 0);
this.TransparentRect.Controls.SetChildIndex(this.PasswordText, 0);
this.TransparentRect.Controls.SetChildIndex(this.Password, 0);
this.TransparentRect.Controls.SetChildIndex(this.CheckPasswordText, 0);
this.TransparentRect.Controls.SetChildIndex(this.Username, 0);
this.TransparentRect.Controls.SetChildIndex(this.RegButton, 0);
this.TransparentRect.Controls.SetChildIndex(this.GoToLogin, 0);
this.TransparentRect.Controls.SetChildIndex(this.Title, 0);
this.TransparentRect.Controls.SetChildIndex(this.Email, 0);
this.TransparentRect.Controls.SetChildIndex(this.ExitButton, 0);
this.TransparentRect.Controls.SetChildIndex(this.EmailText, 0);
this.TransparentRect.Controls.SetChildIndex(this.MinButton, 0);
//
// Register
//
@ -222,7 +238,6 @@
this.BackColor = System.Drawing.Color.WhiteSmoke;
this.ClientSize = new System.Drawing.Size(503, 319);
this.Controls.Add(this.TransparentRect);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Register";
this.Opacity = 0.9D;

View File

@ -1,14 +1,66 @@
using Milimoe.FunGame.Desktop.Library.Component;
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;
using Milimoe.FunGame.Desktop.Library.Base;
using Milimoe.FunGame.Desktop.Library.Component;
namespace Milimoe.FunGame.Desktop.UI
{
public partial class Register : GeneralForm
public partial class Register : BaseReg
{
public Register()
{
InitializeComponent();
}
protected override void BindEvent()
{
base.BindEvent();
SucceedReg += SucceedRegEvent;
}
private bool Reg_Handler()
{
try
{
string username = UsernameText.Text.Trim();
string password = PasswordText.Text.Trim();
string checkpassword = CheckPasswordText.Text.Trim();
string email = EmailText.Text.Trim();
if (username == "" || password == "" || checkpassword == "")
{
ShowMessage.ErrorMessage("账号或密码不能为空!");
UsernameText.Focus();
return false;
}
if (password != checkpassword)
{
ShowMessage.ErrorMessage("两个密码不相同,请重新输入!");
CheckPasswordText.Focus();
return false;
}
if (email == "")
{
ShowMessage.ErrorMessage("邮箱不能为空!");
UsernameText.Focus();
return false;
}
if (!RegisterController.Reg(username, email))
{
ShowMessage.Message("注册失败!!", "注册失败");
return false;
}
}
catch (Exception e)
{
RunTime.WritelnSystemInfo(e.GetErrorInfo());
return false;
}
return true;
}
/// <summary>
/// 关闭窗口
/// </summary>
@ -18,5 +70,20 @@ namespace Milimoe.FunGame.Desktop.UI
{
Dispose();
}
private EventResult SucceedRegEvent(object sender, GeneralEventArgs e)
{
return EventResult.Success;
}
private void RegButton_Click(object sender, EventArgs e)
{
Reg_Handler();
}
private void GoToLogin_Click(object sender, EventArgs e)
{
Dispose();
}
}
}