using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections.Concurrent; using ServerCore; using ServerBase; using ServerCommon.Cache; namespace ServerCommon; public class PartyServerAttribute : EntityAttributeBase, ICopyEntityAttributeFromCache { private ConcurrentBag m_party_servers { get; set; }= new(); public PartyServerAttribute(EntityBase owner) : base(owner) { } public override async Task onInit() => await Task.FromResult(new Result()); public override void onClear() { m_party_servers.Clear(); getAttributeState().reset(); } public override EntityAttributeBase onCloned() { var cloned = new PartyServerAttribute(getOwner()); foreach (var server in m_party_servers) { cloned.m_party_servers.Add(server); } return cloned; } public ConcurrentBag getPartyServers() => m_party_servers; public void addPartyServer(string server_name) => m_party_servers.Add(server_name); public void deleteServer(string delete_server) { var new_bag = new ConcurrentBag(); foreach (var server in m_party_servers) { if (server == delete_server) continue; new_bag.Add(server); } m_party_servers = new_bag; } public bool copyEntityAttributeFromCache(CacheBase? cacheBase) { var party_server_cache = cacheBase as PartyServerCache; if(null == party_server_cache) { var err_msg = $"Failed to copyEntityAttributeFromCache() !!!, party_cache is null :{nameof(PartyServerCache)}"; Log.getLogger().error(err_msg); return false; } //===================================================================================== // Cache => Attribute //===================================================================================== m_party_servers.Clear(); foreach (var server in party_server_cache.PartyServers) { m_party_servers.Add(server); } return true; } public bool copyEntityAttributeFromAttribute(PartyServerAttribute from_attribute) { //===================================================================================== // Attribute => Attribute //===================================================================================== m_party_servers.Clear(); foreach (var server in from_attribute.getPartyServers()) { m_party_servers.Add(server); } return true; } public override IEntityAttributeTransactor onNewEntityAttributeTransactor() { return new PartyServerAttributeTransactor(getOwner()); } public override async Task<(Result, DynamoDbDocBase?)> toDocBase(bool isForQuery = true) { await Task.CompletedTask; return (new Result(), null); } } public class PartyServerAttributeTransactor : EntityAttributeTransactorBase, ICopyEntityAttributeTransactorFromEntityAttribute { public PartyServerAttributeTransactor(EntityBase owner) : base(owner) { } public bool copyEntityAttributeTransactorFromEntityAttribute(EntityAttributeBase entityAttributeBase) { string err_msg; var copy_from_party_server_attribute = entityAttributeBase as PartyServerAttribute; if (null == copy_from_party_server_attribute) { err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_from_party_server_attribute is null :{nameof(PartyServerAttribute)}"; Log.getLogger().error(err_msg); return false; } var copy_to_party_server_attribute = getClonedEntityAttribute() as PartyServerAttribute; if (null == copy_to_party_server_attribute) { err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_to_party_server_attribute is null :{nameof(PartyServerAttribute)}"; Log.getLogger().error(err_msg); return false; } copy_to_party_server_attribute.copyEntityAttributeFromAttribute(copy_from_party_server_attribute); return true; } }