修复了事件跳转状态跳转的问题,但是目前事件跳转仍然不完善,返回使用指针跳转的状态

This commit is contained in:
zjk
2024-12-02 23:21:55 +08:00
parent ec595ac1dc
commit d9d715326a
7 changed files with 153 additions and 126 deletions
+19 -1
View File
@@ -46,7 +46,15 @@ PowerManger::PowerManger()
m_fsm.RegisterHandleFunction(&m_state3,handleState3);
// 注册状态机转换条件
// m_fsm.RegisterEvent()
// m_fsm.RegisterEvent(&m_state1, "a", &m_state2);
// m_fsm.RegisterEvent(&m_state2, "b", &m_state3);
// m_fsm.RegisterEvent(&m_state3, "c", &m_state1);
// cout << m_state1.event["a"]->name << endl;
// cout << m_state2.event["b"]->name << endl;
// cout << m_state1.event["a"]->id << endl;
// m_pmEvent = "a";
// 初始化状态机
m_pmState = m_state1;
@@ -108,6 +116,13 @@ bool PowerManger::OnConnectToServer()
bool PowerManger::Iterate()
{
m_fsm.run(m_pmState,this);
// m_fsm.run(&m_pmState,this,m_pmEvent);
cout <<"CURRENT STATE:" << m_pmState.name << " | CURRENT EVENT :" << m_pmEvent << endl;
// cout <<"____________________________________-" << m_pmState.event[m_pmEvent]->name << endl;
// cout << m_pmState.name << endl;
// cout << m_pmEvent << endl;
AppCastingMOOSApp::Iterate();
// 更新当前状态
updatePmState();
@@ -785,6 +800,7 @@ int PowerManger::handleState1(FSM_State &fsm,void* pData)
cout << fsm.name << endl;
PowerManger* pm = (PowerManger*)pData;
fsm = pm->m_fsm.getState("PM_STATE2");
// pm->m_pmEvent = "a";
return 0;
}
int PowerManger::handleState2(FSM_State &fsm,void* pData)
@@ -792,6 +808,7 @@ int PowerManger::handleState2(FSM_State &fsm,void* pData)
cout << fsm.name << endl;
PowerManger* pm = (PowerManger*)pData;
fsm = pm->m_fsm.getState("PM_STATE3");
// pm->m_pmEvent = "b";
return 0;
}
int PowerManger::handleState3(FSM_State &fsm,void* pData)
@@ -799,5 +816,6 @@ int PowerManger::handleState3(FSM_State &fsm,void* pData)
cout << fsm.name << endl;
PowerManger* pm = (PowerManger*)pData;
fsm = pm->m_fsm.getState("PM_STATE");
// pm->m_pmEvent = "c";
return 0;
}
+37 -28
View File
@@ -1,5 +1,5 @@
#include "fsm.h"
#include <iostream>
FSM::FSM(/* args */)
@@ -61,34 +61,43 @@ FSM_State FSM::getState(std::string name)
}
// int FSM::RegisterEvent(FSM_State* fsm, std::string event, FSM_State state)
// {
// if(fsm == NULL)
// return -1;
// fsm->event[event] = state;
// return 0;
// }
int FSM::RegisterEvent(FSM_State* fsm, std::string event, FSM_State *state)
{
if(fsm == NULL)
return -1;
fsm->event[event] = state;
return 0;
}
// int FSM::unRegisterEvent(FSM_State* fsm, std::string event)
// {
// if(fsm == NULL)
// return -1;
// if(fsm->event.count(event) <= 0)
// return -1;
// fsm->event.erase(event);
// return 0;
// }
int FSM::unRegisterEvent(FSM_State* fsm, std::string event)
{
if(fsm == NULL)
return -1;
if(fsm->event.count(event) <= 0)
return -1;
fsm->event.erase(event);
return 0;
}
// int FSM::run(FSM_State &fsm,void* data, std::string event)
// {
// if(fsm.event.count(event) <= 0)
// {
// return run(fsm,data);
// }
// else
// {
// fsm = fsm.event[event];
// return run(fsm,data);
// }
int FSM::run(FSM_State *fsm,void* data, std::string event)
{
if(fsm->event.count(event) <= 0)
{
std::cout << "no event" << std::endl;
return run(*(fsm),data);
}
else
{
int r = run(*(fsm),data);
// fsm = fsm->event[event];
*fsm = *fsm->event[event];
// std::cout << "event " << event <<std::endl;
// std::cout << "fsm" << fsm->name << std::endl;
return r;
}
}
// int FSM::run(FSM_State *fsm,void* data)
// {
// return run(*fsm,data);
// }
+2 -2
View File
@@ -25,10 +25,10 @@ public:
std::map<unsigned int, FSM_State> idStateMap;
int run(FSM_State &fsm,void* data);
int run(FSM_State &fsm,void* data, std::string event);
int run(FSM_State *fsm,void* data, std::string event);
//TODO: 事件注册机制实现
int RegisterEvent(FSM_State* fsm, std::string event, FSM_State &state);
int RegisterEvent(FSM_State* fsm, std::string event, FSM_State *state);
int unRegisterEvent(FSM_State* fsm, std::string event);
int RegisterState(std::string name, unsigned int id,FSM_State &state);