添加LoadGameModes和连接服务器验证

This commit is contained in:
milimoe 2023-11-27 21:44:52 +08:00
parent bf9665b4a8
commit 760c81e0ae
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
4 changed files with 81 additions and 39 deletions

View File

@ -1,4 +1,5 @@
using Milimoe.FunGame.Core.Api.Transmittal; using System.Collections;
using Milimoe.FunGame.Core.Api.Transmittal;
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Common.Event;
@ -34,7 +35,27 @@ namespace Milimoe.FunGame.Desktop.Controller
RunTime.Session, RunTime.Config); RunTime.Session, RunTime.Config);
foreach (string name in RunTime.PluginLoader.Plugins.Keys) foreach (string name in RunTime.PluginLoader.Plugins.Keys)
{ {
Main.GetMessage("[ PluginLoader ] Load: " + name); Main.GetMessage("[ Plugin ] Loaded: " + name);
}
}
catch (Exception e)
{
Main.GetMessage(e.GetErrorInfo(), TimeType.None);
}
}
public void LoadGameModes()
{
try
{
RunTime.GameModeLoader = GameModeLoader.LoadGameModes(
new Action<string>(WritelnSystemInfo),
new Func<DataRequestType, DataRequest>(NewDataRequest),
new Func<DataRequestType, DataRequest>(NewLongRunningDataRequest),
RunTime.Session, RunTime.Config);
foreach (string name in RunTime.GameModeLoader.Modes.Keys)
{
Main.GetMessage("[ GameMode ] Loaded: " + name);
} }
} }
catch (Exception e) catch (Exception e)
@ -57,13 +78,20 @@ namespace Milimoe.FunGame.Desktop.Controller
Close(); Close();
} }
public override bool BeforeConnect(ref string ip, ref int port) public override bool BeforeConnect(ref string ip, ref int port, ArrayList ConnectArgs)
{ {
if (Config.FunGame_isRetrying) if (Config.FunGame_isRetrying)
{ {
Main.GetMessage("正在连接服务器,请耐心等待。"); Main.GetMessage("正在连接服务器,请耐心等待。");
return false; return false;
} }
string[] gamemodes = [];
if (RunTime.GameModeLoader != null)
{
gamemodes = RunTime.GameModeLoader.Modes.Keys.ToArray();
}
ConnectArgs.Add(gamemodes); // 服务器检查是否拥有需要的模组
ConnectArgs.Add(FunGameInfo.FunGame_DebugMode); // 是否开启了debug模式
if (!Config.FunGame_isConnected) if (!Config.FunGame_isConnected)
{ {
Main.CurrentRetryTimes++; Main.CurrentRetryTimes++;
@ -91,19 +119,27 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
} }
public override void AfterConnect(object[] ConnectArgs) public override void AfterConnect(ArrayList ConnectArgs)
{ {
Config.FunGame_isRetrying = false; Config.FunGame_isRetrying = false;
ConnectResult result = (ConnectResult)ConnectArgs[0]; ConnectResult result = (ConnectResult?)ConnectArgs[0] ?? ConnectResult.FindServerFailed;
string msg = (string)ConnectArgs[1]; string msg = (string?)ConnectArgs[1] ?? "";
string servername = (string)ConnectArgs[2]; string servername = (string?)ConnectArgs[2] ?? "";
string notice = (string)ConnectArgs[3]; string notice = (string?)ConnectArgs[3] ?? "";
if (msg != "") if (msg != "")
{ {
Main.GetMessage(msg); Main.GetMessage(msg);
if (result != ConnectResult.Success) Main.ShowMessage(ShowMessageType.Error, msg); if (result != ConnectResult.Success)
{
// 有弹窗会关闭自动重连。
Config.FunGame_isAutoRetry = false;
if (Main.ShowMessage(ShowMessageType.RetryCancel, msg, "连接服务器失败") == MessageResult.Retry)
{
Config.FunGame_isAutoRetry = true;
}
}
} }
if (result == ConnectResult.Success) if (result == ConnectResult.Success)

View File

@ -70,10 +70,10 @@ namespace Milimoe.FunGame.Desktop.Library
/// <summary> /// <summary>
/// 当前游戏模式 /// 当前游戏模式
/// </summary> /// </summary>
public static string FunGame_GameMode public static string FunGame_RoomType
{ {
get => RunTime.Config.FunGame_GameMode; get => RunTime.Config.FunGame_RoomType;
set => RunTime.Config.FunGame_GameMode = value; set => RunTime.Config.FunGame_RoomType = value;
} }
/// <summary> /// <summary>

View File

@ -12,6 +12,7 @@ namespace Milimoe.FunGame.Desktop.Model
public static Core.Model.Session Session { get; } = new(); public static Core.Model.Session Session { get; } = new();
public static Core.Model.FunGameConfig Config { get; } = new(); public static Core.Model.FunGameConfig Config { get; } = new();
public static Core.Api.Utility.PluginLoader? PluginLoader { get; set; } = null; public static Core.Api.Utility.PluginLoader? PluginLoader { get; set; } = null;
public static Core.Api.Utility.GameModeLoader? GameModeLoader { get; set; } = null;
public static Core.Library.Common.Network.Socket? Socket { get; set; } = null; public static Core.Library.Common.Network.Socket? Socket { get; set; } = null;
public static Controller.RunTimeController? Controller { get; set; } = null; public static Controller.RunTimeController? Controller { get; set; } = null;
public static UI.Main? Main { get; set; } = null; public static UI.Main? Main { get; set; } = null;

View File

@ -60,6 +60,8 @@ namespace Milimoe.FunGame.Desktop.UI
break; break;
} }
} }
// 加载模组
RunTime.Controller.LoadGameModes();
// 加载插件 // 加载插件
RunTime.Controller.LoadPlugins(); RunTime.Controller.LoadPlugins();
// 自动连接服务器 // 自动连接服务器
@ -477,10 +479,10 @@ namespace Milimoe.FunGame.Desktop.UI
int PlayerCount = users.Count; int PlayerCount = users.Count;
for (int i = 10; i > 0; i--) for (int i = 10; i > 0; i--)
{ {
WritelnGameInfo("房间 [ " + room.Roomid + " (" + PlayerCount + "人" + GameMode.GetTypeString(room.RoomType) + ") ] 的游戏将在" + i + "秒后开始..."); WritelnGameInfo("房间 [ " + room.Roomid + " (" + PlayerCount + "人" + RoomSet.GetTypeString(room.RoomType) + ") ] 的游戏将在" + i + "秒后开始...");
await Task.Delay(1000); await Task.Delay(1000);
} }
WritelnGameInfo("房间 [ " + room.Roomid + " (" + PlayerCount + "人" + GameMode.GetTypeString(room.RoomType) + ") ] 的游戏正式开始!"); WritelnGameInfo("房间 [ " + room.Roomid + " (" + PlayerCount + "人" + RoomSet.GetTypeString(room.RoomType) + ") ] 的游戏正式开始!");
}); });
SetButtonEnableIfLogon(false, ClientState.InRoom); SetButtonEnableIfLogon(false, ClientState.InRoom);
} }
@ -643,7 +645,7 @@ namespace Milimoe.FunGame.Desktop.UI
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
Config.FunGame_isMatching = true; Config.FunGame_isMatching = true;
if (await MainController.MatchRoomAsync(Config.FunGame_GameMode)) if (await MainController.MatchRoomAsync(Config.FunGame_RoomType))
{ {
// 开始匹配 // 开始匹配
while (Config.FunGame_isMatching) while (Config.FunGame_isMatching)
@ -656,7 +658,7 @@ namespace Milimoe.FunGame.Desktop.UI
continue; continue;
} }
// 达到60秒时 // 达到60秒时
if (Config.FunGame_isMatching && await MainController.MatchRoomAsync(Config.FunGame_GameMode, true)) if (Config.FunGame_isMatching && await MainController.MatchRoomAsync(Config.FunGame_RoomType, true))
{ {
// 取消匹配 // 取消匹配
UpdateUI(MainInvokeType.MatchRoom, StartMatchState.Success, General.HallInstance); UpdateUI(MainInvokeType.MatchRoom, StartMatchState.Success, General.HallInstance);
@ -783,7 +785,7 @@ namespace Milimoe.FunGame.Desktop.UI
{ {
TaskUtility.NewTask(async () => TaskUtility.NewTask(async () =>
{ {
if (MainController != null && await MainController.MatchRoomAsync(Config.FunGame_GameMode, true)) if (MainController != null && await MainController.MatchRoomAsync(Config.FunGame_RoomType, true))
{ {
UpdateUI(MainInvokeType.MatchRoom, StartMatchState.Cancel); UpdateUI(MainInvokeType.MatchRoom, StartMatchState.Cancel);
} }
@ -999,7 +1001,7 @@ namespace Milimoe.FunGame.Desktop.UI
WritelnGameInfo(DateTimeUtility.GetNowShortTime() + " 开始匹配"); WritelnGameInfo(DateTimeUtility.GetNowShortTime() + " 开始匹配");
WritelnGameInfo("[ " + Usercfg.LoginUserName + " ] 开始匹配"); WritelnGameInfo("[ " + Usercfg.LoginUserName + " ] 开始匹配");
WriteGameInfo(">> 匹配参数:"); WriteGameInfo(">> 匹配参数:");
WritelnGameInfo(Config.FunGame_GameMode); WritelnGameInfo(Config.FunGame_RoomType);
// 显示停止匹配按钮 // 显示停止匹配按钮
StartMatch.Visible = false; StartMatch.Visible = false;
StopMatch.Visible = true; StopMatch.Visible = true;
@ -1031,12 +1033,12 @@ namespace Milimoe.FunGame.Desktop.UI
return; return;
} }
} }
if (Config.FunGame_GameMode.Equals("")) if (Config.FunGame_RoomType.Equals(""))
{ {
ShowMessage(ShowMessageType.Warning, "请勾选你要创建的房间类型!"); ShowMessage(ShowMessageType.Warning, "请勾选你要创建的房间类型!");
return; return;
} }
TaskUtility.NewTask(() => CreateRoom_Handler(Config.FunGame_GameMode, password)); TaskUtility.NewTask(() => CreateRoom_Handler(Config.FunGame_RoomType, password));
} }
/// <summary> /// <summary>
@ -1169,13 +1171,13 @@ namespace Milimoe.FunGame.Desktop.UI
bool IsMix = CheckMix.Checked; bool IsMix = CheckMix.Checked;
bool IsTeam = CheckTeam.Checked; bool IsTeam = CheckTeam.Checked;
bool IsHasPass = CheckHasPass.Checked; bool IsHasPass = CheckHasPass.Checked;
if (IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.All; if (IsMix && IsTeam && !IsHasPass) Config.FunGame_RoomType = RoomSet.All;
else if (IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.AllHasPass; else if (IsMix && IsTeam && IsHasPass) Config.FunGame_RoomType = RoomSet.All;
else if (IsMix && !IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.Mix; else if (IsMix && !IsTeam && !IsHasPass) Config.FunGame_RoomType = RoomSet.Mix;
else if (IsMix && !IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.MixHasPass; else if (IsMix && !IsTeam && IsHasPass) Config.FunGame_RoomType = RoomSet.Mix;
else if (!IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.Team; else if (!IsMix && IsTeam && !IsHasPass) Config.FunGame_RoomType = RoomSet.Team;
else if (!IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.TeamHasPass; else if (!IsMix && IsTeam && IsHasPass) Config.FunGame_RoomType = RoomSet.Team;
else Config.FunGame_GameMode = GameMode.All; else Config.FunGame_RoomType = RoomSet.All;
} }
/// <summary> /// <summary>
@ -1342,16 +1344,19 @@ namespace Milimoe.FunGame.Desktop.UI
public void FailedConnectEvent(object sender, GeneralEventArgs e) public void FailedConnectEvent(object sender, GeneralEventArgs e)
{ {
// 自动重连 // 自动重连
if (Config.FunGame_isConnected && Config.FunGame_isAutoRetry && CurrentRetryTimes <= MaxRetryTimes) if (!Config.FunGame_isConnected)
{
if (Config.FunGame_isAutoRetry && CurrentRetryTimes <= MaxRetryTimes)
{ {
Task.Run(() => Task.Run(() =>
{ {
Thread.Sleep(5000); Thread.Sleep(5000);
if (Config.FunGame_isConnected && Config.FunGame_isAutoRetry) InvokeController_Connect(); // 再次判断是否开启自动重连 if (!Config.FunGame_isConnected && Config.FunGame_isAutoRetry) InvokeController_Connect(); // 再次判断是否开启自动重连
}); });
GetMessage("连接服务器失败5秒后自动尝试重连。"); GetMessage("连接服务器失败5秒后自动尝试重连。");
} }
else GetMessage("无法连接至服务器,请检查你的网络连接。"); else GetMessage("无法连接至服务器,请稍后再试。");
}
} }
/// <summary> /// <summary>
@ -1469,14 +1474,14 @@ namespace Milimoe.FunGame.Desktop.UI
case Constant.FunGame_CreateMix: case Constant.FunGame_CreateMix:
if (Usercfg.InRoom.Roomid == "-1") if (Usercfg.InRoom.Roomid == "-1")
{ {
TaskUtility.NewTask(() => CreateRoom_Handler(GameMode.Mix)); TaskUtility.NewTask(() => CreateRoom_Handler(RoomSet.Mix));
} }
else WritelnGameInfo(">> 先退出当前房间才可以创建房间。"); else WritelnGameInfo(">> 先退出当前房间才可以创建房间。");
break; break;
case Constant.FunGame_CreateTeam: case Constant.FunGame_CreateTeam:
if (Usercfg.InRoom.Roomid == "-1") if (Usercfg.InRoom.Roomid == "-1")
{ {
TaskUtility.NewTask(() => CreateRoom_Handler(GameMode.Team)); TaskUtility.NewTask(() => CreateRoom_Handler(RoomSet.Team));
} }
else WritelnGameInfo(">> 先退出当前房间才可以创建房间。"); else WritelnGameInfo(">> 先退出当前房间才可以创建房间。");
break; break;