diff --git a/FunGame.Core/FunGame.Core.csproj b/FunGame.Implement/FunGame.Implement.csproj similarity index 93% rename from FunGame.Core/FunGame.Core.csproj rename to FunGame.Implement/FunGame.Implement.csproj index 32a2dab..87abf96 100644 --- a/FunGame.Core/FunGame.Core.csproj +++ b/FunGame.Implement/FunGame.Implement.csproj @@ -23,8 +23,8 @@ - - ..\..\FunGame\bin\Server\Debug\net6.0\FunGame.Core.Api.dll + + ..\..\FunGame\bin\Server\Debug\net6.0\FunGame.Core.dll diff --git a/FunGame.Implement/Implement/ServerInterfaceImpl.cs b/FunGame.Implement/Implement/ServerInterfaceImpl.cs new file mode 100644 index 0000000..169df23 --- /dev/null +++ b/FunGame.Implement/Implement/ServerInterfaceImpl.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Milimoe.FunGame.Core.Interface; + +namespace MIilimoe.FunGame.Core.Implement +{ + public class IServerImpl : IServer + { + + } +} diff --git a/FunGameServer/FunGameServer.csproj b/FunGame.Server/FunGame.Server.csproj similarity index 83% rename from FunGameServer/FunGameServer.csproj rename to FunGame.Server/FunGame.Server.csproj index 2365b79..f2484e8 100644 --- a/FunGameServer/FunGameServer.csproj +++ b/FunGame.Server/FunGame.Server.csproj @@ -5,7 +5,7 @@ net6.0 enable enable - logo.ico + Images\logo.ico logo.ico C:\milimoe\FunGame\bin\Server FunGameServer @@ -14,6 +14,7 @@ C:\milimoe\FunGame\bin 1.0 1.0 + FunGameServer @@ -25,12 +26,12 @@ - + - - ..\..\FunGame\bin\Server\Debug\net6.0\FunGame.Core.Api.dll + + ..\..\FunGame\bin\Server\Debug\net6.0\FunGame.Core.dll ..\..\FunGame\bin\Server\Debug\net6.0\MySql.Data.dll @@ -44,10 +45,14 @@ - + True \ + + + + diff --git a/FunGameServer/logo.ico b/FunGame.Server/Images/logo.ico similarity index 100% rename from FunGameServer/logo.ico rename to FunGame.Server/Images/logo.ico diff --git a/FunGameServer/ServerCore/Main.cs b/FunGame.Server/Main.cs similarity index 83% rename from FunGameServer/ServerCore/Main.cs rename to FunGame.Server/Main.cs index fc76b78..b1636a6 100644 --- a/FunGameServer/ServerCore/Main.cs +++ b/FunGame.Server/Main.cs @@ -4,11 +4,11 @@ using System.Text; using System.Text.RegularExpressions; using System; using System.Net.WebSockets; -using FunGameServer.Models.Config; -using FunGameServer.Utils; -using FunGame.Core.Api.Model.Enum; -using FunGame.Core.Api.Util; -using FunGameServer.ServerCore; +using Milimoe.FunGame.Server.Others; +using Milimoe.FunGame.Server.Utility; +using Milimoe.FunGame.Core.Entity.Enum; +using Milimoe.FunGame.Core.Api.Utility; +using FunGame.Server.Model; Console.Title = Config.SERVER_NAME; Console.WriteLine(FunGameEnums.GetInfo(Config.FunGameType)); @@ -105,27 +105,30 @@ void StartServer() while (Running) { Socket socket; + string clientIPaddress = ""; try { socket = ServerSocket.Accept(); IPEndPoint? clientIP = (IPEndPoint?)socket.RemoteEndPoint; - string clientIPaddress = (clientIP != null) ? clientIP.ToString() : "Unknown"; + clientIPaddress = (clientIP != null) ? clientIP.ToString() : "Unknown"; ServerHelper.WriteLine("客户端" + clientIPaddress + "连接 . . ."); - if (Read(socket) && Send(socket)) + if (Read(socket, clientIPaddress) && Send(socket, clientIPaddress)) { - ClientSocket cs = new ClientSocket(socket, Running); + ClientSocket cs = new(socket, Running); Task t = Task.Factory.StartNew(() => { cs.Start(); }); cs.Task = t; + cs.ClientName = clientIPaddress; + Config.OnlineClients.Add(clientIPaddress, clientIPaddress); } else ServerHelper.WriteLine("客户端" + clientIPaddress + "连接失败。"); } - catch (Exception e) + catch { - ServerHelper.WriteLine("客户端断开连接!\n" + e.StackTrace); + ServerHelper.WriteLine("客户端" + clientIPaddress + "断开连接!"); } } } @@ -153,7 +156,7 @@ void StartServer() }); } -bool Read(Socket socket) +bool Read(Socket socket, string name) { // 接收客户端消息 byte[] buffer = new byte[2048]; @@ -165,18 +168,18 @@ bool Read(Socket socket) msg = SocketHelper.GetMessage(msg); if (typestring != SocketMessageType.Unknown.ToString()) { - ServerHelper.WriteLine("[ 客户端(" + typestring + ")] -> " + msg); + ServerHelper.WriteLine("[" + typestring + "] " + SocketHelper.MakeClientName(name) + " -> " + msg); return true; } ServerHelper.WriteLine("客户端发送了不符合FunGame规定的字符,拒绝连接。"); return false; } else - ServerHelper.WriteLine("客户端没有回应。"); + ServerHelper.WriteLine(SocketHelper.MakeClientName(name) + " 没有回应。"); return false; } -bool Send(Socket socket) +bool Send(Socket socket, string name) { // 发送消息给客户端 string msg = Config.SERVER_NAME + ";" + Config.SERVER_NOTICE; @@ -184,7 +187,7 @@ bool Send(Socket socket) buffer = Config.DEFAULT_ENCODING.GetBytes(SocketHelper.MakeMessage((int)SocketMessageType.GetNotice, msg)); if (socket.Send(buffer) > 0) { - ServerHelper.WriteLine("[ 客户端 ] <- " + "已确认连接"); + ServerHelper.WriteLine(SocketHelper.MakeClientName(name) + " <- " + "已确认连接"); return true; } else diff --git a/FunGameServer/ServerCore/ClientSocket.cs b/FunGame.Server/Model/ClientSocket.cs similarity index 78% rename from FunGameServer/ServerCore/ClientSocket.cs rename to FunGame.Server/Model/ClientSocket.cs index 0f70221..32f39dd 100644 --- a/FunGameServer/ServerCore/ClientSocket.cs +++ b/FunGame.Server/Model/ClientSocket.cs @@ -1,5 +1,4 @@ -using FunGameServer.Models.Config; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.IO; @@ -7,22 +6,30 @@ using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Data.SqlTypes; -using FunGameServer.Utils; using System.Reflection.Metadata; -using FunGame.Core.Api.Model.Entity; using System.Net; -using FunGame.Core.Api.Model.Enum; -using FunGame.Core.Api.Util; using MySqlX.XDevAPI.Common; +using Milimoe.FunGame.Server.Utility; +using Milimoe.FunGame.Core.Entity.General; +using Milimoe.FunGame.Core.Entity.Enum; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Server.Others; -namespace FunGameServer.ServerCore +namespace FunGame.Server.Model { public class ClientSocket { - public bool Running { get; set; } = false; - public Socket? Socket { get; set; } = null; + /** + * Public + */ + public bool Running = false; + public Socket? Socket = null; public Task? Task = null; + public string ClientName = ""; + /** + * Private + */ private User? User = null; public ClientSocket(Socket socket, bool running) @@ -46,7 +53,7 @@ namespace FunGameServer.ServerCore int type = SocketHelper.GetType(msg); string typestring = EnumHelper.GetSocketTypeName(type); msg = SocketHelper.GetMessage(msg); - if (type != (int)SocketMessageType.HeartBeat) ServerHelper.WriteLine("[ 客户端(" + typestring + ")] -> " + msg); + if (type != (int)SocketMessageType.HeartBeat) ServerHelper.WriteLine("[" + typestring + "] " + SocketHelper.MakeClientName(ClientName, User) + " -> " + msg); switch (type) { case (int)SocketMessageType.GetNotice: @@ -79,9 +86,9 @@ namespace FunGameServer.ServerCore } throw new Exception(); } - catch (Exception e) + catch { - ServerHelper.WriteLine("客户端没有回应。\n" + e.StackTrace); + ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 没有回应。"); return false; } } @@ -97,14 +104,14 @@ namespace FunGameServer.ServerCore if (socket.Send(buffer) > 0) { if (msg != "") - ServerHelper.WriteLine("[ 客户端(" + typestring + ")] <- " + msg); + ServerHelper.WriteLine("[" + typestring + "] " + SocketHelper.MakeClientName(ClientName, User) + " <- " + msg); return true; } throw new Exception(); } - catch (Exception e) + catch { - ServerHelper.WriteLine("客户端没有回应。" + e.StackTrace); + ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " 没有回应。"); return false; } } @@ -170,7 +177,7 @@ namespace FunGameServer.ServerCore private void CreateStreamReader() { Thread.Sleep(100); - ServerHelper.WriteLine("Creating: StreamReader...OK"); + ServerHelper.WriteLine("Creating: StreamReader -> " + SocketHelper.MakeClientName(ClientName, User) + " ...OK"); while (Running) { if (Socket != null) @@ -182,8 +189,8 @@ namespace FunGameServer.ServerCore { RemoveUser(); GetUserCount(); - ServerHelper.WriteLine("ERROR -> Too Many Faileds."); - ServerHelper.WriteLine("CLOSE -> StreamReader is Closed."); + ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " ERROR -> Too Many Faileds."); + ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " CLOSE -> StreamReader is Closed."); break; } } @@ -193,34 +200,11 @@ namespace FunGameServer.ServerCore { RemoveUser(); GetUserCount(); - ServerHelper.WriteLine("ERROR -> Socket is Closed."); - ServerHelper.WriteLine("CLOSE -> StringStream is Closed."); + ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " ERROR -> Socket is Closed."); + ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " CLOSE -> StringStream is Closed."); break; } } } } - - 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; - } - } } diff --git a/FunGameServer/Models/Config/Config.cs b/FunGame.Server/Others/Config/Config.cs similarity index 90% rename from FunGameServer/Models/Config/Config.cs rename to FunGame.Server/Others/Config/Config.cs index cc8a4cc..62d321c 100644 --- a/FunGameServer/Models/Config/Config.cs +++ b/FunGame.Server/Others/Config/Config.cs @@ -1,7 +1,4 @@ -using FunGame.Core.Api.Model.Enum; -using FunGame.Core.Api.Util; -using FunGameServer.Utils; -using System; +using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; @@ -10,8 +7,10 @@ using System.Net.Sockets; using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; +using Milimoe.FunGame.Core.Entity.Enum; +using Milimoe.FunGame.Core.Api.Utility; -namespace FunGameServer.Models.Config +namespace Milimoe.FunGame.Server.Others { public static class Config { @@ -32,6 +31,8 @@ namespace FunGameServer.Models.Config public static Hashtable OrderList = new(); public static ReflectionHelper ReflectionHelper = new(); + public static Hashtable OnlineClients = new Hashtable(); + /// /// string: 玩家标识ID /// Task:玩家线程 diff --git a/FunGameServer/Models/Config/OrderDictionary.cs b/FunGame.Server/Others/Config/OrderDictionary.cs similarity index 90% rename from FunGameServer/Models/Config/OrderDictionary.cs rename to FunGame.Server/Others/Config/OrderDictionary.cs index c8dafcc..a63f2a2 100644 --- a/FunGameServer/Models/Config/OrderDictionary.cs +++ b/FunGame.Server/Others/Config/OrderDictionary.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace FunGameServer.Models.Config +namespace Milimoe.FunGame.Server.Others { public class OrderDictionary { diff --git a/FunGameServer/Utils/Utility.cs b/FunGame.Server/Utility/Utility.cs similarity index 86% rename from FunGameServer/Utils/Utility.cs rename to FunGame.Server/Utility/Utility.cs index d0d8059..e632330 100644 --- a/FunGameServer/Utils/Utility.cs +++ b/FunGame.Server/Utility/Utility.cs @@ -1,7 +1,4 @@ -using FunGame.Core.Api.Model.Enum; -using FunGame.Core.Api.Util; -using FunGameServer.Models.Config; -using MySql.Data.MySqlClient; +using MySql.Data.MySqlClient; using System; using System.Collections; using System.Collections.Generic; @@ -9,10 +6,14 @@ using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; +using Milimoe.FunGame.Core.Entity.General; +using Milimoe.FunGame.Core.Entity.Enum; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Server.Others; -namespace FunGameServer.Utils +namespace Milimoe.FunGame.Server.Utility { - public class Utility : FunGame.Core.Api.Util.Utility + public class Utility : FunGame.Core.Api.Utility.Utility { } @@ -184,4 +185,37 @@ namespace FunGameServer.Utils Config.OrderList.Add(OrderDictionary.Restart, "重启服务器"); } } + + 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.Userame; + } + if (name != "") return "客户端(" + name + ")"; + return "客户端"; + } + } } diff --git a/FunGameServer.sln b/FunGameServer.sln index 9da65a7..7015657 100644 --- a/FunGameServer.sln +++ b/FunGameServer.sln @@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunGame.Server", "FunGame.Server\FunGame.Server.csproj", "{CFC4F490-967B-4F12-883E-86C2A6E61461}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunGame.Core", "FunGame.Core\FunGame.Core.csproj", "{F5BACA36-3DE2-450A-8518-E5DC29991875}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunGame.Implement", "FunGame.Implement\FunGame.Implement.csproj", "{F5BACA36-3DE2-450A-8518-E5DC29991875}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution