takeStep method
Implementation
void takeStep(SamModel sm,SamReq req) {
if (req.action != null) {
String fnAct = req.action;
ActionFunc func = sm._sa.fnMap[fnAct];
if (func == null) {
sm.broken("function $fnAct not defined, cannot take ${req.action} action");
return;
} else {
func(sm, req);
}
} else if (req.signal != null) {
String fnAct = "${req.signal}";
ActionFunc func = sm._sa.fnMap[fnAct];
if (func == null) {
sm.broken("function $fnAct not defined, cannot take ${req.signal} signal");
return;
} else {
func(sm, req);
}
} else {
if (_bDebLog || req.bLog) log("takeStep $sm ${req.state}");
DefState ds = ssMap[sm._samState];
if ((ds.strNext == null) || (ds.strNext.indexOf(req.state) < 0)) {
sm.broken("cannot step to $ds from ${sm._samState}");
return;
}
ds = ssMap[req.state];
if (ds == null) {
sm.broken("lost DefState for ${req.state}");
return;
}
sm._samState = req.state;
sm.setHot("_samState",sm._samState); //update potential listeners.Assumes only place we change state
}
}