forked from project-redbud/FunGame-Core
提供底层Connect和Disconnect (#52)
This commit is contained in:
parent
e4aef07792
commit
3825780bd4
@ -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,
|
||||
|
||||
@ -57,6 +57,84 @@ namespace Milimoe.FunGame.Core.Controller
|
||||
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>
|
||||
@ -85,10 +163,25 @@ namespace Milimoe.FunGame.Core.Controller
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 客户端需要自行实现连接服务器的事务
|
||||
/// 此方法将在连接服务器前触发<para/>
|
||||
/// 客户端可以重写此方法
|
||||
/// </summary>
|
||||
/// <returns>连接结果</returns>
|
||||
public abstract ConnectResult Connect();
|
||||
/// <returns>false:中止连接</returns>
|
||||
public virtual bool BeforeConnect()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 此方法将在连接服务器后触发(Connect结果返回前)<para/>
|
||||
/// 客户端可以重写此方法
|
||||
/// </summary>
|
||||
/// <param name="ConnectArgs">连接服务器后返回的一些数据,可以使用也可以修改它们</param>
|
||||
/// <returns></returns>
|
||||
public virtual void AfterConnect(object[] ConnectArgs)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 客户端需要自行实现自动登录的事务
|
||||
@ -218,6 +311,7 @@ namespace Milimoe.FunGame.Core.Controller
|
||||
switch (type)
|
||||
{
|
||||
case SocketMessageType.Disconnect:
|
||||
Close();
|
||||
SocketHandler_Disconnect(ServerMessage);
|
||||
break;
|
||||
|
||||
|
||||
@ -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";
|
||||
/**
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user