mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
feat: gateserver & dispatch server isolation
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user