using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AsyncStateMachine; using ServerCore; using ServerBase; using SESSION_ID = System.Int32; 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 ServerBase; public abstract partial class EntityHFSMBase : HFSMBase, IWithEntityOwner { private readonly EntityBase m_owner; public EntityHFSMBase(EntityBase owner) : base() { m_owner = owner; } public async Task loadHfsm() { var result = new Result(); var err_msg = string.Empty; if (false == await initHfsm(EntityStateType.Created, setupHfsm)) { err_msg = $"\"Failed to create Entity HFSM !!!"; result.setFail(ServerErrorCode.EntityBaseHfsmInitFailed, err_msg); return result; } return result; } protected abstract bool setupHfsm(HFSMBase initHFSM); public override void onSubscribeStateChangeNotify() { var sm = getStateMachine(); NullReferenceCheckHelper.throwIfNull(sm, () => $"sm is null !!!"); sm.Observable.Subscribe(onTransitionedState); } protected virtual void onTransitionedState(AsyncStateMachine.Transition transition) { if (false == transition.isChangedState()) { return; } var owner = getOwner(); var debug_msg = $"EntityHFSM transited State !!! : {transition.toBasicString()} - {owner.toBasicString()}"; Log.getLogger().debug(debug_msg); } }