feat: gateserver & dispatch server isolation

This commit is contained in:
StopWuyu
2025-08-17 15:54:30 +08:00
parent b5dac65fec
commit dad9efe7a9
8 changed files with 205 additions and 64 deletions

View File

@@ -13,24 +13,48 @@ namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Player;
[Opcode(CmdIds.PlayerGetTokenCsReq)]
public class HandlerPlayerGetTokenCsReq : Handler
{
private readonly Logger logger = new("GameServer");
private readonly Logger _logger = new("GameServer");
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = PlayerGetTokenCsReq.Parser.ParseFrom(data);
var account = DatabaseHelper.Instance?.GetInstance<AccountData>(int.Parse(req.AccountUid));
if (account == null)
// call dispatch /get_account_info api to get account info
int uid;
if (ConfigManager.Config.ServerOption.ServerConfig.RunDispatch || string.IsNullOrEmpty(ConfigManager.Config.ServerOption.ServerConfig.FromDispatchBaseUrl))
{
await connection.SendPacket(new PacketPlayerGetTokenScRsp(0, Retcode.RetNotInWhiteList));
return;
// dispatch running, use local db
var account = DatabaseHelper.Instance?.GetInstance<AccountData>(int.Parse(req.AccountUid));
if (account == null)
{
await connection.SendPacket(new PacketPlayerGetTokenScRsp(0, Retcode.RetNotInWhiteList));
return;
}
uid = account.Uid;
}
else
{
// dispatch not running, use dispatch api
var dispatchUrl = ConfigManager.Config.ServerOption.ServerConfig.FromDispatchBaseUrl;
var targetUrl = $"{dispatchUrl}/get_account_info?accountUid={req.AccountUid}";
var res = await HttpNetwork.SendGetRequest(targetUrl);
if (res.Item1 != 200 || res.Item2 == null)
{
await connection.SendPacket(new PacketPlayerGetTokenScRsp(0, Retcode.RetNotInWhiteList));
return;
}
uid = int.Parse(res.Item2);
}
if (!ResourceManager.IsLoaded)
// resource manager not loaded, return
return;
var prev = Listener.GetActiveConnection(account.Uid);
var prev = Listener.GetActiveConnection(uid);
if (prev != null)
{
await prev.SendPacket(new PacketPlayerKickOutScNotify());
@@ -52,7 +76,7 @@ public class HandlerPlayerGetTokenCsReq : Handler
if (ConfigManager.Config.GameServer.UsePacketEncryption)
{
connection.XorKey = Crypto.GenerateXorKey(connection.ClientSecretKeySeed);
logger.Info($"{connection.RemoteEndPoint} key exchange successful");
_logger.Info($"{connection.RemoteEndPoint} key exchange successful");
}
}
}