using ServerCommon; using ServerCore; using ServerBase; using META_ID = System.UInt32; namespace GameServer { public class Package : EntityBase { private Package(EntityBase parent) : base(EntityType.PackageAction, parent) { } public override async Task onInit() { var parent = getDirectParent(); NullReferenceCheckHelper.throwIfNull(parent, () => $"parent is null !!!"); addEntityAttribute(new PackageRepeatAttribute(this, parent)); return await base.onInit(); } public static async Task<(Result, Package?)> createPackageFromDoc(EntityBase parent, PackageRepeatDoc doc) { var package = new Package(parent); var result = await package.onInit(); if (result.isFail()) { return (result, null); } var err_msg = string.Empty; var package_attribute = package.getEntityAttribute(); ArgumentNullException.ThrowIfNull(package_attribute); if (package_attribute.copyEntityAttributeFromDoc(doc) == false) { err_msg = $"Failed to copyEntityAttributeFromDoc !!! : doc_type {doc.GetType()} - {package.getRootParent().toBasicString()}"; result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg); Log.getLogger().error(err_msg); return (result, null); } return (result, package); } public static async Task<(Result, Package?)> createPackage(Player owner, string order_guid, META_ID product_meta_id, int left_count, DateTime next_give_time) { var package = new Package(owner); var result = await package.onInit(); if (result.isFail()) { return (result, null); } var err_msg = string.Empty; var package_attribute = package.getEntityAttribute(); if (package_attribute == null) { err_msg = $"Failed to get package attribute : {nameof(PackageRepeatAttribute)}"; result.setFail(ServerErrorCode.EntityAttributeIsNull, err_msg); Log.getLogger().error(err_msg); return (result, null); } package_attribute.OrderGuid = order_guid; package_attribute.ProductMetaId = product_meta_id; package_attribute.LeftCount = left_count; package_attribute.NextGiveTime = next_give_time; package_attribute.newEntityAttribute(); return (result, package); } } }