using Google.Protobuf; using ServerCore; using ServerBase; using ServerCommon; using static ClientToGameRes.Types; namespace GameServer.PacketHandler { [PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_AICHAT_AUTH), typeof(AIChatAuthPacketHandler), typeof(GameLoginListener))] public class AIChatAuthPacketHandler : PacketRecvHandler { public static bool send_S2C_ACK_AICHAT_AUTH(Player player, Result result, string? jwt = null, int leftTime = 0) { var err_msg = string.Empty; var ack_packet = new ClientToGame(); ack_packet.Response = new ClientToGameRes(); ack_packet.Response.ErrorCode = result.ErrorCode; ack_packet.Response.AckAIChatAuth = new GS2C_ACK_AICHAT_AUTH(); ack_packet.Response.AckAIChatAuth.Jwt = jwt ?? string.Empty; ack_packet.Response.AckAIChatAuth.LeftTime = leftTime; if (false == GameServerApp.getServerLogic().onSendPacket(player, ack_packet)) { return false; } return true; } public override async Task onProcessPacket(ISession entityWithSession, IMessage recvMessage) { var result = new Result(); var err_msg = string.Empty; var player = entityWithSession as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); var player_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!! - {player.toBasicString()}"); var ai_chat_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(ai_chat_action, () => $"ai_chat_action is null !!! - {player.toBasicString()}"); (result, var jwt) = await ai_chat_action.jwtIssue(player.getUserGuid()); if(result.ErrorCode == ServerErrorCode.AiChatServerUserNotFound) { result = await ai_chat_action.registerUser(player.getUserGuid(), player.getUserNickname()); if (result.isFail()) { err_msg = $"Failed Register User : {player.getUserGuid()}"; Log.getLogger().error(err_msg); send_S2C_ACK_AICHAT_AUTH(player, result); return result; } (result, jwt) = await ai_chat_action.jwtIssue(player.getUserGuid()); } if(result.isFail() || string.IsNullOrEmpty(jwt)) { send_S2C_ACK_AICHAT_AUTH(player, result); return result; } (result, var jwtInfo) = await ai_chat_action.jwtverify(jwt); if (result.isFail() || jwt == null) { send_S2C_ACK_AICHAT_AUTH(player, result); return result; } NullReferenceCheckHelper.throwIfNull(jwtInfo, () => $"jwtInfo is null !!"); send_S2C_ACK_AICHAT_AUTH(player, result, jwt, jwtInfo.exp - jwtInfo.iat); return result; } public override async Task onProcessPacketException(ISession entityWithSession, IMessage recvMessage , Result errorResult) { await Task.CompletedTask; var player = entityWithSession as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!! - {entityWithSession.toBasicString()}"); send_S2C_ACK_AICHAT_AUTH(player, errorResult); } } }