This commit is contained in:
Mili 2023-01-29 21:33:06 +08:00
commit 47cbdd756a

View File

@ -8,6 +8,7 @@ using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception; using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Desktop.Controller;
using Milimoe.FunGame.Desktop.Library.Component; using Milimoe.FunGame.Desktop.Library.Component;
using Milimoe.FunGame.Desktop.Others; using Milimoe.FunGame.Desktop.Others;
using Milimoe.FunGame.Desktop.UI; using Milimoe.FunGame.Desktop.UI;
@ -98,70 +99,76 @@ namespace Milimoe.FunGame.Desktop.Model
public ConnectResult Connect() public ConnectResult Connect()
{ {
if (Others.Constant.SERVER_IPADRESS == "" || Others.Constant.SERVER_PORT <= 0)
{
ShowMessage.ErrorMessage("查找可用的服务器失败!");
return ConnectResult.FindServerFailed;
}
try try
{ {
if (Others.Constant.SERVER_IPADRESS == "" || Others.Constant.SERVER_PORT <= 0) if (Others.Config.FunGame_isRetrying)
{ {
ShowMessage.ErrorMessage("查找可用的服务器失败!"); Main?.GetMessage("正在连接服务器,请耐心等待。");
return ConnectResult.FindServerFailed; Config.FunGame_isRetrying = false;
return ConnectResult.CanNotConnect;
} }
while (true) if (!Others.Config.FunGame_isConnected)
{ {
if (Others.Config.FunGame_isRetrying) Main!.CurrentRetryTimes++;
if (Main!.CurrentRetryTimes == 0) Main!.GetMessage("开始连接服务器...", true, TimeType.General);
else Main!.GetMessage("第" + Main!.CurrentRetryTimes + "次重试连接服务器...");
// 超过重连次数上限
if (Main!.CurrentRetryTimes + 1 > Main!.MaxRetryTimes)
{ {
Main?.GetMessage("正在连接服务器,请耐心等待。"); throw new Exception("无法连接至服务器,请检查网络并重启游戏再试。");
Config.FunGame_isRetrying= false;
return ConnectResult.CanNotConnect;
} }
if (!Others.Config.FunGame_isConnected) // 与服务器建立连接
Socket?.Close();
Others.Config.FunGame_isRetrying = true;
Socket = Core.Library.Common.Network.Socket.Connect(Others.Constant.SERVER_IPADRESS, Others.Constant.SERVER_PORT);
if (Socket != null && Socket.Connected)
{ {
Main!.CurrentRetryTimes++; // 发送连接请求
if (Main!.CurrentRetryTimes == 0) Main!.GetMessage("开始连接服务器...", true, TimeType.General); if (Socket.Send(SocketMessageType.Connect) == SocketResult.Success)
else Main!.GetMessage("第" + Main!.CurrentRetryTimes + "次重试连接服务器...");
// 超过重连次数上限
if (Main!.CurrentRetryTimes + 1 > Main!.MaxRetryTimes)
{ {
throw new Exception("无法连接至服务器,请检查网络并重启游戏再试。"); Task t = Task.Factory.StartNew(() =>
}
// 与服务器建立连接
Socket?.Close();
Others.Config.FunGame_isRetrying = true;
Socket = Core.Library.Common.Network.Socket.Connect(Others.Constant.SERVER_IPADRESS, Others.Constant.SERVER_PORT);
if (Socket != null && Socket.Connected)
{
// 发送连接请求
if (Socket.Send(SocketMessageType.Connect) == SocketResult.Success)
{ {
Task t = Task.Factory.StartNew(() => if (Receiving() == SocketMessageType.Connect)
{ {
if (Receiving() == SocketMessageType.Connect) Main?.GetMessage("连接服务器成功请登录账号以体验FunGame。");
{ Main?.UpdateUI(MainControllerSet.Connected);
Main?.GetMessage("连接服务器成功请登录账号以体验FunGame。"); StartReceiving();
Main?.UpdateUI(MainControllerSet.Connected); }
StartReceiving(); });
} return ConnectResult.Success;
});
return ConnectResult.Success;
}
Socket?.Close();
Config.FunGame_isRetrying = false;
return ConnectResult.ConnectFailed;
} }
Socket?.Close();
Config.FunGame_isRetrying = false;
throw new Exception("无法连接至服务器,请检查网络并重启游戏再试。");
} }
else }
{ else
Main?.GetMessage("已连接至服务器,请勿重复连接。"); {
return ConnectResult.CanNotConnect; Main?.GetMessage("已连接至服务器,请勿重复连接。");
} return ConnectResult.CanNotConnect;
} }
} }
catch (Exception e) catch (Exception e)
{ {
Main?.GetMessage(e.GetErrorInfo(), false); Main?.GetMessage(e.GetErrorInfo(), false);
Config.FunGame_isRetrying = false; Config.FunGame_isRetrying = false;
if (Config.FunGame_isAutoRetry && Main!.CurrentRetryTimes <= Main!.MaxRetryTimes)
{
Task.Run(() =>
{
Thread.Sleep(5000);
if (Others.Config.FunGame_isAutoRetry) Connect(); // 再次判断是否开启自动重连
});
Main?.GetMessage("连接服务器失败5秒后自动尝试重连。");
}
else return ConnectResult.ConnectFailed;
} }
return ConnectResult.CanNotConnect;
return ConnectResult.ConnectFailed;
} }
public bool Close() public bool Close()
@ -285,7 +292,7 @@ namespace Milimoe.FunGame.Desktop.Model
{ {
if (objs.Length > 0) Config.FunGame_Notice = NetworkUtility.ConvertJsonObject<string>(objs[0])!; if (objs.Length > 0) Config.FunGame_Notice = NetworkUtility.ConvertJsonObject<string>(objs[0])!;
} }
private void SocketHandle_CheckLogin(object[] objs) private void SocketHandle_CheckLogin(object[] objs)
{ {
string msg = ""; string msg = "";
@ -294,7 +301,7 @@ namespace Milimoe.FunGame.Desktop.Model
Main?.GetMessage(msg); Main?.GetMessage(msg);
Main?.UpdateUI(MainControllerSet.SetUser, new object[] { Factory.New<User>(msg) }); Main?.UpdateUI(MainControllerSet.SetUser, new object[] { Factory.New<User>(msg) });
} }
private void SocketHandle_Disconnect(object[] objs) private void SocketHandle_Disconnect(object[] objs)
{ {
string msg = ""; string msg = "";