提供底层Connect和Disconnect (#52)

This commit is contained in:
milimoe 2023-09-09 00:20:54 +08:00 committed by GitHub
parent e4aef07792
commit 3825780bd4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 103 additions and 21 deletions

View File

@ -204,13 +204,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
{ {
return type switch 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_Logout => DataRequestSet.RunTime_Logout,
DataRequestType.RunTime_Disconnect => DataRequestSet.RunTime_Disconnect,
DataRequestType.Main_GetNotice => DataRequestSet.Main_GetNotice, DataRequestType.Main_GetNotice => DataRequestSet.Main_GetNotice,
DataRequestType.Main_CreateRoom => DataRequestSet.Main_CreateRoom, DataRequestType.Main_CreateRoom => DataRequestSet.Main_CreateRoom,
DataRequestType.Main_UpdateRoom => DataRequestSet.Main_UpdateRoom, DataRequestType.Main_UpdateRoom => DataRequestSet.Main_UpdateRoom,
@ -219,6 +213,7 @@ namespace Milimoe.FunGame.Core.Api.Transmittal
DataRequestType.Main_MatchRoom => DataRequestSet.Main_MatchRoom, DataRequestType.Main_MatchRoom => DataRequestSet.Main_MatchRoom,
DataRequestType.Main_Chat => DataRequestSet.Main_Chat, DataRequestType.Main_Chat => DataRequestSet.Main_Chat,
DataRequestType.Reg_GetRegVerifyCode => DataRequestSet.Reg_GetRegVerifyCode, DataRequestType.Reg_GetRegVerifyCode => DataRequestSet.Reg_GetRegVerifyCode,
DataRequestType.Login_Login => DataRequestSet.Login_Login,
DataRequestType.Login_GetFindPasswordVerifyCode => DataRequestSet.Login_GetFindPasswordVerifyCode, DataRequestType.Login_GetFindPasswordVerifyCode => DataRequestSet.Login_GetFindPasswordVerifyCode,
DataRequestType.Login_UpdatePassword => DataRequestSet.Login_UpdatePassword, DataRequestType.Login_UpdatePassword => DataRequestSet.Login_UpdatePassword,
DataRequestType.Room_GetRoomSettings => DataRequestSet.Room_GetRoomSettings, DataRequestType.Room_GetRoomSettings => DataRequestSet.Room_GetRoomSettings,

View File

@ -57,6 +57,84 @@ namespace Milimoe.FunGame.Core.Controller
return result; return result;
} }
/// <summary>
/// 连接服务器
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <returns></returns>
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<bool>(0);
msg = obj.GetParam<string>(1) ?? "";
if (success)
{
_Socket.Token = obj.GetParam<Guid>(2);
servername = obj.GetParam<string>(3) ?? "";
notice = obj.GetParam<string>(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];
}
/// <summary> /// <summary>
/// 获取服务器地址 /// 获取服务器地址
/// </summary> /// </summary>
@ -85,10 +163,25 @@ namespace Milimoe.FunGame.Core.Controller
} }
/// <summary> /// <summary>
/// 客户端需要自行实现连接服务器的事务 /// 此方法将在连接服务器前触发<para/>
/// 客户端可以重写此方法
/// </summary> /// </summary>
/// <returns>连接结果</returns> /// <returns>false中止连接</returns>
public abstract ConnectResult Connect(); public virtual bool BeforeConnect()
{
return true;
}
/// <summary>
/// 此方法将在连接服务器后触发Connect结果返回前<para/>
/// 客户端可以重写此方法
/// </summary>
/// <param name="ConnectArgs">连接服务器后返回的一些数据,可以使用也可以修改它们</param>
/// <returns></returns>
public virtual void AfterConnect(object[] ConnectArgs)
{
}
/// <summary> /// <summary>
/// 客户端需要自行实现自动登录的事务 /// 客户端需要自行实现自动登录的事务
@ -218,6 +311,7 @@ namespace Milimoe.FunGame.Core.Controller
switch (type) switch (type)
{ {
case SocketMessageType.Disconnect: case SocketMessageType.Disconnect:
Close();
SocketHandler_Disconnect(ServerMessage); SocketHandler_Disconnect(ServerMessage);
break; break;

View File

@ -34,6 +34,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
public const string Socket = "Socket"; public const string Socket = "Socket";
public const string Unknown = "Unknown"; public const string Unknown = "Unknown";
public const string DataRequest = "DataRequest"; public const string DataRequest = "DataRequest";
public const string Connect = "Connect";
public const string Disconnect = "Disconnect"; public const string Disconnect = "Disconnect";
public const string HeartBeat = "HeartBeat"; public const string HeartBeat = "HeartBeat";
public const string ForceLogout = "ForceLogout"; public const string ForceLogout = "ForceLogout";
@ -52,13 +53,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
/** /**
* RunTime * 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_Logout = "RunTime::Logout";
public const string RunTime_Disconnect = "RunTime::Disconnect";
/** /**
* Main * Main
*/ */
@ -76,6 +71,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
/** /**
* Login * Login
*/ */
public const string Login_Login = "Login::Login";
public const string Login_GetFindPasswordVerifyCode = "Login::GetFindPasswordVerifyCode"; public const string Login_GetFindPasswordVerifyCode = "Login::GetFindPasswordVerifyCode";
public const string Login_UpdatePassword = "Login::UpdatePassword"; public const string Login_UpdatePassword = "Login::UpdatePassword";
/** /**

View File

@ -59,6 +59,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
{ {
Unknown, Unknown,
DataRequest, DataRequest,
Connect,
Disconnect, Disconnect,
HeartBeat, HeartBeat,
ForceLogout, ForceLogout,
@ -72,13 +73,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
public enum DataRequestType public enum DataRequestType
{ {
UnKnown, UnKnown,
RunTime_Connect,
RunTime_Reg,
RunTime_CheckReg,
RunTime_Login,
RunTime_CheckLogin,
RunTime_Logout, RunTime_Logout,
RunTime_Disconnect,
Main_GetNotice, Main_GetNotice,
Main_CreateRoom, Main_CreateRoom,
Main_UpdateRoom, Main_UpdateRoom,
@ -87,6 +82,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
Main_MatchRoom, Main_MatchRoom,
Main_Chat, Main_Chat,
Reg_GetRegVerifyCode, Reg_GetRegVerifyCode,
Login_Login,
Login_GetFindPasswordVerifyCode, Login_GetFindPasswordVerifyCode,
Login_UpdatePassword, Login_UpdatePassword,
Room_GetRoomSettings, Room_GetRoomSettings,

View File

@ -257,6 +257,7 @@ namespace Milimoe.FunGame.Core.Service
return type switch return type switch
{ {
SocketMessageType.DataRequest => SocketSet.DataRequest, SocketMessageType.DataRequest => SocketSet.DataRequest,
SocketMessageType.Connect => SocketSet.Connect,
SocketMessageType.Disconnect => SocketSet.Disconnect, SocketMessageType.Disconnect => SocketSet.Disconnect,
SocketMessageType.HeartBeat => SocketSet.HeartBeat, SocketMessageType.HeartBeat => SocketSet.HeartBeat,
SocketMessageType.ForceLogout => SocketSet.ForceLogout, SocketMessageType.ForceLogout => SocketSet.ForceLogout,