using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using ServerCore; using ServerBase; using SESSION_ID = System.Int32; using WORLD_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 USER_NICKNAME = System.String; using CHARACTER_GUID = System.String; using ITEM_GUID = System.String; using ENTITY_UNIQUE_ID = System.String; using ANCHOR_META_GUID = System.String; using NPC_UNIQUE_ID = System.String; using FARMING_ENTITY_GUID = System.String; using LOCATION_UNIQUE_ID = System.String; using FARMING_EFFECT_DOC_LINK_PKSK = System.String; namespace ServerCommon { public class FarmingEffectLocationInTargetAttribute : EntityAttributeBase, ICopyEntityAttributeFromDoc, IMergeWithEntityAttribute { [JsonProperty] public LOCATION_UNIQUE_ID LocationUniqueId { get; set; } = string.Empty; [JsonProperty] public ANCHOR_META_GUID AnchorMetaGuid { get; set; } = string.Empty; [JsonProperty] public USER_GUID UserGuid { get; set; } = string.Empty; [JsonProperty] public USER_NICKNAME UserNickname { get; set; } = string.Empty; public FARMING_EFFECT_DOC_LINK_PKSK FarmingEffectDocLinkPKSK { get; set; } = string.Empty; public FarmingEffectLocationInTargetAttribute(EntityBase owner) : base(owner) { } public override void newEntityAttribute() { base.newEntityAttribute(); } public override void onClear() { LocationUniqueId = string.Empty; AnchorMetaGuid = string.Empty; UserGuid = string.Empty; UserNickname = string.Empty; FarmingEffectDocLinkPKSK = string.Empty; getAttributeState().reset(); } public override EntityAttributeBase onCloned() { var owner = getOwner(); var cloned = new FarmingEffectLocationInTargetAttribute(owner); cloned.deepCopyFromBase(this); cloned.LocationUniqueId = LocationUniqueId; cloned.AnchorMetaGuid = AnchorMetaGuid; cloned.UserGuid = UserGuid; cloned.UserNickname = UserNickname; cloned.FarmingEffectDocLinkPKSK = FarmingEffectDocLinkPKSK; return cloned; } public override IEntityAttributeTransactor onNewEntityAttributeTransactor() { return new FarmingEffectLocationInTargetAttributeTransactor(getOwner()); } public override async Task<(Result, DynamoDbDocBase?)> toDocBase(bool isForQuery = true) { var result = new Result(); var err_msg = string.Empty; var owner = getOwner(); if(true == FarmingEffectDocLinkPKSK.isNullOrWhiteSpace()) { err_msg = $"Not make FARMING_EFFECT_DOC_LINK_PKSK !!! - {toBasicString()}, {owner.toBasicString()}"; result.setFail(ServerErrorCode.FarmingEffectDocLinkPkSkNotSet, err_msg); Log.getLogger().error(result.toBasicString()); return (result, null); } //===================================================================================== // Attribute => try pending Doc //===================================================================================== var try_pending_doc = getTryPendingDocBase() as FarmingEffectLocationInTargetDoc; if (null == try_pending_doc) { var to_copy_doc = new FarmingEffectLocationInTargetDoc( LocationUniqueId , AnchorMetaGuid, UserGuid, UserNickname , FarmingEffectDocLinkPKSK ); var origin_doc = getOriginDocBase(); if (null != origin_doc) { to_copy_doc.copyTimestampsFromOriginDocBase(origin_doc); } try_pending_doc = to_copy_doc; setTryPendingDocBase(try_pending_doc); } var to_copy_doc_farming_effect_location_in_target_attrib = try_pending_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(to_copy_doc_farming_effect_location_in_target_attrib, () => $"to_copy_doc_farming_effect_location_in_target_attrib is null !!! - {owner.toBasicString()}"); to_copy_doc_farming_effect_location_in_target_attrib.LocationUniqueId = LocationUniqueId; to_copy_doc_farming_effect_location_in_target_attrib.AnchorMetaGuid = AnchorMetaGuid; to_copy_doc_farming_effect_location_in_target_attrib.UserGuid = UserGuid; to_copy_doc_farming_effect_location_in_target_attrib.UserNickname = UserNickname; to_copy_doc_farming_effect_location_in_target_attrib.FarmingEffectDocLinkPKSK = FarmingEffectDocLinkPKSK; if (false == isForQuery) { return (result, try_pending_doc); } //===================================================================================== // Doc QueryType 반영 //===================================================================================== (result, var to_query_doc) = await applyDoc4Query(try_pending_doc); if (result.isFail()) { return (result, null); } return (result, to_query_doc); } public Result onMerge(EntityAttributeBase otherEntityAttribute) { var owner = getOwner(); var result = new Result(); var err_msg = string.Empty; if (null == otherEntityAttribute) { err_msg = $"Invalid Param !!!, otherEntityAttribute is null"; result.setFail(ServerErrorCode.FunctionParamNull, err_msg); Log.getLogger().error(result.toBasicString()); return result; } //===================================================================================== // OtherAttribute => Origin Attribute //===================================================================================== var other_farming_effect_location_in_target_attribute = otherEntityAttribute as FarmingEffectLocationInTargetAttribute; if (null == other_farming_effect_location_in_target_attribute) { err_msg = $"Failed to cast FarmingEffectLocationInTargetAttribute !!!, other_farming_effect_location_in_target_attribute is null - {owner.toBasicString()}"; result.setFail(ServerErrorCode.ClassTypeCastIsNull, err_msg); Log.getLogger().error(result.toBasicString()); return result; } LocationUniqueId = other_farming_effect_location_in_target_attribute.LocationUniqueId; AnchorMetaGuid = other_farming_effect_location_in_target_attribute.AnchorMetaGuid; UserGuid = other_farming_effect_location_in_target_attribute.UserGuid; UserNickname = other_farming_effect_location_in_target_attribute.UserNickname; FarmingEffectDocLinkPKSK = other_farming_effect_location_in_target_attribute.FarmingEffectDocLinkPKSK; //===================================================================================== // Attribute Try Pending Doc => Origin Doc //===================================================================================== var try_pending_doc = other_farming_effect_location_in_target_attribute.getTryPendingDocBase() as FarmingEffectLocationInTargetDoc; if (null != try_pending_doc) { other_farming_effect_location_in_target_attribute.resetTryPendingDocBase(); syncOriginDocBaseWithNewDoc(try_pending_doc); } var origin_doc_base = getOriginDocBase(); if (null == origin_doc_base) { // DB 에 저장되어 있지 않는 경우 OriginDoc은 null 이다 !!! return result; } var farming_effect_location_target_attrib = origin_doc_base.getAttrib(); NullReferenceCheckHelper.throwIfNull(farming_effect_location_target_attrib, () => $"farming_effect_location_target_attrib is null !!! - {owner.toBasicString()}"); farming_effect_location_target_attrib.LocationUniqueId = LocationUniqueId; farming_effect_location_target_attrib.AnchorMetaGuid = AnchorMetaGuid; farming_effect_location_target_attrib.UserGuid = UserGuid; farming_effect_location_target_attrib.UserNickname = UserNickname; farming_effect_location_target_attrib.FarmingEffectDocLinkPKSK = FarmingEffectDocLinkPKSK; return result; } public bool copyEntityAttributeFromDoc(DynamoDbDocBase? docBase) { var err_msg = string.Empty; var owner = getOwner(); var to_cast_string = typeof(FarmingEffectLocationInTargetDoc).Name; var farming_location_in_target_doc = docBase as FarmingEffectLocationInTargetDoc; if (null == farming_location_in_target_doc) { err_msg = $"Failed to copyEntityAttributeFromDoc() !!!, farming_location_in_target_doc is null :{to_cast_string} - {owner.toBasicString}"; Log.getLogger().error(err_msg); return false; } //===================================================================================== // New Doc => Origin Doc //===================================================================================== syncOriginDocBaseWithNewDoc(farming_location_in_target_doc); //===================================================================================== // Doc => Attribute //===================================================================================== var farming_effect_location_in_target_attrib = farming_location_in_target_doc.getAttrib(); NullReferenceCheckHelper.throwIfNull(farming_effect_location_in_target_attrib, () => $"farming_effect_location_in_target_attrib is null !!! - {owner.toBasicString()}"); farming_effect_location_in_target_attrib.LocationUniqueId = farming_effect_location_in_target_attrib.LocationUniqueId; farming_effect_location_in_target_attrib.AnchorMetaGuid = farming_effect_location_in_target_attrib.AnchorMetaGuid; farming_effect_location_in_target_attrib.UserGuid = farming_effect_location_in_target_attrib.UserGuid; farming_effect_location_in_target_attrib.UserNickname = farming_effect_location_in_target_attrib.UserNickname; farming_effect_location_in_target_attrib.FarmingEffectDocLinkPKSK = farming_effect_location_in_target_attrib.FarmingEffectDocLinkPKSK; return true; } } public class FarmingEffectLocationInTargetAttributeTransactor : EntityAttributeTransactorBase { public FarmingEffectLocationInTargetAttributeTransactor(EntityBase owner) : base(owner) { } } }