76 lines
1.9 KiB
C#
76 lines
1.9 KiB
C#
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<EntityStateTriggerType, EntityStateType>, IWithEntityOwner
|
|
{
|
|
private readonly EntityBase m_owner;
|
|
|
|
public EntityHFSMBase(EntityBase owner)
|
|
: base()
|
|
{
|
|
m_owner = owner;
|
|
}
|
|
|
|
|
|
public async Task<Result> 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<EntityStateTriggerType, EntityStateType> initHFSM);
|
|
|
|
public override void onSubscribeStateChangeNotify()
|
|
{
|
|
var sm = getStateMachine();
|
|
NullReferenceCheckHelper.throwIfNull(sm, () => $"sm is null !!!");
|
|
|
|
sm.Observable.Subscribe(onTransitionedState);
|
|
}
|
|
|
|
protected virtual void onTransitionedState(AsyncStateMachine.Transition<EntityStateTriggerType, EntityStateType> transition)
|
|
{
|
|
if (false == transition.isChangedState())
|
|
{
|
|
return;
|
|
}
|
|
|
|
var owner = getOwner();
|
|
|
|
var debug_msg = $"EntityHFSM transited State !!! : {transition.toBasicString()} - {owner.toBasicString()}";
|
|
Log.getLogger().debug(debug_msg);
|
|
}
|
|
}
|