From 91bca66b60c6f337f3e6385b9191c8bf07114169 Mon Sep 17 00:00:00 2001 From: Mili Date: Fri, 2 Sep 2022 00:55:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FunGame.Core.csproj | 0 .../Implement/ServerInterfaceImpl.cs | 12 ----- FunGameServer.sln | 2 +- FunGameServer/FunGameServer.csproj | 1 + FunGameServer/Main.cs | 38 ++++++++++------ FunGameServer/Models/Config/Config.cs | 11 +++-- FunGameServer/Sockets/ClientSocket.cs | 19 ++++---- FunGameServer/Utils/ServerHelper.cs | 44 +++++++++++++++++++ FunGameServer/Utils/SocketHelper.cs | 11 ----- 9 files changed, 87 insertions(+), 51 deletions(-) rename {FunGameServer.Core => FunGame.Core}/FunGame.Core.csproj (100%) delete mode 100644 FunGameServer.Core/Implement/ServerInterfaceImpl.cs create mode 100644 FunGameServer/Utils/ServerHelper.cs diff --git a/FunGameServer.Core/FunGame.Core.csproj b/FunGame.Core/FunGame.Core.csproj similarity index 100% rename from FunGameServer.Core/FunGame.Core.csproj rename to FunGame.Core/FunGame.Core.csproj diff --git a/FunGameServer.Core/Implement/ServerInterfaceImpl.cs b/FunGameServer.Core/Implement/ServerInterfaceImpl.cs deleted file mode 100644 index 0edc2da..0000000 --- a/FunGameServer.Core/Implement/ServerInterfaceImpl.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FunGame.Core.Implement -{ - internal class ServerInterfaceImpl - { - } -} diff --git a/FunGameServer.sln b/FunGameServer.sln index a5bc6ff..9da65a7 100644 --- a/FunGameServer.sln +++ b/FunGameServer.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 17.3.32804.467 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunGameServer", "FunGameServer\FunGameServer.csproj", "{CFC4F490-967B-4F12-883E-86C2A6E61461}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunGame.Core", "FunGameServer.Core\FunGame.Core.csproj", "{F5BACA36-3DE2-450A-8518-E5DC29991875}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunGame.Core", "FunGame.Core\FunGame.Core.csproj", "{F5BACA36-3DE2-450A-8518-E5DC29991875}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/FunGameServer/FunGameServer.csproj b/FunGameServer/FunGameServer.csproj index 336a2e7..cedf90b 100644 --- a/FunGameServer/FunGameServer.csproj +++ b/FunGameServer/FunGameServer.csproj @@ -31,6 +31,7 @@ ..\..\FunGame\bin\Debug\net6.0\FunGame.Core.Api.dll + True diff --git a/FunGameServer/Main.cs b/FunGameServer/Main.cs index b7522e1..7d12411 100644 --- a/FunGameServer/Main.cs +++ b/FunGameServer/Main.cs @@ -7,6 +7,7 @@ using FunGameServer.Sockets; using System.Net.WebSockets; using FunGameServer.Models.Config; using FunGameServer.Utils; +using static FunGame.Core.Api.Model.Enum.CommonEnums; bool Running = true; Socket? ServerSocket = null; @@ -29,7 +30,16 @@ try // 开始监听连接 ServerSocket.Listen(Config.MAX_PLAYERS); - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "服务器启动成功,正在监听 . . ."); + ServerHelper.WriteLine("服务器启动成功,正在监听 . . ."); + + Task.Run(() => + { + Config.ServerNotice = ServerHelper.GetServerNotice(); + if (Config.ServerNotice != "") + ServerHelper.WriteLine("\n\n" + Config.ServerNotice + "\n\n"); + else + ServerHelper.WriteLine("无法读取服务器公告。"); + }); while (Running) { @@ -39,9 +49,9 @@ try socket = ServerSocket.Accept(); IPEndPoint? clientIP = (IPEndPoint?)socket.RemoteEndPoint; if (clientIP != null) - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "客户端" + clientIP.ToString() + "连接 . . ."); + ServerHelper.WriteLine("客户端" + clientIP.ToString() + "连接 . . ."); else - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "未知地点客户端连接 . . ."); + ServerHelper.WriteLine("未知地点客户端连接 . . ."); if (Read(socket) && Send(socket)) Task.Factory.StartNew(() => { @@ -49,13 +59,13 @@ try }); else if (clientIP != null) - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "客户端" + clientIP.ToString() + "连接失败。"); + ServerHelper.WriteLine("客户端" + clientIP.ToString() + "连接失败。"); else - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "客户端连接失败。"); + ServerHelper.WriteLine("客户端连接失败。"); } catch (Exception e) { - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "ERROR: 客户端断开连接!\n" + e.StackTrace); + ServerHelper.WriteLine("ERROR: 客户端断开连接!\n" + e.StackTrace); } } @@ -63,7 +73,7 @@ try } catch (Exception e) { - SocketHelper.WriteLine(e.StackTrace); + ServerHelper.WriteLine(e.StackTrace); if (ServerSocket != null) { ServerSocket.Close(); @@ -76,7 +86,7 @@ finally { string? order = ""; order = Console.ReadLine(); - SocketHelper.WriteLine("\r> " + order); + ServerHelper.Type(); if (order != null && !order.Equals("")) { switch (order) @@ -89,7 +99,7 @@ finally } } -SocketHelper.WriteLine(SocketHelper.GetPrefix() + "服务器已关闭,按任意键退出程序。"); +ServerHelper.WriteLine("服务器已关闭,按任意键退出程序。"); Console.ReadKey(); @@ -105,14 +115,14 @@ bool Read(Socket socket) msg = SocketHelper.GetMessage(msg); if (typestring != SocketEnums.TYPE_UNKNOWN) { - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "[ 客户端(" + typestring + ")] -> " + msg); + ServerHelper.WriteLine("[ 客户端(" + typestring + ")] -> " + msg); return true; } - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "客户端发送了不符合FunGame规定的字符,拒绝连接。"); + ServerHelper.WriteLine("客户端发送了不符合FunGame规定的字符,拒绝连接。"); return false; } else - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "客户端没有回应。"); + ServerHelper.WriteLine("客户端没有回应。"); return false; } @@ -124,11 +134,11 @@ bool Send(Socket socket) buffer = Config.DEFAULT_ENCODING.GetBytes(SocketHelper.MakeMessage((int)SocketEnums.Type.CheckLogin, msg)); if (socket.Send(buffer) > 0) { - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "[ 客户端 ] <- " + msg); + ServerHelper.WriteLine("[ 客户端 ] <- " + msg); return true; } else - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "无法传输数据,与客户端的连接可能丢失。"); + ServerHelper.WriteLine("无法传输数据,与客户端的连接可能丢失。"); return false; } diff --git a/FunGameServer/Models/Config/Config.cs b/FunGameServer/Models/Config/Config.cs index 5eb5b94..3166bba 100644 --- a/FunGameServer/Models/Config/Config.cs +++ b/FunGameServer/Models/Config/Config.cs @@ -1,4 +1,5 @@ -using System; +using FunGame.Core.Api.Util; +using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; @@ -11,7 +12,7 @@ namespace FunGameServer.Models.Config { public static class Config { - public static int MAX_PLAYERS = 16; // 最多接受连接的玩家数量 + public static int MAX_PLAYERS = 20; // 最多接受连接的玩家数量 public static int ONLINE_PLAYERS = 0; // 已连接的玩家数量 public static int CONNECTING_PLAYERS = 0; // 正在连接的玩家数量 public static string SERVER_NAME = "米粒的糖果屋"; // 服务器名称 @@ -19,6 +20,9 @@ namespace FunGameServer.Models.Config public static Encoding DEFAULT_ENCODING = Encoding.UTF8; // 默认传输字符集 public static int MAX_CONNECTFAILED = 5; // 最大连接失败次数 public const string CONSOLE_TITLE = "FunGame Server"; // 控制台的标题 + public static string ServerNotice = ""; // 服务器的公告 + + public static AssemblyHelper DefaultAssemblyHelper = new AssemblyHelper(); /// /// string: 玩家标识ID @@ -28,10 +32,9 @@ namespace FunGameServer.Models.Config /** * string:房间号 - * string:玩家标识ID * Task:玩家线程 */ - public static ConcurrentDictionary> PlayingPlayers= new ConcurrentDictionary>(); + public static ConcurrentDictionary PlayingPlayers= new ConcurrentDictionary(); } } diff --git a/FunGameServer/Sockets/ClientSocket.cs b/FunGameServer/Sockets/ClientSocket.cs index 21dce0b..b198cb1 100644 --- a/FunGameServer/Sockets/ClientSocket.cs +++ b/FunGameServer/Sockets/ClientSocket.cs @@ -11,6 +11,7 @@ using FunGameServer.Utils; using System.Reflection.Metadata; using FunGame.Core.Api.Model.Entity; using System.Net; +using static FunGame.Core.Api.Model.Enum.CommonEnums; namespace FunGameServer.Sockets { @@ -42,7 +43,7 @@ namespace FunGameServer.Sockets int type = SocketHelper.GetType(msg); string typestring = SocketHelper.GetTypeString(type); msg = SocketHelper.GetMessage(msg); - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "[ 客户端(" + typestring + ")] -> " + msg); + ServerHelper.WriteLine("[ 客户端(" + typestring + ")] -> " + msg); switch (type) { case (int)SocketEnums.Type.GetNotice: @@ -63,7 +64,7 @@ namespace FunGameServer.Sockets } catch (Exception e) { - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "ERROR:客户端没有回应。\n" + e.StackTrace); + ServerHelper.WriteLine("ERROR:客户端没有回应。\n" + e.StackTrace); return false; } } @@ -79,14 +80,14 @@ namespace FunGameServer.Sockets if (socket.Send(buffer) > 0) { if (msg != "") - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "[ 客户端(" + typestring + ")] <- " + msg); + ServerHelper.WriteLine("[ 客户端(" + typestring + ")] <- " + msg); return true; } throw new Exception(); } catch (Exception e) { - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "ERROR:客户端没有回应。" + e.StackTrace); + ServerHelper.WriteLine("ERROR:客户端没有回应。" + e.StackTrace); return false; } } @@ -102,7 +103,7 @@ namespace FunGameServer.Sockets private void CreateStreamReader() { Thread.Sleep(1000); - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "Creating: StreamReader...OK"); + ServerHelper.WriteLine("Creating: StreamReader...OK"); while (Running) { if (Socket != null) @@ -112,8 +113,8 @@ namespace FunGameServer.Sockets FailedTimes++; if (FailedTimes >= Config.MAX_CONNECTFAILED) { - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "ERROR: Too Many Faileds."); - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "CLOSE: StreamReader is Closed."); + ServerHelper.WriteLine("ERROR: Too Many Faileds."); + ServerHelper.WriteLine("CLOSE: StreamReader is Closed."); break; } } @@ -121,8 +122,8 @@ namespace FunGameServer.Sockets } else { - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "ERROR: Socket is Closed."); - SocketHelper.WriteLine(SocketHelper.GetPrefix() + "CLOSE: StringStream is Closed."); + ServerHelper.WriteLine("ERROR: Socket is Closed."); + ServerHelper.WriteLine("CLOSE: StringStream is Closed."); break; } } diff --git a/FunGameServer/Utils/ServerHelper.cs b/FunGameServer/Utils/ServerHelper.cs new file mode 100644 index 0000000..95f9667 --- /dev/null +++ b/FunGameServer/Utils/ServerHelper.cs @@ -0,0 +1,44 @@ +using FunGameServer.Models.Config; +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 ServerHelper + { + public static string GetPrefix() + { + DateTime now = System.DateTime.Now; + return now.AddMilliseconds(-now.Millisecond).ToString() + " " + Config.SERVER_NAME + ":"; + } + + public static void WriteLine(string? msg) + { + Console.Write("\r" + GetPrefix() + msg + "\n\r> "); + } + + public static void Type() + { + Console.Write("\r> "); + } + + public static string GetServerNotice() + { + try + { + string? ServerNotice = (string?)Config.DefaultAssemblyHelper.GetFunGameCoreValue((int)InterfaceType.ServerInterface, (int)InterfaceMethod.ServerNotice); + if (ServerNotice != null) + return ServerNotice; + } + catch (Exception e) + { + ServerHelper.WriteLine(e.StackTrace); + } + return ""; + } + } +} diff --git a/FunGameServer/Utils/SocketHelper.cs b/FunGameServer/Utils/SocketHelper.cs index cdd6ea4..2563c03 100644 --- a/FunGameServer/Utils/SocketHelper.cs +++ b/FunGameServer/Utils/SocketHelper.cs @@ -48,16 +48,5 @@ namespace FunGameServer.Utils { return type + ";" + msg; } - - public static string GetPrefix() - { - DateTime now = System.DateTime.Now; - return now.AddMilliseconds(-now.Millisecond).ToString() + " " + Config.SERVER_NAME + ":"; - } - - public static void WriteLine(string? msg) - { - Console.Write("\r" + msg + "\n\r> "); - } } }