using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ServerCore; using ServerBase; using ServerCommon; using SESSION_ID = System.Int32; using WORLD_META_ID = System.UInt32; using META_ID = System.UInt32; using ENTITY_GUID = System.String; using ACCOUNT_ID = System.String; using OWNER_GUID = System.String; using USER_GUID = System.String; using CHARACTER_GUID = System.String; using ITEM_GUID = System.String; using ServerCommon.BusinessLogDomain; namespace GameServer { public class CharacterLoader : EntityLoaderBase { private ServerCommon.BusinessLogDomain.CharacterLogInfo m_character_log = new(); public CharacterLoader(Player owner) : base(owner) { } public override async Task onPrepareLoad() { await Task.CompletedTask; var result = new Result(); var owner = getOwner(); NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!"); setCompetedPrepareLoad(true); return result; } public override async Task onTriggerEffect() { await Task.CompletedTask; var owner = getOwner(); NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!"); var server_logic = GameServerApp.getServerLogic(); NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!! - {owner.toBasicString()}"); var result = new Result(); var err_msg = string.Empty; if (false == isCompletedPrepareLoad()) { err_msg = $"Not completed isCompletedPrepareLoad() !!! - {toBasicString()}, {owner.toBasicString()}"; result.setFail(ServerErrorCode.CharacterPrepareLoadNotCompleted , err_msg); return result; } var batch = new QueryBatchEx( owner, LogActionType.CharacterLoading , server_logic.getDynamoDbClient() ); { var user_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(user_attribute, () => $"user_attribute is null !!! - {owner.toBasicString()}"); batch.addQuery(new DBQCharacterReadAll(user_attribute.UserGuid)); batch.addQuery(new QueryFinal(), tryUpdateCharacterLoadStep); } result = await QueryHelper.sendQueryAndBusinessLog(batch); if (result.isFail()) { return result; } return result; } public async Task tryUpdateCharacterLoadStep(QueryExecutorBase queryExecutorBase) { await Task.CompletedTask; var err_msg = string.Empty; var query_result_type = QueryBatchBase.QueryResultType.Success; var owner = getOwner(); NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!"); var user_create_or_load_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(user_create_or_load_action, () => $"user_create_or_load_action is null !!! - {owner.toBasicString()}"); user_create_or_load_action.clearReservedCharacterForCreation(); var player_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!! - {owner.toBasicString()}"); var selected_character = player_action.getSelectedCharacter(); if(null == selected_character) { err_msg = $"Character Not selected !!! - {owner.toBasicString()}"; getLoadResult().setFail(ServerErrorCode.CharacterNotSelected, err_msg); return query_result_type; } var query_batch = queryExecutorBase.getQueryBatch(); NullReferenceCheckHelper.throwIfNull(query_batch, () => $"query_batch is null !!! - {owner.toBasicString()}"); var log_action = query_batch.getLogAction(); NullReferenceCheckHelper.throwIfNull(log_action, () => $"log_action is null !!! - {owner.toBasicString()}"); var character_attribute = selected_character.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(character_attribute, () => $"character_attribute is null !!! - {owner.toBasicString()}"); (var result, var character_log_info) = await character_attribute.toCharacterLogInfo(); if (result.isFail()) { err_msg = $"Failed to toCharacterLogInfo() !!! : {result.toBasicString()} - {toBasicString()}, {owner.toBasicString()}"; Log.getLogger().error(err_msg); } else { if (character_log_info is not null) { m_character_log.setInfo(character_log_info); // 비즈니스 로그 추가 query_batch.appendBusinessLog(new CharacterBusinessLog(log_action, m_character_log)); } } getLoadResult().setSuccess(); setCompleted(); return query_result_type; } } }