修复了事件跳转状态跳转的问题,但是目前事件跳转仍然不完善,返回使用指针跳转的状态
This commit is contained in:
@@ -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
@@ -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);
|
||||
// }
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user