takeStep method

void takeStep (
  1. SamModel sm,
  2. SamReq req
)

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
  }
}