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,