From 3825780bd44f32b38ed80b4b377bd21891d6e41d Mon Sep 17 00:00:00 2001
From: milimoe <110188673+milimoe@users.noreply.github.com>
Date: Sat, 9 Sep 2023 00:20:54 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E5=BA=95=E5=B1=82Connect?=
=?UTF-8?q?=E5=92=8CDisconnect=20(#52)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Api/Transmittal/DataRequest.cs | 7 +--
Controller/RunTimeController.cs | 100 +++++++++++++++++++++++++++++++-
Library/Constant/ConstantSet.cs | 8 +--
Library/Constant/TypeEnum.cs | 8 +--
Service/SocketManager.cs | 1 +
5 files changed, 103 insertions(+), 21 deletions(-)
diff --git a/Api/Transmittal/DataRequest.cs b/Api/Transmittal/DataRequest.cs
index 6da520e..fdc81cc 100644
--- a/Api/Transmittal/DataRequest.cs
+++ b/Api/Transmittal/DataRequest.cs
@@ -204,13 +204,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
{
return type switch
{
- DataRequestType.RunTime_Connect => DataRequestSet.RunTime_Connect,
- DataRequestType.RunTime_Reg => DataRequestSet.RunTime_Reg,
- DataRequestType.RunTime_CheckReg => DataRequestSet.RunTime_CheckReg,
- DataRequestType.RunTime_Login => DataRequestSet.RunTime_Login,
- DataRequestType.RunTime_CheckLogin => DataRequestSet.RunTime_CheckLogin,
DataRequestType.RunTime_Logout => DataRequestSet.RunTime_Logout,
- DataRequestType.RunTime_Disconnect => DataRequestSet.RunTime_Disconnect,
DataRequestType.Main_GetNotice => DataRequestSet.Main_GetNotice,
DataRequestType.Main_CreateRoom => DataRequestSet.Main_CreateRoom,
DataRequestType.Main_UpdateRoom => DataRequestSet.Main_UpdateRoom,
@@ -219,6 +213,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
DataRequestType.Main_MatchRoom => DataRequestSet.Main_MatchRoom,
DataRequestType.Main_Chat => DataRequestSet.Main_Chat,
DataRequestType.Reg_GetRegVerifyCode => DataRequestSet.Reg_GetRegVerifyCode,
+ DataRequestType.Login_Login => DataRequestSet.Login_Login,
DataRequestType.Login_GetFindPasswordVerifyCode => DataRequestSet.Login_GetFindPasswordVerifyCode,
DataRequestType.Login_UpdatePassword => DataRequestSet.Login_UpdatePassword,
DataRequestType.Room_GetRoomSettings => DataRequestSet.Room_GetRoomSettings,
diff --git a/Controller/RunTimeController.cs b/Controller/RunTimeController.cs
index 964902a..f2dc74a 100644
--- a/Controller/RunTimeController.cs
+++ b/Controller/RunTimeController.cs
@@ -57,6 +57,84 @@ namespace Milimoe.FunGame.Core.Controller
return result;
}
+ ///
+ /// 连接服务器
+ ///
+ ///
+ ///
+ ///
+ public ConnectResult Connect(string ip, int port)
+ {
+ if (!BeforeConnect())
+ {
+ return ConnectResult.ConnectFailed;
+ }
+
+ ConnectResult result = ConnectResult.Success;
+ string msg = "";
+ string servername = "";
+ string notice = "";
+
+ // 检查服务器IP地址和端口是否正确
+ if (ip == "" || port <= 0)
+ {
+ (ip, port) = GetServerAddress();
+ if (ip == "" || port <= 0)
+ {
+ result = ConnectResult.FindServerFailed;
+ }
+ }
+ if (result == ConnectResult.Success)
+ {
+ // 与服务器建立连接
+ _Socket?.Close();
+ _Socket = Socket.Connect(ip, port);
+ if (_Socket != null && _Socket.Connected)
+ {
+ if (_Socket.Send(SocketMessageType.Connect) == SocketResult.Success)
+ {
+ SocketObject[] objs = _Socket.ReceiveArray();
+ foreach (SocketObject obj in objs)
+ {
+ if (obj.SocketType == SocketMessageType.Connect)
+ {
+ bool success = obj.GetParam(0);
+ msg = obj.GetParam(1) ?? "";
+ if (success)
+ {
+ _Socket.Token = obj.GetParam(2);
+ servername = obj.GetParam(3) ?? "";
+ notice = obj.GetParam(4) ?? "";
+ StartReceiving();
+ Task.Run(() =>
+ {
+ while (true)
+ {
+ if (_IsReceiving)
+ {
+ break;
+ }
+ }
+ });
+ }
+ }
+ }
+ }
+ else
+ {
+ result = ConnectResult.ConnectFailed;
+ }
+ }
+ else _Socket?.Close();
+ }
+
+ object[] ConnectArgs = new object[] { result, msg, servername, notice };
+ AfterConnect(ConnectArgs);
+
+ // 允许修改数组中的result,强行改变连接的结果
+ return (ConnectResult)ConnectArgs[0];
+ }
+
///
/// 获取服务器地址
///
@@ -85,11 +163,26 @@ namespace Milimoe.FunGame.Core.Controller
}
///
- /// 客户端需要自行实现连接服务器的事务
+ /// 此方法将在连接服务器前触发
+ /// 客户端可以重写此方法
///
- /// 连接结果
- public abstract ConnectResult Connect();
+ /// false:中止连接
+ public virtual bool BeforeConnect()
+ {
+ return true;
+ }
+ ///
+ /// 此方法将在连接服务器后触发(Connect结果返回前)
+ /// 客户端可以重写此方法
+ ///
+ /// 连接服务器后返回的一些数据,可以使用也可以修改它们
+ ///
+ public virtual void AfterConnect(object[] ConnectArgs)
+ {
+
+ }
+
///
/// 客户端需要自行实现自动登录的事务
///
@@ -218,6 +311,7 @@ namespace Milimoe.FunGame.Core.Controller
switch (type)
{
case SocketMessageType.Disconnect:
+ Close();
SocketHandler_Disconnect(ServerMessage);
break;
diff --git a/Library/Constant/ConstantSet.cs b/Library/Constant/ConstantSet.cs
index db29a98..124f596 100644
--- a/Library/Constant/ConstantSet.cs
+++ b/Library/Constant/ConstantSet.cs
@@ -34,6 +34,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
public const string Socket = "Socket";
public const string Unknown = "Unknown";
public const string DataRequest = "DataRequest";
+ public const string Connect = "Connect";
public const string Disconnect = "Disconnect";
public const string HeartBeat = "HeartBeat";
public const string ForceLogout = "ForceLogout";
@@ -52,13 +53,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
/**
* RunTime
*/
- public const string RunTime_Connect = "RunTime::Connect";
- public const string RunTime_Reg = "RunTime::Reg";
- public const string RunTime_CheckReg = "RunTime::CheckReg";
- public const string RunTime_Login = "RunTime::Login";
- public const string RunTime_CheckLogin = "RunTime::CheckLogin";
public const string RunTime_Logout = "RunTime::Logout";
- public const string RunTime_Disconnect = "RunTime::Disconnect";
/**
* Main
*/
@@ -76,6 +71,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
/**
* Login
*/
+ public const string Login_Login = "Login::Login";
public const string Login_GetFindPasswordVerifyCode = "Login::GetFindPasswordVerifyCode";
public const string Login_UpdatePassword = "Login::UpdatePassword";
/**
diff --git a/Library/Constant/TypeEnum.cs b/Library/Constant/TypeEnum.cs
index ec0843d..0fb5f9c 100644
--- a/Library/Constant/TypeEnum.cs
+++ b/Library/Constant/TypeEnum.cs
@@ -59,6 +59,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
{
Unknown,
DataRequest,
+ Connect,
Disconnect,
HeartBeat,
ForceLogout,
@@ -72,13 +73,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
public enum DataRequestType
{
UnKnown,
- RunTime_Connect,
- RunTime_Reg,
- RunTime_CheckReg,
- RunTime_Login,
- RunTime_CheckLogin,
RunTime_Logout,
- RunTime_Disconnect,
Main_GetNotice,
Main_CreateRoom,
Main_UpdateRoom,
@@ -87,6 +82,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
Main_MatchRoom,
Main_Chat,
Reg_GetRegVerifyCode,
+ Login_Login,
Login_GetFindPasswordVerifyCode,
Login_UpdatePassword,
Room_GetRoomSettings,
diff --git a/Service/SocketManager.cs b/Service/SocketManager.cs
index 865656c..75d84c5 100644
--- a/Service/SocketManager.cs
+++ b/Service/SocketManager.cs
@@ -257,6 +257,7 @@ namespace Milimoe.FunGame.Core.Service
return type switch
{
SocketMessageType.DataRequest => SocketSet.DataRequest,
+ SocketMessageType.Connect => SocketSet.Connect,
SocketMessageType.Disconnect => SocketSet.Disconnect,
SocketMessageType.HeartBeat => SocketSet.HeartBeat,
SocketMessageType.ForceLogout => SocketSet.ForceLogout,