143 lines
4.8 KiB
C#
143 lines
4.8 KiB
C#
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;
|
|
|
|
|
|
using USER_GUID = System.String;
|
|
|
|
|
|
namespace ServerCommon;
|
|
|
|
public class PartyMemberAttribute : EntityAttributeBase, ICopyEntityAttributeFromCache
|
|
{
|
|
private ConcurrentDictionary<USER_GUID, PartyMemberInfo> m_party_members = new();
|
|
|
|
public PartyMemberAttribute(EntityBase owner) : base(owner)
|
|
{
|
|
}
|
|
|
|
public override async Task<Result> onInit() => await Task.FromResult(new Result());
|
|
|
|
public override void onClear()
|
|
{
|
|
m_party_members.Clear();
|
|
}
|
|
|
|
public override EntityAttributeBase onCloned()
|
|
{
|
|
var cloned = new PartyMemberAttribute(getOwner());
|
|
|
|
foreach (var member in m_party_members)
|
|
{
|
|
var insert = member.Value.clone();
|
|
|
|
cloned.m_party_members.TryAdd(member.Key, insert);
|
|
}
|
|
|
|
return cloned;
|
|
}
|
|
|
|
public ConcurrentDictionary<USER_GUID, PartyMemberInfo> getPartyMembers() => m_party_members;
|
|
public PartyMemberInfo? getPartyMember(USER_GUID user_guid) => m_party_members.GetValueOrDefault(user_guid);
|
|
public int getPartyMemberCount() => m_party_members.Count;
|
|
|
|
public void setPartyMember(PartyMemberInfo user) => m_party_members[user.UserGuid] = user;
|
|
public bool deletePartyMember(USER_GUID delete_user_guid) => m_party_members.Remove(delete_user_guid, out _);
|
|
|
|
public bool copyEntityAttributeFromCache(CacheBase? cacheBase)
|
|
{
|
|
var party_member_cache = cacheBase as PartyMemberCache;
|
|
if(null == party_member_cache)
|
|
{
|
|
var err_msg = $"Failed to copyEntityAttributeFromCache() !!!, party_member_cache is null :{nameof(PartyMemberCache)}";
|
|
Log.getLogger().error(err_msg);
|
|
return false;
|
|
}
|
|
|
|
//=====================================================================================
|
|
// Cache => Attribute
|
|
//=====================================================================================
|
|
foreach (var member in party_member_cache.PartyMembers)
|
|
{
|
|
if (m_party_members.ContainsKey(member.Key))
|
|
{
|
|
m_party_members[member.Key] = member.Value;
|
|
continue;
|
|
}
|
|
|
|
m_party_members.TryAdd(member.Key, member.Value);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool copyEntityAttributeFromAttribute(PartyMemberAttribute from_attribute)
|
|
{
|
|
//=====================================================================================
|
|
// Attribute => Attribute
|
|
//=====================================================================================
|
|
foreach (var member in from_attribute.getPartyMembers())
|
|
{
|
|
if (m_party_members.ContainsKey(member.Key))
|
|
{
|
|
m_party_members[member.Key] = member.Value;
|
|
continue;
|
|
}
|
|
|
|
m_party_members.TryAdd(member.Key, member.Value);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override IEntityAttributeTransactor onNewEntityAttributeTransactor()
|
|
{
|
|
return new PartyMemberAttributeTransactor(getOwner());
|
|
}
|
|
|
|
public override async Task<(Result, DynamoDbDocBase?)> toDocBase(bool isForQuery = true)
|
|
{
|
|
await Task.CompletedTask;
|
|
|
|
return (new Result(), null);
|
|
}
|
|
}
|
|
|
|
public class PartyMemberAttributeTransactor : EntityAttributeTransactorBase<PartyMemberAttribute>, ICopyEntityAttributeTransactorFromEntityAttribute
|
|
{
|
|
public PartyMemberAttributeTransactor(EntityBase owner) : base(owner)
|
|
{
|
|
}
|
|
|
|
public bool copyEntityAttributeTransactorFromEntityAttribute(EntityAttributeBase entityAttributeBase)
|
|
{
|
|
string err_msg;
|
|
|
|
var copy_from_party_member_attribute = entityAttributeBase as PartyMemberAttribute;
|
|
if (null == copy_from_party_member_attribute)
|
|
{
|
|
err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_from_party_member_attribute is null :{nameof(PartyMemberAttribute)}";
|
|
Log.getLogger().error(err_msg);
|
|
return false;
|
|
}
|
|
|
|
var copy_to_party_member_attribute = getClonedEntityAttribute() as PartyMemberAttribute;
|
|
if (null == copy_to_party_member_attribute)
|
|
{
|
|
err_msg = $"Failed to copyEntityAttributeTransactorFromEntityAttribute() !!!, copy_to_party_member_attribute is null :{nameof(PartyMemberAttribute)}";
|
|
Log.getLogger().error(err_msg);
|
|
return false;
|
|
}
|
|
|
|
copy_to_party_member_attribute.copyEntityAttributeFromAttribute(copy_from_party_member_attribute);
|
|
|
|
return true;
|
|
}
|
|
} |