适配新版DLL (#34)

This commit is contained in:
milimoe 2024-08-21 19:30:23 +08:00 committed by GitHub
parent 12883fd233
commit cea0f393f7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 45 additions and 55 deletions

View File

@ -168,11 +168,11 @@ namespace Milimoe.FunGame.Server.Controller
if (RequestData.Count >= 3) if (RequestData.Count >= 3)
{ {
RoomType type = DataRequest.GetHashtableJsonObject<RoomType>(RequestData, "roomtype"); RoomType type = DataRequest.GetHashtableJsonObject<RoomType>(RequestData, "roomtype");
string gamemode = DataRequest.GetHashtableJsonObject<string>(RequestData, "gamemode") ?? ""; string GameModule = DataRequest.GetHashtableJsonObject<string>(RequestData, "GameModule") ?? "";
string gamemap = DataRequest.GetHashtableJsonObject<string>(RequestData, "gamemap") ?? ""; string gamemap = DataRequest.GetHashtableJsonObject<string>(RequestData, "gamemap") ?? "";
bool isrank = DataRequest.GetHashtableJsonObject<bool>(RequestData, "isrank"); bool isrank = DataRequest.GetHashtableJsonObject<bool>(RequestData, "isrank");
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_LastRequest) + " : " + RoomSet.GetTypeString(type) + " (" + string.Join(", ", [gamemode, gamemap]) + ")", InvokeMessageType.DataRequest); ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_LastRequest) + " : " + RoomSet.GetTypeString(type) + " (" + string.Join(", ", [GameModule, gamemap]) + ")", InvokeMessageType.DataRequest);
if (gamemode == "" || gamemap == "") if (GameModule == "" || gamemap == "")
{ {
ServerHelper.WriteLine("缺少对应的模组或地图,无法创建房间。"); ServerHelper.WriteLine("缺少对应的模组或地图,无法创建房间。");
ResultData.Add("room", room); ResultData.Add("room", room);
@ -184,7 +184,7 @@ namespace Milimoe.FunGame.Server.Controller
if (user.Id != 0) if (user.Id != 0)
{ {
string roomid = Verification.CreateVerifyCode(VerifyCodeType.MixVerifyCode, 7).ToUpper(); string roomid = Verification.CreateVerifyCode(VerifyCodeType.MixVerifyCode, 7).ToUpper();
SQLHelper.Execute(RoomQuery.Insert_CreateRoom(roomid, user.Id, type, gamemode, gamemap, isrank, password ?? "")); SQLHelper.Execute(RoomQuery.Insert_CreateRoom(roomid, user.Id, type, GameModule, gamemap, isrank, password ?? ""));
if (SQLHelper.Result == SQLResult.Success) if (SQLHelper.Result == SQLResult.Success)
{ {
ServerHelper.WriteLine("[CreateRoom] Master: " + user.Username + " RoomID: " + roomid); ServerHelper.WriteLine("[CreateRoom] Master: " + user.Username + " RoomID: " + roomid);

View File

@ -1,4 +1,5 @@
using System.Collections; using System.Collections;
using System.Collections.Generic;
using Milimoe.FunGame; using Milimoe.FunGame;
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Common.Addon;
@ -59,7 +60,7 @@ void StartServer()
ServerHelper.InitOrderList(); ServerHelper.InitOrderList();
// 读取游戏模组 // 读取游戏模组
if (!GetGameModeList()) if (!GetGameModuleList())
{ {
ServerHelper.WriteLine("服务器似乎未安装任何游戏模组,请检查是否正确安装它们。"); ServerHelper.WriteLine("服务器似乎未安装任何游戏模组,请检查是否正确安装它们。");
} }
@ -153,54 +154,43 @@ void StartServer()
}); });
} }
bool GetGameModeList() bool GetGameModuleList()
{ {
// 同时读取Implement预设的模组和gamemods目录下的模组最后合成一个总的列表
List<string> supported = []; List<string> supported = [];
// 构建AddonController // 构建AddonController
Hashtable delegates = []; Hashtable delegates = [];
delegates.Add("WriteLine", new Action<string>(msg => ServerHelper.WriteLine(msg, InvokeMessageType.GameMode))); delegates.Add("WriteLine", new Action<string>(msg => ServerHelper.WriteLine(msg, InvokeMessageType.GameModule)));
delegates.Add("Error", new Action<Exception>(ServerHelper.Error)); delegates.Add("Error", new Action<Exception>(ServerHelper.Error));
// 开始读取 // 读取modules目录下的模组
Config.GameModeLoader = GameModeLoader.LoadGameModes(Config.FunGameType, delegates); Config.GameModuleLoader = GameModuleLoader.LoadGameModules(Config.FunGameType, delegates);
string[] mods = (string[]?)Implement.GetFunGameImplValue(InterfaceType.IServer, InterfaceMethod.GameModeList, false) ?? []; foreach (GameModule module in Config.GameModuleLoader.AssociatedServers.Keys)
if (mods.Length > 0)
{ {
supported.AddRange(mods); bool check = true;
// 检查已安装的模组中是否在Implement预设的模组中存在 // 检查模组是否存在对应的模组服务器
foreach (string mod in mods) if (Config.GameModuleLoader.AssociatedServers[module] is null)
{ {
if (!Config.GameModeLoader.ServerModes.ContainsKey(mod)) ServerHelper.WriteLine("[GameModule] Load Failed: " + module.Name + " 缺少模组服务器");
{ check = false;
ServerHelper.WriteLine("[GameMode] Load Failed: " + mod + " 不存在或未正确安装");
supported.Remove(mod);
}
}
} }
// 检查模组是否有相对应的地图 // 检查模组是否有相对应的地图
foreach (GameModeServer mode in Config.GameModeLoader.ServerModes.Values) if (!Config.GameModuleLoader.Maps.ContainsKey(module.DefaultMap))
{ {
string modename = mode.Name; ServerHelper.WriteLine("[GameModule] Load Failed: " + module + " 没有找到相对应的地图,加载失败");
if (Config.GameModeLoader.Maps.ContainsKey(mode.DefaultMap)) check = false;
{
supported.Add(modename);
} }
else if (check)
{ {
ServerHelper.WriteLine("[GameMode] Load Failed: " + modename + " 没有找到相对应的地图,加载失败"); supported.Add(module.Name);
Config.GameModeLoader.ServerModes.Remove(modename);
supported.Remove(modename);
} }
} }
// 设置全局 // 设置全局
Config.GameModeSupported = supported.Distinct().ToArray(); Config.GameModuleSupported = supported.Distinct().ToArray();
foreach (string modename in Config.GameModeSupported) foreach (string modename in Config.GameModuleSupported)
{ {
ServerHelper.WriteLine("[GameMode] Loaded: " + modename); ServerHelper.WriteLine("[GameModule] Loaded: " + modename);
} }
return Config.GameModeSupported.Length > 0; return Config.GameModuleSupported.Length > 0;
} }
bool Connect(ClientSocket socket, Guid token, string clientip, ref bool isDebugMode) bool Connect(ClientSocket socket, Guid token, string clientip, ref bool isDebugMode)
@ -235,7 +225,7 @@ bool Connect(ClientSocket socket, Guid token, string clientip, ref bool isDebugM
string msg = ""; string msg = "";
List<string> ClientDontHave = []; List<string> ClientDontHave = [];
string strDontHave = string.Join("\r\n", Config.GameModeSupported.Where(mode => !modes.Contains(mode))); string strDontHave = string.Join("\r\n", Config.GameModuleSupported.Where(mode => !modes.Contains(mode)));
if (strDontHave != "") if (strDontHave != "")
{ {
strDontHave = "客户端缺少服务器所需的模组:" + strDontHave; strDontHave = "客户端缺少服务器所需的模组:" + strDontHave;

View File

@ -35,7 +35,7 @@ namespace Milimoe.FunGame.Server.Model
/** /**
* Private * Private
*/ */
private GameModeServer? NowGamingServer = null; private GameModuleServer? NowGamingServer = null;
private ClientSocket? _Socket = null; private ClientSocket? _Socket = null;
private bool _Running = false; private bool _Running = false;
@ -73,8 +73,8 @@ namespace Milimoe.FunGame.Server.Model
// 接收客户端消息 // 接收客户端消息
try try
{ {
// 禁止GameModeServer调用 // 禁止GameModuleServer调用
if ((IServerModel)this is GameModeServer) throw new NotSupportedException("请勿在GameModeServer类中调用此方法"); if ((IServerModel)this is GameModuleServer) throw new NotSupportedException("请勿在GameModuleServer类中调用此方法");
SocketObject[] SocketObjects = socket.Receive(); SocketObject[] SocketObjects = socket.Receive();
if (SocketObjects.Length == 0) if (SocketObjects.Length == 0)
@ -229,7 +229,7 @@ namespace Milimoe.FunGame.Server.Model
public void Start() public void Start()
{ {
if ((IServerModel)this is GameModeServer) throw new NotSupportedException("请勿在GameModeServer类中调用此方法"); // 禁止GameModeServer调用 if ((IServerModel)this is GameModuleServer) throw new NotSupportedException("请勿在GameModuleServer类中调用此方法"); // 禁止GameModuleServer调用
Task StreamReader = Task.Factory.StartNew(CreateStreamReader); Task StreamReader = Task.Factory.StartNew(CreateStreamReader);
Task PeriodicalQuerier = Task.Factory.StartNew(CreatePeriodicalQuerier); Task PeriodicalQuerier = Task.Factory.StartNew(CreatePeriodicalQuerier);
} }
@ -390,11 +390,11 @@ namespace Milimoe.FunGame.Server.Model
// 启动服务器 // 启动服务器
TaskUtility.NewTask(() => TaskUtility.NewTask(() =>
{ {
if (Config.GameModeLoader != null && Config.GameModeLoader.ServerModes.ContainsKey(room.GameMode)) if (Config.GameModuleLoader != null && Config.GameModuleLoader.ServerModules.ContainsKey(room.GameModule))
{ {
NowGamingServer = Config.GameModeLoader.GetServerMode(room.GameMode); NowGamingServer = Config.GameModuleLoader.GetServerMode(room.GameModule);
Dictionary<string, IServerModel> others = Server.UserList.Cast<IServerModel>().Where(model => usernames.Contains(model.User.Username) && model.User.Username != UserName).ToDictionary(k => k.User.Username, v => v); Dictionary<string, IServerModel> others = Server.UserList.Cast<IServerModel>().Where(model => usernames.Contains(model.User.Username) && model.User.Username != UserName).ToDictionary(k => k.User.Username, v => v);
if (NowGamingServer.StartServer(room.GameMode, room, users, this, others)) if (NowGamingServer.StartServer(room.GameModule, room, users, this, others))
{ {
foreach (ServerModel serverTask in Server.UserList.Cast<ServerModel>().Where(model => usernames.Contains(model.User.Username))) foreach (ServerModel serverTask in Server.UserList.Cast<ServerModel>().Where(model => usernames.Contains(model.User.Username)))
{ {

View File

@ -80,7 +80,7 @@ namespace Milimoe.FunGame.Server.Others
/// <summary> /// <summary>
/// FunGame Runtime /// FunGame Runtime
/// </summary> /// </summary>
public static FunGameInfo.FunGame FunGameType { get; } = FunGameInfo.FunGame.FunGame_Server; public static FunGameInfo.FunGame FunGameType => FunGameInfo.FunGame.FunGame_Server;
/// <summary> /// <summary>
/// 服务器指令列表 /// 服务器指令列表
@ -100,12 +100,12 @@ namespace Milimoe.FunGame.Server.Others
/// <summary> /// <summary>
/// Server实际安装的模组 /// Server实际安装的模组
/// </summary> /// </summary>
public static GameModeLoader? GameModeLoader { get; set; } public static GameModuleLoader? GameModuleLoader { get; set; }
/// <summary> /// <summary>
/// 未LoadGameMods时此属性表示至少需要安装的模组 /// 未Loadmodules时此属性表示至少需要安装的模组
/// </summary> /// </summary>
public static string[] GameModeSupported { get; set; } = []; public static string[] GameModuleSupported { get; set; } = [];
/// <summary> /// <summary>
/// 全局数据库连接器 /// 全局数据库连接器

View File

@ -38,9 +38,9 @@ namespace Milimoe.FunGame.Server.Utility
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
prefix = "[Plugin] "; prefix = "[Plugin] ";
break; break;
case InvokeMessageType.GameMode: case InvokeMessageType.GameModule:
Console.ForegroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Blue;
prefix = "[GameMode] "; prefix = "[GameModule] ";
break; break;
case InvokeMessageType.System: case InvokeMessageType.System:
case InvokeMessageType.None: case InvokeMessageType.None:

View File

@ -1,7 +1,7 @@
GNU AFFERO GENERAL PUBLIC LICENSE GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007 Version 3, 19 November 2007
Copyright (C) 2022-2024 milimoe & project-redbud. Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.