using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; 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; namespace GameServer { public class TestUserCreator : EntityCreatorBase { private bool m_is_pass_register_user_nickname_registeration = false; private ServerCommon.BusinessLogDomain.UserCreateLogInfo m_user_create_log = new(); private ServerCommon.BusinessLogDomain.UserLogInfo m_user_log = new(); public TestUserCreator(Player owner) : base(owner) { } public override async Task onPrepareCreate() { var result = new Result(); var err_msg = string.Empty; var owner = getOwner(); var server_logic = GameServerApp.getServerLogic(); var user_create_or_load_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(user_create_or_load_action, () => $"user_create_or_load_action is null !!! - {owner.toBasicString()}"); var account_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {owner.toBasicString()}"); var account_id = account_attribute.AccountId; var to_add_write_docs = new List(); //===================================================================================== // 1. AccountBaseDoc 갱신 한다. //===================================================================================== account_attribute.modifiedEntityAttribute(); (result, var account_base_doc) = await account_attribute.toDocBase(); if (result.isFail()) { return result; } var modify_account_base_doc = account_base_doc as AccountBaseDoc; NullReferenceCheckHelper.throwIfNull(modify_account_base_doc, () => $"modify_account_base_doc is null !!! - {owner.toBasicString()}"); to_add_write_docs.Add(modify_account_base_doc); //===================================================================================== // 2. UserBaseDoc 생성 한다. //===================================================================================== (result, UserBaseDoc? new_user_base_doc) = await MetaHelper.fillupUserBaseDocBy(owner, modify_account_base_doc); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(new_user_base_doc, () => $"new_user_base_doc is null !!! - {owner.toBasicString()}"); to_add_write_docs.Add(new_user_base_doc); //===================================================================================== // 3. AccountBaseDoc & UserBaseDoc 갱신 한다. //===================================================================================== var user_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(user_attribute, () => $"user_attribute is null !!! - {owner.toBasicString()}"); if (false == user_attribute.applyUserGuidToRefAttributes(modify_account_base_doc, account_attribute, new_user_base_doc)) { err_msg = $"Failed to applyUserGuidToRefAttributes() !!! : newUserGuid:{user_attribute.UserGuid} - {owner.toBasicString()}"; result.setFail(ServerErrorCode.UserGuidApplyToRefAttributeAllFailed, err_msg); Log.getLogger().error(result.toBasicString()); return result; } (result, TestUserCreateMetaData? found_test_user_create_data) = await MetaHelper.getTestUserCreateDataByAccountId(account_id); if (result.isFail()) { return result; } ArgumentNullException.ThrowIfNull(found_test_user_create_data, $"found_test_user_create_data is null !!! - {owner.toBasicString()}"); //===================================================================================== // 4. LevelDoc 생성 한다. //===================================================================================== var level_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(level_attribute, () => $"level_attribute is null !!! - {owner.toBasicString()}"); level_attribute.newEntityAttribute(); (result, var level_doc) = await level_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(level_doc, () => $"level_doc is null !!! - {owner.toBasicString()}"); to_add_write_docs.Add(level_doc); //===================================================================================== // 5. MoneyDoc 생성 한다. //===================================================================================== var money_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(money_attribute, () => $"money_attribute is null !!! - {owner.toBasicString()}"); money_attribute.newEntityAttribute(); (result, var money_doc) = await money_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(money_doc, () => $"money_doc is null !!! - {owner.toBasicString()}"); to_add_write_docs.Add(money_doc); //===================================================================================== // 6. LocationDoc 생성 한다. //===================================================================================== var location_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(location_attribute, () => $"location_attribute is null !!! - {owner.toBasicString()}"); location_attribute.newEntityAttribute(); (result, var location_doc) = await location_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(location_doc, () => $"location_doc is null !!! - {owner.toBasicString()}"); to_add_write_docs.Add(location_doc); //===================================================================================== // 7. 1~6 까지 등록된 Write Doc 목록을 모두 등록 한다. //===================================================================================== result = addWriteDocBases(to_add_write_docs); if (result.isFail()) { return result; } //===================================================================================== // 8. ItemDoc 목록을 생성 한다. //===================================================================================== (result, var created_item_docs) = await createItemDocsByTestUserCreateData(owner, found_test_user_create_data); if(result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(created_item_docs, () => $"created_item_docs is null !!! - {owner.toBasicString()}"); pushWriteDocBases(created_item_docs); //===================================================================================== // 8. SocialActionDoc 목록을 생성 한다. //===================================================================================== var social_action_agent_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(social_action_agent_action, () => $"social_action_agent_action is null !!! - {owner.toBasicString()}"); foreach (var social_action_meta_data in MetaData.Instance._SocialActionTable.Values) { if (!social_action_meta_data.IsDefault) continue; result = await social_action_agent_action.tryAddSocialActionFromMetaId(social_action_meta_data.SocialActionId); if (result.isFail()) { Log.getLogger().error($"Failed to tryAddSocialActionFromMetaId() !!! : socialActionMetaId:{social_action_meta_data.SocialActionId} - {owner.toBasicString()}"); continue; } if (!social_action_agent_action.tryGetSocialAction(social_action_meta_data.SocialActionId, out var social_action)) { Log.getLogger().error($"Failed to tryGetSocialAction() !!! : socialActionMetaId:{social_action_meta_data.SocialActionId} - {owner.toBasicString()}"); continue; } if (social_action_meta_data.SlotNum != 0) { var social_action_action = social_action.getEntityAction(); NullReferenceCheckHelper.throwIfNull(social_action_action, () => $"social_action_action is null !!! - {owner.toBasicString()}"); result = social_action_action.tryEquipSocialAction((UInt16)social_action_meta_data.SlotNum); if (result.isFail()) { Log.getLogger().error($"Failed to tryEquipSocialAction() !!! : {result.toBasicString()} - {owner.toBasicString()}"); continue; } } var social_action_attribute = social_action.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(social_action_attribute, () => $"social_action_attribute is null !!! - {owner.toBasicString()}"); (result, var social_action_doc) = await social_action_attribute.toDocBase(); if (result.isFail()) { Log.getLogger().error($"Failed to toDocBase() by DefaultUserCreator !!! : {social_action.toBasicString()} - {owner.toBasicString()}"); continue; } NullReferenceCheckHelper.throwIfNull(social_action_doc, () => $"social_action_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(social_action_doc); } //===================================================================================== // 9. MyHome & ItemDoc 목록을 생성 한다. //===================================================================================== var myhome_agent_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(myhome_agent_action, () => $"myhome_agent_action is null !!! - {owner.toBasicString()}"); (result, var myhome) = await myhome_agent_action.tryMakeDefaultMyhome(); if (result.isFail()) { err_msg = $"Failed to tryAddMyhomeFromUgc() !!! : {result.toBasicString()} - {owner.toBasicString()}"; Log.getLogger().error(err_msg); return result; } NullReferenceCheckHelper.throwIfNull(myhome, () => $"myhome is null !!! - {owner.toBasicString()}"); var myhome_attribute = myhome.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(myhome_attribute, () => $"myhome_attribute is null !!! - {owner.toBasicString()}"); (result, var myhome_doc) = await myhome_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(myhome_doc, () => $"myhome_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(myhome_doc); var myhome_inventory_action = myhome.getEntityAction(); NullReferenceCheckHelper.throwIfNull(myhome_doc, () => $"myhome_doc is null !!! - {owner.toBasicString()}"); var bag_inven = myhome_inventory_action.getBagInven(); NullReferenceCheckHelper.throwIfNull(bag_inven, () => $"bag_inven is null !!! - {owner.toBasicString()}"); var has_items = bag_inven.getHasItemBases(); NullReferenceCheckHelper.throwIfNull(has_items, () => $"has_items is null !!! - {owner.toBasicString()}"); foreach (var item in has_items) { var new_item = item; var item_attribute = new_item.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(item_attribute, () => $"item_attribute is null !!! - {owner.toBasicString()}"); (result, var item_doc) = await item_attribute.toDocBase(); if (result.isFail()) { Log.getLogger().error($"Failed to toDocBase() by DefaultUserCreator !!! : {new_item.toBasicString()} - {owner.toBasicString()}"); continue; } NullReferenceCheckHelper.throwIfNull(item_doc, () => $"item_docs is null !!! - {owner.toBasicString()}"); pushWriteDocBase(item_doc); } //===================================================================================== // 10. CartDoc 생성 한다. //===================================================================================== var cart_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(cart_action, () => $"cart_action is null !!! - {owner.toBasicString()}"); var cart = cart_action.getCart(); NullReferenceCheckHelper.throwIfNull(cart, () => $"cart is null !!! - {owner.toBasicString()}"); var cart_attribute = cart.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(cart_attribute, () => $"cart_attribute is null !!! - {owner.toBasicString()}"); cart_attribute.newEntityAttribute(); (result, var cart_doc) = await cart_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(cart_doc, () => $"cart_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(cart_doc); //===================================================================================== // 11. FriendFolder 생성 한다. //===================================================================================== //이건 CustomDefineUI 로 사용변경 예정, 추후 삭제 예정 var friend_folder_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(friend_folder_attribute, () => $"friend_folder_attribute is null !!! - {owner.toBasicString()}"); friend_folder_attribute.fillNewData(); friend_folder_attribute.newEntityAttribute(); (result, var friend_folder_doc) = await friend_folder_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(friend_folder_doc, () => $"friend_folder_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(friend_folder_doc); //===================================================================================== // 12. QuestMailDoc & QuestDoc 목록을 생성 한다. //===================================================================================== var quest_mail_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(quest_mail_action, () => $"quest_mail_action is null !!! - {owner.toBasicString()}"); (var mail_quest_ids, var force_accept_quest_ids) = await quest_mail_action.makeQuestMailDocByType(EAssignRequireType.PlayerInitial); var quest_mails = quest_mail_action.makeNewSystemQuestMail(mail_quest_ids); foreach (var quest_mail in quest_mails) { var quest_mail_attribute = quest_mail.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(quest_mail_attribute, () => $"quest_mail_attribute is null !!! - {owner.toBasicString()}"); quest_mail_attribute.newEntityAttribute(); (result, var quest_mail_doc) = await quest_mail_attribute.toDocBase(); if (quest_mail_doc is null) continue; NullReferenceCheckHelper.throwIfNull(quest_mail_doc, () => $"quest_mail_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(quest_mail_doc); } var quest_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {owner.toBasicString()}"); var new_quests = await quest_action.makeNewQuestByCreateUser(force_accept_quest_ids); foreach (var new_quest in new_quests) { var quest_attribute = new_quest.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {owner.toBasicString()}"); quest_attribute.newEntityAttribute(); (result, var quest_doc) = await quest_attribute.toDocBase(); if (quest_doc is null) continue; NullReferenceCheckHelper.throwIfNull(quest_doc, () => $"quest_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(quest_doc); } //===================================================================================== // 13. RepeatQuestDoc 목록을 생성 한다. //===================================================================================== var repeat_quest_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(repeat_quest_attribute, () => $"repeat_quest_attribute is null !!! - {owner.toBasicString()}"); repeat_quest_attribute.newEntityAttribute(); (result, var repeat_quest_doc) = await repeat_quest_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(repeat_quest_doc, () => $"repeat_quest_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(repeat_quest_doc); //===================================================================================== // 14. CraftHelpDoc 목록을 생성 한다. //===================================================================================== var craft_help_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(craft_help_attribute, () => $"craft_help_attribute is null !!! - {owner.toBasicString()}"); craft_help_attribute.newEntityAttribute(); (result, var craft_help_doc) = await craft_help_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(craft_help_doc, () => $"repeat_quest_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(craft_help_doc); //===================================================================================== // 15. UserContentsSettingDoc 목록을 생성 한다. //===================================================================================== var user_contents_setting_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(user_contents_setting_attribute, () => $"user_contents_setting_attribute is null !!! - {owner.toBasicString()}"); user_contents_setting_attribute.MyhomeSlotOpenCount = MetaHelper.GameConfigMeta.MyHomeDefaultSaveSlot; user_contents_setting_attribute.newEntityAttribute(); (result, var user_contents_setting_doc) = await user_contents_setting_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(user_contents_setting_doc, () => $"user_contents_setting_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(user_contents_setting_doc); //===================================================================================== // 16. CharacterProfileDoc 목록을 생성 한다. //===================================================================================== var character_profile_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(character_profile_attribute, () => $"character_profile_attribute is null !!! - {owner.toBasicString()}"); character_profile_attribute.newEntityAttribute(); (result, var character_profile_doc) = await character_profile_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(character_profile_doc, () => $"character_profile_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(character_profile_doc); //===================================================================================== // 17. PackageLastOrderRecodeDoc 목록을 생성 한다. //===================================================================================== var package_last_order_recode_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(package_last_order_recode_attribute, () => $"package_last_order_recode_attribute is null !!! - {owner.toBasicString()}"); package_last_order_recode_attribute.newEntityAttribute(); (result, var package_last_order_recode_doc) = await package_last_order_recode_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(package_last_order_recode_doc, () => $"package_last_order_recode_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(package_last_order_recode_doc); //===================================================================================== // 18. UgqDailyRewardCountDoc 목록을 생성 한다. //===================================================================================== var ugq_daily_reward_count_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(ugq_daily_reward_count_attribute, () => $"repeat_quest_attribute is null !!! - {owner.toBasicString()}"); ugq_daily_reward_count_attribute.modifiedEntityAttribute(true); (result, var ugq_daily_reward_count_doc) = await ugq_daily_reward_count_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(ugq_daily_reward_count_doc, () => $"ugq_daily_reward_count_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(ugq_daily_reward_count_doc); // // 21. DailyQuestCheck //===================================================================================== // 20. SeasonPassDoc 목록을 생성 한다. //===================================================================================== var seasonPassManager = server_logic.getSeasonPassManager(); var season_pass_attribute = getOwner().getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(season_pass_attribute, () => $"season_pass_attribute is null !!! - {owner.toBasicString()}"); season_pass_attribute.newEntityAttribute(); season_pass_attribute.SeasonPassMetaId = seasonPassManager.currentSeasonPass; season_pass_attribute.IsChargedPass = false; season_pass_attribute.Exp = 0; season_pass_attribute.Grade = 1; season_pass_attribute.takenRewards.Clear(); (result, var season_pass_doc) = await season_pass_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(season_pass_doc, () => $"season_pass_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(season_pass_doc); setCompetedPrepareCreate(true); //===================================================================================== // 21. UserCreate 로그 설정 한다. //===================================================================================== m_user_create_log.UserGuid = user_attribute.UserGuid; m_user_create_log.UserPK = new_user_base_doc.getPK(); m_user_create_log.UserSK = new_user_base_doc.getSK(); m_user_create_log.AccountCreationType = account_attribute.AccountCreationType; m_user_create_log.UserCreationMetaType = found_test_user_create_data.getTypeName(); m_user_create_log.UserCreateMetaId = (META_ID)found_test_user_create_data.MetaId; Log.getLogger().info($"Step Prepare Create Test User Success : onPrepareCreate() - {owner.toBasicString()}"); return result; } public static async Task<(Result, List?)> createItemDocsByTestUserCreateData(Player owner, MetaAssets.TestUserCreateMetaData testUserCreateData) { ArgumentNullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!"); var result = new Result(); var err_msg = string.Empty; var make_item_docs = new List(); //===================================================================================== // 1. 아이템을 구성 한다. //===================================================================================== var inventory_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(inventory_action, () => $"inventory_action is null !!! - {owner.toBasicString()}"); var to_add_item_meta_ids = new List(); try { foreach (var item_meta_id in testUserCreateData.InventoryItems) { (result, var reserved_items) = await inventory_action.tryTakalbleToBag((uint)item_meta_id); if (result.isFail()) { Log.getLogger().error($"Failed to tryTakalbleToBag() by TestUserCreateData.InventoryItems !!! : {result.toBasicString()} - {owner.toBasicString()}"); continue; } } foreach (var item_meta_id in testUserCreateData.WearingItems) { (result, var reserved_items) = await inventory_action.tryTakableToBagWithEquip((uint)item_meta_id); if (result.isFail()) { Log.getLogger().error($"Failed to tryTakableToBagWithEquip() by TestUserCreateData.WearingItems !!! : {result.toBasicString()} - {owner.toBasicString()}"); continue; } } foreach (var (item_meta_id, index) in testUserCreateData.ToolPresets.Select((item_meta_id, index) => (item_meta_id, index))) { if (0 == item_meta_id) { continue; } (result, var reserved_items) = await inventory_action.tryTakableToBagWithEquip((uint)item_meta_id, 1, (Int16)index); if (result.isFail()) { Log.getLogger().error($"Failed to tryTakableToBagWithEquip() by TestUserCreateData.ToolPresets !!! : {result.toBasicString()} - {owner.toBasicString()}"); continue; } } foreach (var (item_meta_id, index) in testUserCreateData.TattooItems.Select((item_meta_id, index) => (item_meta_id, index))) { if (0 == item_meta_id) { continue; } (result, var reserved_items) = await inventory_action.tryTakableToBagWithEquip((uint)item_meta_id, 1, (Int16)index); if (result.isFail()) { Log.getLogger().error($"Failed to tryTakableToBagWithEquip() by TestUserCreateData.TattooItems !!! : {result.toBasicString()} - {owner.toBasicString()}"); continue; } } } catch (Exception e) { err_msg = $"Exception !!!, Failed to add Item by TestUserCreateData !!! : exception:{e} - {owner.toBasicString()}"; result.setFail(ServerErrorCode.TryCatchException, err_msg); Log.getLogger().error(result.toBasicString()); return (result, null); } var to_create_items = new Dictionary(); //===================================================================================== // 2. 지급된 아이템을 모두 참조 한다. //===================================================================================== var bag_inven = inventory_action.getBagInven(); NullReferenceCheckHelper.throwIfNull(bag_inven, () => $"bag_inven is null !!! - {owner.toBasicString()}"); var has_items = bag_inven.getHasItemBases(); foreach (var item in has_items) { var new_item = item as Item; NullReferenceCheckHelper.throwIfNull(new_item, () => $"new_item is null !!! - {owner.toBasicString()}"); var item_attribute = new_item.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(item_attribute, () => $"item_attribute is null !!! - {owner.toBasicString()}"); (result, var item_doc) = await item_attribute.toDocBase(); if(result.isFail()) { Log.getLogger().error($"Failed to toDocBase() by TestUserCreator !!! : {result.toBasicString()} - {owner.toBasicString()}"); continue; } NullReferenceCheckHelper.throwIfNull(item_doc, () => $"item_doc is null !!! - {owner.toBasicString()}"); var item_attrib = item_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(item_attrib, () => $"item_attrib is null !!! - {owner.toBasicString()}"); if(false == to_create_items.TryAdd(item_attrib.ItemGuid, new_item)) { Log.getLogger().error($"Failed to TryAdd() Item !!!, duplicated ItemGuid : {new_item.toBasicString()} - {owner.toBasicString()}"); continue; } make_item_docs.Add(item_doc); } return (result, make_item_docs); } public override async Task onTriggerEffect() { var result = new Result(); var err_msg = string.Empty; var owner = getOwner(); var server_logic = GameServerApp.getServerLogic(); var user_create_or_load_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(user_create_or_load_action, () => $"user_create_or_load_action is null !!! - {owner.toBasicString()}"); if(false == isCompletedPrepareCreate()) { err_msg = $"Not completed isCompletedPrepareCreate() !!! - {toBasicString()}, {getOwner().toBasicString()}"; result.setFail(ServerErrorCode.TestUserPrepareCreateNotCompleted , err_msg); return result; } if (true == isCompleted()) { err_msg = $"Test User completed creation !!! - {toBasicString()}, {getOwner().toBasicString()}"; result.setFail(ServerErrorCode.UserCreateCompleted, err_msg); return result; } // 유저 닉네임 생성을 위한 정보를 등록 한다. result = await createAndPushUserNicknameDocQuery(owner); if(result.isFail()) { return result; } // 기본 마이홈 Ugc Info를 S3에 업로드 한다 result = await tryUploadDefaultMyhomeUgcInfoToS3(owner); if (result.isFail()) { return result; } var batch = new QueryBatchEx( owner, LogActionType.UserCreate , server_logic.getDynamoDbClient() , true ); { batch.addQuery(new DBQEntityWrite( getToWriteDocBases() )); batch.addQuery(new QueryFinal(), completedTestUserCreate); } result = await QueryHelper.sendQueryAndBusinessLog(batch); if (result.isFail()) { // S3에 업로드한 Ugc Info를 제거한다. await tryDeleteDefaultMyhomeUgcInfoFromS3(owner); return result; } return result; } private async Task createAndPushUserNicknameDocQuery(Player owner) { ArgumentNullException.ThrowIfNull(owner, $"owner is null !!!"); var result = new Result(); var user_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(user_attribute, () => $"user_attribute is null !!! - {owner.toBasicString()}"); var nickname_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(nickname_attribute, () => $"nickname_attribute is null !!! - {owner.toBasicString()}"); var user_guid = user_attribute.UserGuid; var account_id = user_attribute.AccountId; var nickname = nickname_attribute.Nickname; nickname_attribute.newEntityAttribute(); if (false == m_is_pass_register_user_nickname_registeration) { deleteWriteDoc(); var user_nickname_registry_doc = new UserNicknameRegistryDoc(nickname); result = await user_nickname_registry_doc.newDoc4Query(); if (result.isFail()) { return result; } var doc_user_nickname_attrib = user_nickname_registry_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(doc_user_nickname_attrib, () => $"doc_user_nickname_attrib is null !!! - {owner.toBasicString()}"); doc_user_nickname_attrib.Nickname = nickname; doc_user_nickname_attrib.UserGuid = user_guid; doc_user_nickname_attrib.AccountId = account_id; pushWriteDocBase(user_nickname_registry_doc); } deleteWriteDoc(); (result, var nickname_base_doc) = await nickname_attribute.toDocBase(); if (result.isFail()) { return result; } NullReferenceCheckHelper.throwIfNull(nickname_base_doc, () => $"nickname_base_doc is null !!! - {owner.toBasicString()}"); pushWriteDocBase(nickname_base_doc); m_user_create_log.UserNickname = nickname; return result; } async Task tryUploadDefaultMyhomeUgcInfoToS3(Player player) { var result = new Result(); var err_msg = string.Empty; var myhome_agent_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(myhome_agent_action, () => $"myhome_agent_action is null !!! - {player.toBasicString()}"); if (!myhome_agent_action.tryGetSelectedMyhome(out var myhome)) { err_msg = $"Failed to tryGetSelectedMyHome() !!! : {this.getTypeName()}"; result.setFail(ServerErrorCode.MyHomeNotFound, err_msg); Log.getLogger().error(result.toBasicString()); return result; } var myhome_action = myhome.getEntityAction(); NullReferenceCheckHelper.throwIfNull(myhome_action, () => $"myhome_action is null !!! - {player.toBasicString()}"); result = await myhome_action.tryUploadMyhomeUgcInfoToS3(); if (result.isFail()) { err_msg = $"Failed to tryUploadMyhomeUgcInfoToS3() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return result; } return result; } async Task tryDeleteDefaultMyhomeUgcInfoFromS3(Player player) { var result = new Result(); var err_msg = string.Empty; var myhome_agent_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(myhome_agent_action, () => $"myhome_agent_action is null !!! - {player.toBasicString()}"); if (!myhome_agent_action.tryGetSelectedMyhome(out var myhome)) { err_msg = $"Failed to tryGetSelectedMyHome() !!! : {this.getTypeName()}"; result.setFail(ServerErrorCode.MyHomeNotFound, err_msg); Log.getLogger().error(result.toBasicString()); return result; } var myhome_action = myhome.getEntityAction(); NullReferenceCheckHelper.throwIfNull(myhome_action, () => $"myhome_action is null !!! - {player.toBasicString()}"); result = await myhome_action.tryDeleteMyhomeUgcInfoFolderFileFromS3(); if (result.isFail()) { err_msg = $"Failed to tryDeleteMyhomeUgcInfoFolderFileFromS3() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return result; } return result; } public async Task completedTestUserCreate(QueryExecutorBase queryExecutorBase) { await Task.CompletedTask; var err_msg = string.Empty; var owner = getOwner(); setCompleted(); // 생성시 DBEntityWrite 처리 후 DB 에서 다시 로딩하게 되어있다. // 나중에 최적화 목적으로 DBEntityWrite 처리 후 각각의 EntityAttribute 에 적재하는 방안도 고려 하자 !!! - kangms 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()}"); m_user_log.setInfo(owner.toUserLogInfo()); // 비즈니스 로그 추가 query_batch.appendBusinessLog(new UserCreateBusinessLog(log_action, DateTimeHelper.Current, m_user_create_log)); query_batch.appendBusinessLog(new UserBusinessLog(log_action, m_user_log)); var created_item_docs = getToWriteDocBases(); foreach (var item_doc in created_item_docs) { (var result, var item_log_info) = await item_doc.toItemLogInfo4Create(); if (result.isFail()) { err_msg = $"Failed to toItemLogInfo4Create() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); continue; } NullReferenceCheckHelper.throwIfNull(item_log_info, () => $"item_log_info is null !!! - {owner.toBasicString()}"); query_batch.appendBusinessLog(new ItemBusinessLog(item_log_info)); } return QueryBatchBase.QueryResultType.Success; } } }