diff --git a/FunGame.Core/FunGame.Core.csproj b/FunGame.Core/FunGame.Core.csproj index 9bca00e..64b1b7d 100644 --- a/FunGame.Core/FunGame.Core.csproj +++ b/FunGame.Core/FunGame.Core.csproj @@ -22,6 +22,10 @@ embedded + + + + ..\..\FunGame\bin\Debug\net6.0\FunGame.Core.Api.dll diff --git a/FunGameServer/FunGameServer.csproj b/FunGameServer/FunGameServer.csproj index cedf90b..8799b1e 100644 --- a/FunGameServer/FunGameServer.csproj +++ b/FunGameServer/FunGameServer.csproj @@ -28,6 +28,10 @@ + + + + ..\..\FunGame\bin\Debug\net6.0\FunGame.Core.Api.dll diff --git a/FunGameServer/Main.cs b/FunGameServer/Main.cs index 7d12411..8723c6d 100644 --- a/FunGameServer/Main.cs +++ b/FunGameServer/Main.cs @@ -17,10 +17,17 @@ int port = Config.SERVER_PORT; Console.Title = Config.CONSOLE_TITLE; -try +Task t = Task.Factory.StartNew(() => { - Task t = Task.Factory.StartNew(() => + try { + // 连接MySQL服务器 + if (!Config.DefaultDataHelper.Connect()) + { + Running = false; + throw new Exception("服务器遇到问题需要关闭,请重新启动服务器!"); + } + // 创建IP地址终结点对象 IPEndPoint ip = new(IPAddress.Any, port); @@ -30,15 +37,15 @@ try // 开始监听连接 ServerSocket.Listen(Config.MAX_PLAYERS); - ServerHelper.WriteLine("服务器启动成功,正在监听 . . ."); + ServerHelper.WriteLine("服务器启动成功,端口号 " + port + " ,开始监听 . . ."); Task.Run(() => { Config.ServerNotice = ServerHelper.GetServerNotice(); if (Config.ServerNotice != "") - ServerHelper.WriteLine("\n\n" + Config.ServerNotice + "\n\n"); + ServerHelper.WriteLine("\n**********服务器公告**********\n" + Config.ServerNotice + "\n\n"); else - ServerHelper.WriteLine("无法读取服务器公告。"); + ServerHelper.WriteLine("无法读取服务器公告"); }); while (Running) @@ -59,43 +66,52 @@ try }); else if (clientIP != null) - ServerHelper.WriteLine("客户端" + clientIP.ToString() + "连接失败。"); - else + ServerHelper.WriteLine("客户端" + clientIP.ToString() + "连接失败。"); + else ServerHelper.WriteLine("客户端连接失败。"); } catch (Exception e) { - ServerHelper.WriteLine("ERROR: 客户端断开连接!\n" + e.StackTrace); + ServerHelper.WriteLine("客户端断开连接!\n" + e.StackTrace); } } - - }); -} -catch (Exception e) -{ - ServerHelper.WriteLine(e.StackTrace); - if (ServerSocket != null) - { - ServerSocket.Close(); - ServerSocket = null; } -} -finally -{ - while (Running) + catch (Exception e) { - string? order = ""; - order = Console.ReadLine(); - ServerHelper.Type(); - if (order != null && !order.Equals("")) + if (e.Message.Equals("服务器遇到问题需要关闭,请重新启动服务器!")) { - switch (order) + if (ServerSocket != null) { - case "quit": - Running = false; - break; + ServerSocket.Close(); + ServerSocket = null; } } + ServerHelper.Error(e); + } + finally + { + if (ServerSocket != null) + { + ServerSocket.Close(); + ServerSocket = null; + } + } + +}); + +while (Running) +{ + string? order = ""; + order = Console.ReadLine(); + ServerHelper.Type(); + if (order != null && !order.Equals("") && Running) + { + switch (order) + { + case "quit": + Running = false; + break; + } } } diff --git a/FunGameServer/Models/Config/Config.cs b/FunGameServer/Models/Config/Config.cs index 3166bba..210bc15 100644 --- a/FunGameServer/Models/Config/Config.cs +++ b/FunGameServer/Models/Config/Config.cs @@ -1,4 +1,5 @@ using FunGame.Core.Api.Util; +using FunGameServer.Utils; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -23,6 +24,7 @@ namespace FunGameServer.Models.Config public static string ServerNotice = ""; // 服务器的公告 public static AssemblyHelper DefaultAssemblyHelper = new AssemblyHelper(); + public static DataHelper DefaultDataHelper = new DataHelper(); /// /// string: 玩家标识ID diff --git a/FunGameServer/Sockets/ClientSocket.cs b/FunGameServer/Sockets/ClientSocket.cs index b198cb1..886da67 100644 --- a/FunGameServer/Sockets/ClientSocket.cs +++ b/FunGameServer/Sockets/ClientSocket.cs @@ -43,7 +43,7 @@ namespace FunGameServer.Sockets int type = SocketHelper.GetType(msg); string typestring = SocketHelper.GetTypeString(type); msg = SocketHelper.GetMessage(msg); - ServerHelper.WriteLine("[ 客户端(" + typestring + ")] -> " + msg); + if (type != (int)SocketEnums.Type.HeartBeat) ServerHelper.WriteLine("[ 客户端(" + typestring + ")] -> " + msg); switch (type) { case (int)SocketEnums.Type.GetNotice: @@ -64,7 +64,7 @@ namespace FunGameServer.Sockets } catch (Exception e) { - ServerHelper.WriteLine("ERROR:客户端没有回应。\n" + e.StackTrace); + ServerHelper.WriteLine("客户端没有回应。\n" + e.StackTrace); return false; } } @@ -87,7 +87,7 @@ namespace FunGameServer.Sockets } catch (Exception e) { - ServerHelper.WriteLine("ERROR:客户端没有回应。" + e.StackTrace); + ServerHelper.WriteLine("客户端没有回应。" + e.StackTrace); return false; } } @@ -113,8 +113,8 @@ namespace FunGameServer.Sockets FailedTimes++; if (FailedTimes >= Config.MAX_CONNECTFAILED) { - ServerHelper.WriteLine("ERROR: Too Many Faileds."); - ServerHelper.WriteLine("CLOSE: StreamReader is Closed."); + ServerHelper.WriteLine("ERROR -> Too Many Faileds."); + ServerHelper.WriteLine("CLOSE -> StreamReader is Closed."); break; } } @@ -122,8 +122,8 @@ namespace FunGameServer.Sockets } else { - ServerHelper.WriteLine("ERROR: Socket is Closed."); - ServerHelper.WriteLine("CLOSE: StringStream is Closed."); + ServerHelper.WriteLine("ERROR -> Socket is Closed."); + ServerHelper.WriteLine("CLOSE -> StringStream is Closed."); break; } } diff --git a/FunGameServer/Utils/DataHelper.cs b/FunGameServer/Utils/DataHelper.cs new file mode 100644 index 0000000..57d57f2 --- /dev/null +++ b/FunGameServer/Utils/DataHelper.cs @@ -0,0 +1,55 @@ +using FunGame.Core.Api.Model.Entity; +using FunGameServer.Models.Config; +using MySql.Data.MySqlClient; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static FunGame.Core.Api.Model.Enum.CommonEnums; + +namespace FunGameServer.Utils +{ + public class DataHelper + { + private string? GetConnection = ""; + private MySqlConnection? msc = null; + + public DataHelper() + { + + } + + public bool Connect() + { + try + { + GetConnection = (string?)Config.DefaultAssemblyHelper.GetFunGameCoreValue((int)InterfaceType.ServerInterface, (int)InterfaceMethod.DBConnection); + if (GetConnection != null) + { + string[] DataSetting = GetConnection.Split(";"); + if (DataSetting.Length > 1 && DataSetting[0].Length > 14 && DataSetting[1].Length > 8) + { + ServerHelper.WriteLine("Connecting: " + DataSetting[0][14..] + ":" + DataSetting[1][8..]); + } + msc = new MySqlConnection(GetConnection); + msc.Open(); + if (msc.State == System.Data.ConnectionState.Open) + { + ServerHelper.WriteLine("Connected: MySQL服务器连接成功"); + return true; + } + } + else + { + throw new Exception("MySQL服务启动失败:无法找到MySQL配置文件。"); + } + } + catch (Exception e) + { + ServerHelper.Error(e); + } + return false; + } + } +} diff --git a/FunGameServer/Utils/ServerHelper.cs b/FunGameServer/Utils/ServerHelper.cs index 95f9667..9421f95 100644 --- a/FunGameServer/Utils/ServerHelper.cs +++ b/FunGameServer/Utils/ServerHelper.cs @@ -16,6 +16,11 @@ namespace FunGameServer.Utils return now.AddMilliseconds(-now.Millisecond).ToString() + " " + Config.SERVER_NAME + ":"; } + public static void Error(Exception e) + { + Console.Write("\r" + GetPrefix() + e.Message + "\n" + e.StackTrace + "\n\r> "); + } + public static void WriteLine(string? msg) { Console.Write("\r" + GetPrefix() + msg + "\n\r> "); @@ -30,9 +35,7 @@ namespace FunGameServer.Utils { try { - string? ServerNotice = (string?)Config.DefaultAssemblyHelper.GetFunGameCoreValue((int)InterfaceType.ServerInterface, (int)InterfaceMethod.ServerNotice); - if (ServerNotice != null) - return ServerNotice; + } catch (Exception e) {