mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-04-22 03:59:36 +08:00
适配新版DLL (#34)
This commit is contained in:
parent
12883fd233
commit
cea0f393f7
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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)))
|
||||||
{
|
{
|
||||||
|
@ -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>
|
||||||
/// 全局数据库连接器
|
/// 全局数据库连接器
|
||||||
|
@ -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:
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user