Merge SocketHelper in ServerHelper

This commit is contained in:
milimoe 2023-04-05 22:45:31 +08:00 committed by GitHub
commit d87f97c30c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 60 deletions

View File

@ -110,11 +110,11 @@ void StartServer()
continue; continue;
} }
Config.ConnectingPlayersCount++; Config.ConnectingPlayersCount++;
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientIPAddress) + " 正在连接服务器 . . ."); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientIPAddress) + " 正在连接服务器 . . .");
if (IsIPBanned(ListeningSocket, ClientIPAddress)) if (IsIPBanned(ListeningSocket, ClientIPAddress))
{ {
SendRefuseConnect(socket, "服务器已拒绝黑名单用户连接。"); SendRefuseConnect(socket, "服务器已拒绝黑名单用户连接。");
ServerHelper.WriteLine("检测到 " + SocketHelper.MakeClientName(ClientIPAddress) + " 为黑名单用户,已禁止其连接!"); ServerHelper.WriteLine("检测到 " + ServerHelper.MakeClientName(ClientIPAddress) + " 为黑名单用户,已禁止其连接!");
Config.ConnectingPlayersCount--; Config.ConnectingPlayersCount--;
continue; continue;
} }
@ -128,13 +128,13 @@ void StartServer()
ClientModel.SetTaskAndClientName(t, ClientIPAddress); ClientModel.SetTaskAndClientName(t, ClientIPAddress);
} }
else else
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientIPAddress) + " 连接失败。"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientIPAddress) + " 连接失败。");
Config.ConnectingPlayersCount--; Config.ConnectingPlayersCount--;
} }
catch (Exception e) catch (Exception e)
{ {
if (--Config.ConnectingPlayersCount < 0) Config.ConnectingPlayersCount = 0; if (--Config.ConnectingPlayersCount < 0) Config.ConnectingPlayersCount = 0;
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientIPAddress) + " 断开连接!"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientIPAddress) + " 断开连接!");
ServerHelper.Error(e); ServerHelper.Error(e);
} }
} }
@ -172,9 +172,9 @@ bool Read(ClientSocket socket)
if (type != SocketMessageType.Unknown) if (type != SocketMessageType.Unknown)
{ {
if (objs[0] != null && objs[0].GetType() == typeof(string) && objs[0].ToString()!.Trim() != "") if (objs[0] != null && objs[0].GetType() == typeof(string) && objs[0].ToString()!.Trim() != "")
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + SocketHelper.MakeClientName(socket.ClientIP) + " -> " + objs[0]); ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + ServerHelper.MakeClientName(socket.ClientIP) + " -> " + objs[0]);
else else
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + SocketHelper.MakeClientName(socket.ClientIP)); ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + ServerHelper.MakeClientName(socket.ClientIP));
return true; return true;
} }
ServerHelper.WriteLine("客户端发送了不符合FunGame规定的字符拒绝连接。"); ServerHelper.WriteLine("客户端发送了不符合FunGame规定的字符拒绝连接。");
@ -187,7 +187,7 @@ bool Send(ClientSocket socket, Guid Token)
string msg = Config.ServerName + ";" + Config.ServerNotice; string msg = Config.ServerName + ";" + Config.ServerNotice;
if (socket.Send(SocketMessageType.Connect, msg, Token) == SocketResult.Success) if (socket.Send(SocketMessageType.Connect, msg, Token) == SocketResult.Success)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(socket.ClientIP) + " <- " + "已确认连接"); ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已确认连接");
return true; return true;
} }
else else
@ -201,7 +201,7 @@ bool SendRefuseConnect(ClientSocket socket, string msg)
msg = $"连接被拒绝,如有疑问请联系服务器管理员:{msg}"; msg = $"连接被拒绝,如有疑问请联系服务器管理员:{msg}";
if (socket.Send(SocketMessageType.Connect, msg) == SocketResult.Success) if (socket.Send(SocketMessageType.Connect, msg) == SocketResult.Success)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(socket.ClientIP) + " <- " + "已拒绝连接"); ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已拒绝连接");
return true; return true;
} }
else else

View File

