适配新版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)
{
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") ?? "";
bool isrank = DataRequest.GetHashtableJsonObject<bool>(RequestData, "isrank");
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_LastRequest) + " : " + RoomSet.GetTypeString(type) + " (" + string.Join(", ", [gamemode, gamemap]) + ")", InvokeMessageType.DataRequest);
if (gamemode == "" || gamemap == "")
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_LastRequest) + " : " + RoomSet.GetTypeString(type) + " (" + string.Join(", ", [GameModule, gamemap]) + ")", InvokeMessageType.DataRequest);
if (GameModule == "" || gamemap == "")
{
ServerHelper.WriteLine("缺少对应的模组或地图,无法创建房间。");
ResultData.Add("room", room);
@ -184,7 +184,7 @@ namespace Milimoe.FunGame.Server.Controller
if (user.Id != 0)
{
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)
{
ServerHelper.WriteLine("[CreateRoom] Master: " + user.Username + " RoomID: " + roomid);

View File

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

View File

@ -35,7 +35,7 @@ namespace Milimoe.FunGame.Server.Model
/**
* Private
*/
private GameModeServer? NowGamingServer = null;
private GameModuleServer? NowGamingServer = null;
private ClientSocket? _Socket = null;
private bool _Running = false;
@ -73,8 +73,8 @@ namespace Milimoe.FunGame.Server.Model
// 接收客户端消息
try
{
// 禁止GameModeServer调用
if ((IServerModel)this is GameModeServer) throw new NotSupportedException("请勿在GameModeServer类中调用此方法");
// 禁止GameModuleServer调用
if ((IServerModel)this is GameModuleServer) throw new NotSupportedException("请勿在GameModuleServer类中调用此方法");
SocketObject[] SocketObjects = socket.Receive();
if (SocketObjects.Length == 0)
@ -229,7 +229,7 @@ namespace Milimoe.FunGame.Server.Model
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 PeriodicalQuerier = Task.Factory.StartNew(CreatePeriodicalQuerier);
}
@ -390,11 +390,11 @@ namespace Milimoe.FunGame.Server.Model
// 启动服务器
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);
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)))
{

View File

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

View File

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

View File

@ -1,7 +1,7 @@
GNU AFFERO GENERAL PUBLIC LICENSE
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
of this license document, but changing it is not allowed.