using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon.Cache; namespace ServerCommon; public class PartyInstanceAttribute : EntityAttributeBase, ICopyEntityAttributeFromCache { public int InstanceId { get; set; } = 0; public string RoomId { get; set; } = string.Empty; public Timestamp StartTime { get; set; } = new(); public Timestamp EndTime { get; set; } = new(); public int JoinMemberCount { get; set; } = 0; public PartyInstanceAttribute(EntityBase owner) : base(owner) { } public override void onClear() { InstanceId = 0; RoomId = string.Empty; StartTime = DateTimeHelper.MinTime.ToTimestamp(); EndTime = DateTimeHelper.MinTime.ToTimestamp(); JoinMemberCount = 0; } public override EntityAttributeBase onCloned() { var cloned = new PartyInstanceAttribute(getOwner()) { InstanceId = InstanceId, RoomId = RoomId, StartTime = StartTime, EndTime = EndTime, JoinMemberCount = JoinMemberCount }; return cloned; } public bool copyEntityAttributeFromCache(CacheBase? cacheBase) { var party_instance_cache = cacheBase as PartyInstanceCache; if(null == party_instance_cache) { var err_msg = $"Failed to copyEntityAttributeFromCache() !!!, party_cache is null :{nameof(PartyInstanceCache)}"; Log.getLogger().error(err_msg); return false; } //===================================================================================== // Cache => Attribute //===================================================================================== InstanceId = party_instance_cache.InstanceId; RoomId = party_instance_cache.RoomId; StartTime = party_instance_cache.StartTime; EndTime = party_instance_cache.EndTime; JoinMemberCount = party_instance_cache.JoinMemberCount; return true; } public override IEntityAttributeTransactor onNewEntityAttributeTransactor() { return new PartyInstanceAttributeTransactor(getOwner()); } public override async Task<(Result, DynamoDbDocBase?)> toDocBase(bool isForQuery = true) { await Task.CompletedTask; return (new Result(), null); } } public class PartyInstanceAttributeTransactor : EntityAttributeTransactorBase, ICopyEntityAttributeTransactorFromEntityAttribute { public PartyInstanceAttributeTransactor(EntityBase owner) : base(owner) { } public bool copyEntityAttributeTransactorFromEntityAttribute(EntityAttributeBase entityAttributeBase) { string err_msg; var copy_from_party_instance_attribute = entityAttributeBase as PartyInstanceAttribute; if (null == copy_from_party_instance_attribute) { err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_from_party_instance_attribute is null :{nameof(PartyInstanceAttribute)}"; Log.getLogger().error(err_msg); return false; } var copy_to_party_instance_attribute = getClonedEntityAttribute() as PartyInstanceAttribute; if (null == copy_to_party_instance_attribute) { err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_to_party_instance_attribute is null :{nameof(PartyInstanceAttribute)}"; Log.getLogger().error(err_msg); return false; } copy_to_party_instance_attribute.InstanceId = copy_from_party_instance_attribute.InstanceId; copy_to_party_instance_attribute.RoomId = copy_from_party_instance_attribute.RoomId; copy_to_party_instance_attribute.StartTime = copy_from_party_instance_attribute.StartTime; copy_to_party_instance_attribute.EndTime = copy_from_party_instance_attribute.EndTime; copy_to_party_instance_attribute.JoinMemberCount = copy_from_party_instance_attribute.JoinMemberCount; return true; } }