using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ServerCore; using ServerBase; using ServerCommon; using SESSION_ID = System.Int32; using WORLD_META_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 CHARACTER_GUID = System.String; using ITEM_GUID = System.String; namespace GameServer { public abstract class EntityCreatorBase : SimpleEventTriggerBase { private readonly Player m_owner; private List m_to_write_docs = new(); private bool m_is_completed_prepare_create = false; public EntityCreatorBase(Player owner) { m_owner = owner; } public abstract Task onPrepareCreate(); protected Result addWriteDocBases(List docBases) { var result = new Result(); var err_msg = string.Empty; foreach (var doc_base in docBases) { result = addWriteDocBase(doc_base); if(result.isFail()) { return result; } } return result; } protected Result addWriteDocBase(DynamoDbDocBase docBase) { var result = new Result(); var err_msg = string.Empty; if (true == m_to_write_docs.Exists(x => x.GetType() == docBase.GetType())) { err_msg = $"Already added DynamoDbDocBase by Exists() !!!, duplicated Doc : {docBase.getTypeName()} - {toBasicString()}"; result.setFail(ServerErrorCode.UserCreationForDynamoDbDocDuplicated, err_msg); Log.getLogger().error(result.toBasicString()); return result; } m_to_write_docs.Add(docBase); return result; } protected void pushWriteDocBase(DynamoDbDocBase docBase) { m_to_write_docs.Add(docBase); } protected void pushWriteDocBases(List docBases) { m_to_write_docs.AddRange(docBases); } public void deleteWriteDoc() where TDoc : DynamoDbDocBase { var found_doc = getToWriteDocBase(); if (found_doc == null) { return; } m_to_write_docs.Remove(found_doc); } public TDoc? getToWriteDocBase() where TDoc : DynamoDbDocBase { return m_to_write_docs.Find(x => x is TDoc == true) as TDoc; } public List getToWriteDocBases() where TDoc : DynamoDbDocBase { return m_to_write_docs.FindAll(doc => doc is TDoc == true).ConvertAll(doc => (TDoc)doc); } public List getToWriteDocBases() { return m_to_write_docs; } public bool isCompletedPrepareCreate() => m_is_completed_prepare_create; public void setCompetedPrepareCreate(bool isTrue) => m_is_completed_prepare_create = isTrue; public Player getOwner() => m_owner; } }