@ -71,7 +71,7 @@ namespace Milimoe.FunGame.Server.Model
// 验证Token // 验证Token
if (type != SocketMessageType.HeartBeat && token != Token) if (type != SocketMessageType.HeartBeat && token != Token)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 使用了非法方式传输消息,服务器拒绝回应 -> [" + ServerSocket.GetTypeString(type) + "] "); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 使用了非法方式传输消息,服务器拒绝回应 -> [" + ServerSocket.GetTypeString(type) + "] ");
return false; return false;
} }
@ -81,9 +81,9 @@ namespace Milimoe.FunGame.Server.Model
if (!IgnoreType.Contains(type)) if (!IgnoreType.Contains(type))
{ {
if (msg.Trim() == "") if (msg.Trim() == "")
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + SocketHelper.MakeClientName(ClientName, User)); ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + ServerHelper.MakeClientName(ClientName, User));
else else
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + SocketHelper.MakeClientName(ClientName, User) + " -> " + msg); ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> " + msg);
} }
switch (type) switch (type)
@ -226,14 +226,14 @@ namespace Milimoe.FunGame.Server.Model
SQLHelper.ExecuteDataSet(UserQuery.Select_IsExistUsername(username), out SQLResult result); SQLHelper.ExecuteDataSet(UserQuery.Select_IsExistUsername(username), out SQLResult result);
if (result == SQLResult.Success) if (result == SQLResult.Success)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 账号已被注册"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 账号已被注册");
return Send(socket, type, RegInvokeType.DuplicateUserName); return Send(socket, type, RegInvokeType.DuplicateUserName);
} }
// 检查邮箱是否重复 // 检查邮箱是否重复
SQLHelper.ExecuteDataSet(UserQuery.Select_IsExistEmail(email), out result); SQLHelper.ExecuteDataSet(UserQuery.Select_IsExistEmail(email), out result);
if (result == SQLResult.Success) if (result == SQLResult.Success)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 邮箱已被注册"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 邮箱已被注册");
return Send(socket, type, RegInvokeType.DuplicateEmail); return Send(socket, type, RegInvokeType.DuplicateEmail);
} }
// 检查验证码是否发送过 // 检查验证码是否发送过
@ -244,7 +244,7 @@ namespace Milimoe.FunGame.Server.Model
string RegVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][RegVerifyCodes.Column_RegVerifyCode]; string RegVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][RegVerifyCodes.Column_RegVerifyCode];
if ((DateTime.Now - RegTime).TotalMinutes < 10) if ((DateTime.Now - RegTime).TotalMinutes < 10)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + $" 十分钟内已向{email}发送过验证码:{RegVerifyCode}"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 十分钟内已向{email}发送过验证码:{RegVerifyCode}");
} }
return Send(socket, type, RegInvokeType.InputVerifyCode); return Send(socket, type, RegInvokeType.InputVerifyCode);
} }
@ -263,17 +263,17 @@ namespace Milimoe.FunGame.Server.Model
string[] To = new string[] { email }; string[] To = new string[] { email };
if (MailSender.Send(MailSender.CreateMail(Subject, Body, System.Net.Mail.MailPriority.Normal, true, To)) == MailSendResult.Success) if (MailSender.Send(MailSender.CreateMail(Subject, Body, System.Net.Mail.MailPriority.Normal, true, To)) == MailSendResult.Success)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + $" 已向{email}发送验证码:{RegVerify}"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 已向{email}发送验证码:{RegVerify}");
} }
else else
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 无法发送验证码"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 无法发送验证码");
ServerHelper.WriteLine(MailSender.ErrorMsg); ServerHelper.WriteLine(MailSender.ErrorMsg);
} }
} }
else // 不使用MailSender的情况 else // 不使用MailSender的情况
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + $" 验证码为:{RegVerify},请服务器管理员告知此用户"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 验证码为:{RegVerify},请服务器管理员告知此用户");
} }
return Send(socket, type, RegInvokeType.InputVerifyCode); return Send(socket, type, RegInvokeType.InputVerifyCode);
} }
@ -299,7 +299,7 @@ namespace Milimoe.FunGame.Server.Model
DateTime RegTime = (DateTime)(SQLHelper.DataSet.Tables[0].Rows[0][RegVerifyCodes.Column_RegTime]); DateTime RegTime = (DateTime)(SQLHelper.DataSet.Tables[0].Rows[0][RegVerifyCodes.Column_RegTime]);
if ((DateTime.Now - RegTime).TotalMinutes >= 10) if ((DateTime.Now - RegTime).TotalMinutes >= 10)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 验证码已过期"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 验证码已过期");
msg = "此验证码已过期,请重新注册。"; msg = "此验证码已过期,请重新注册。";
SQLHelper.Execute(RegVerifyCodes.Delete_RegVerifyCode(username, email), out _); SQLHelper.Execute(RegVerifyCodes.Delete_RegVerifyCode(username, email), out _);
return Send(socket, type, false, msg); return Send(socket, type, false, msg);
@ -397,7 +397,7 @@ namespace Milimoe.FunGame.Server.Model
} }
catch (Exception e) catch (Exception e)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 没有回应。"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 没有回应。");
ServerHelper.Error(e); ServerHelper.Error(e);
return false; return false;
} }
@ -424,14 +424,14 @@ namespace Milimoe.FunGame.Server.Model
} }
object obj = objs[0]; object obj = objs[0];
if (obj.GetType() == typeof(string) && (string)obj != "") if (obj.GetType() == typeof(string) && (string)obj != "")
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + SocketHelper.MakeClientName(ClientName, User) + " <- " + obj); ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + ServerHelper.MakeClientName(ClientName, User) + " <- " + obj);
return true; return true;
} }
throw new CanNotSendToClientException(); throw new CanNotSendToClientException();
} }
catch (Exception e) catch (Exception e)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 没有回应。"); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 没有回应。");
ServerHelper.Error(e); ServerHelper.Error(e);
return false; return false;
} }
@ -511,7 +511,7 @@ namespace Milimoe.FunGame.Server.Model
private void CreateStreamReader() private void CreateStreamReader()
{ {
Thread.Sleep(100); Thread.Sleep(100);
ServerHelper.WriteLine("Creating: StreamReader -> " + SocketHelper.MakeClientName(ClientName, User) + " ...OK"); ServerHelper.WriteLine("Creating: StreamReader -> " + ServerHelper.MakeClientName(ClientName, User) + " ...OK");
while (Running) while (Running)
{ {
if (Socket != null) if (Socket != null)
@ -523,8 +523,8 @@ namespace Milimoe.FunGame.Server.Model
{ {
RemoveUser(); RemoveUser();
Close(); Close();
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Error -> Too Many Faileds."); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " Error -> Too Many Faileds.");
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Close -> StreamReader is Closed."); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " Close -> StreamReader is Closed.");
break; break;
} }
} }
@ -534,8 +534,8 @@ namespace Milimoe.FunGame.Server.Model
{ {
RemoveUser(); RemoveUser();
Close(); Close();
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Error -> Socket is Closed."); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " Error -> Socket is Closed.");
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Close -> StringStream is Closed."); ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " Close -> StringStream is Closed.");
break; break;
} }
} }
@ -544,7 +544,7 @@ namespace Milimoe.FunGame.Server.Model
private void CreatePeriodicalQuerier() private void CreatePeriodicalQuerier()
{ {
Thread.Sleep(100); Thread.Sleep(100);
ServerHelper.WriteLine("Creating: PeriodicalQuerier -> " + SocketHelper.MakeClientName(ClientName, User) + " ...OK"); ServerHelper.WriteLine("Creating: PeriodicalQuerier -> " + ServerHelper.MakeClientName(ClientName, User) + " ...OK");
while (Running) while (Running)
{ {
// 每两小时触发一次SQL服务器的心跳查询防止SQL服务器掉线 // 每两小时触发一次SQL服务器的心跳查询防止SQL服务器掉线

View File

@ -29,6 +29,16 @@ namespace Milimoe.FunGame.Server.Utility
Console.Write("\r> "); Console.Write("\r> ");
} }
public static string MakeClientName(string name, User? user = null)
{
if (user != null)
{
return "玩家 " + user.Username;
}
if (name != "") return "客户端(" + name + ")";
return "客户端";
}
private static Hashtable GetServerSettingHashtable() private static Hashtable GetServerSettingHashtable()
{ {
Hashtable settings = new(); Hashtable settings = new();
@ -105,39 +115,6 @@ namespace Milimoe.FunGame.Server.Utility
} }
} }
public class SocketHelper
{
public static int GetType(string msg)
{
int index = msg.IndexOf(';') - 1;
if (index > 0)
return Convert.ToInt32(msg[..index]);
else
return Convert.ToInt32(msg[..1]);
}
public static string GetMessage(string msg)
{
int index = msg.IndexOf(';') + 1;
return msg[index..];
}
public static string MakeMessage(int type, string msg)
{
return type + ";" + msg;
}
public static string MakeClientName(string name, User? user = null)
{
if (user != null)
{
return "玩家 " + user.Username;
}
if (name != "") return "客户端(" + name + ")";
return "客户端";
}
}
public class SmtpHelper public class SmtpHelper
{ {
public static string SenderMailAddress { get; set; } = ""; public static string SenderMailAddress { get; set; } = "";