Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

62
LINES

< > BotCompany Repo | #1008930 // ctxProcessRule

JavaX fragment (include)

// uses ctxContext()
// returns true when rule "matched"
static bool ctxProcessRule(S ruleName) {
  if (ruleName == null) false;
  ctxContext().rulesFired.add(ruleName);
  ++ctxContext().safetyCounter;
  WoodyRule rule = woodyBot().getRule(ruleName);
  if (rule == null) { print("Rule not found: " + ruleName); false; }
  printObjectWithFields(rule, "fullName", "condition", "body", "properties");
  
  print("Processing rule " + rule.fullName);
  
  S a = rule.properties.get("ANALYZER");
  if (a != null)
    ctxContext().activeAnalyzer = a;
    
  // evaluate condition again to set MATCH1
  rule.parsedCondition.get();
  
  // fake
  if (eqic(ruleName, "Agent#EVENT.NEWUSER")) {
    S theGoto = ctxFindFirstGoto(rule.body);
    print("NEWUSER -> Goto: " + theGoto);
    ctxContext().nextRule = theGoto;
    true;
  }
  
  if (neq(rule.properties.get("ACTIONSELECTOR"), "SWITCH"))
    // multi-action rules (RANDOMLOOP/TILLEND)
    if (ctxDoNextActionInRule(rule)) {
      if (!ctxPostRule())
        // continue with this rule
        ctxContext().setActiveRule(rule.fullName);
        
      true;
    }

  // SWITCH
  L<CtxCase> cases = ctxCases(rule.body);
  if (nempty(cases)) {
    for (CtxCase c : cases) {
      Bool b = c.condition == null /* default */
        || ctxEvalCondition(c.condition);
      print("case " + c.condition + " -> " + b + (b ? " (input: " + quote(ctxContext().input) + ")" : ""));
      if (isTrue(b)) {
        ctxContext().nextRule = mapGet(c.properties, "GOTO");
        a = mapGet(c.properties, "ANALYZER");
        if (a != null) {
          print("Setting analyzer to " + a + " by case in rule " + rule.fullName);
          ctxContext().activeAnalyzer = a;
        }
        ctxProcessAction(c.action);
        ctxPostRule();
        true;
      }
    }
    false;
  }
  
  print("Unknown rule type: " + ruleName);
  false;
}

download  show line numbers  debug dex  old transpilations   

Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1008930
Snippet name: ctxProcessRule
Eternal ID of this version: #1008930/30
Text MD5: b8cf47b127203b1e73b3330c3f700017
Author: stefan
Category: javax / a.i.
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2017-07-19 00:00:20
Source code size: 1929 bytes / 62 lines
Pitched / IR pitched: No / No
Views / Downloads: 574 / 610
Version history: 29 change(s)
Referenced in: #1006654 - Standard functions list 2 (LIVE, continuation of #761)