public TaskItem(IEnumerator <RunStatus> task, Scheduler scheduler, BCTX bctx) { Debug.Assert(task != null); this._task = task; this.Scheduler = scheduler; this.BContext = bctx; }
public bool EnqueueEvent(string evnt, BCTX bctx) { string evntBehavior = myBehaviors.getEventHandler(evnt); if (string.IsNullOrEmpty(evntBehavior)) { return(false); } return(ActivateBehaviorTask(evntBehavior, bctx)); }
public void Calling(TaskList taskList, BCTX bctx) { if (BContext == null) { BContext = bctx; } if (BContext != null) { BContext.SetCurrentTask(this, taskList, Scheduler.active == taskList); } }
public bool ActivateBehaviorTask(string name, bool waitUntilComplete, BCTX bctx) { if (!ActivateBehaviorTask_ul(name, bctx)) { Console.WriteLine("** WARNING Could not activate task! " + name); return(false); } if (!waitUntilComplete) { return(true); } WaitUntilComplete(name); return(true); }
private bool ActivateBehaviorTask_ul(string name, BCTX bctx) { // if its already running or sleeping string status = taskStatus(name); if (status == "running") { return(true); } if (status == "active") { return(true); } if (status == "sleeping") { return(AwakenTask(name)); } // start up a new one if (!myBehaviors.definedBehavior(name)) { return(false); } IEnumerator <RunStatus> iterator = myBehaviors.getBehaviorEnumerator(name, bctx); if (iterator == null) { // we didn't find it! return(false); } if ((singular == false) || (active.Count == 0)) { active.Append(new TaskItem(iterator, this, name, bctx)); } else { //Put in background if we are single minded sleeping.Append(new TaskItem(iterator, this, name, bctx)); } return(true); }
public void performAction(TextWriter writer, string action, string query, string behaviorName, BCTX bctx) { var multiBehaviorName = GatherTaskNames(behaviorName); if (multiBehaviorName != null) { if (multiBehaviorName.Count == 0) { writer.WriteLine("Zero tasks or behaviors from :" + behaviorName); return; } foreach (string behavorT in multiBehaviorName) { performAction(writer, action, query, behavorT, bctx); } return; } if (action != null && action.Contains(",")) { foreach (var a in action.Split(' ', ',')) { if (string.IsNullOrEmpty(a)) { continue; } performAction(writer, a, query, behaviorName, bctx); } } string ids = ""; string tsk = ""; TaskList.TaskEnumerator en = null; switch (action) { case "info": ids = idStatus(behaviorName); tsk = taskStatus(behaviorName); writer.WriteLine("<status id=\"{0}\" idStatus=\"{1}\" taskStatus=\"{2}\" />", behaviorName, ids, tsk); bool v01 = myBehaviors.visibleBehavior(behaviorName); bool v03 = myBehaviors.definedBehavior(behaviorName); string eh = myBehaviors.getEventHandler(behaviorName); if (!string.IsNullOrEmpty(eh) && !KeyCase.DefaultFN.SameKey(eh, behaviorName)) { writer.WriteLine("<eventHandler name=\"{0}\" value=\"{1}\">", behaviorName, eh); performAction(writer, action, query, eh, bctx); writer.WriteLine("</eventHandler>"); } if (v03) { var treeByTreeName = myBehaviors.GetTreeByName(behaviorName); writer.WriteLine(treeByTreeName.treeDoc.OuterXml); } writer.WriteLine("<visible name=\"{0}\" value=\"{1}\"/>", behaviorName, v01); writer.WriteLine("<defined name=\"{0}\" value=\"{1}\"/>", behaviorName, v03); break; case "source": string behaviorFile = myBehaviors.behaviorDiskName(behaviorName); string fileReadAllText = ""; lock (BehaviorTree.FileLock) { if (File.Exists(behaviorFile)) { fileReadAllText = File.ReadAllText(behaviorFile); } } writer.WriteLine("{0}", fileReadAllText); break; case "activate": ActivateBehaviorTask(behaviorName, bctx); WriteNewStatus(writer, behaviorName); break; case "deactivate": RemoveBehaviorTask(behaviorName); WriteNewStatus(writer, behaviorName); break; case "sleep": SleepBehaviorTask(behaviorName); WriteNewStatus(writer, behaviorName); break; case "sleepall": SleepAllTasks(); WriteNewStatus(writer, behaviorName); break; case "reviveall": ReviveAllTasks(); WriteNewStatus(writer, behaviorName); break; case "status": WriteNewStatus(writer, behaviorName); break; case "liststatus": en = sleeping.GetEnumerator(); while (en.MoveNext()) { writer.WriteLine("<status id=\"{0}\" taskStatus=\"{1}\" />", en.Current.name, "sleeping"); } en = active.GetEnumerator(); while (en.MoveNext()) { writer.WriteLine("<status id=\"{0}\" taskStatus=\"{1}\" />", en.Current.name, "active"); } break; case "listidstatus": var runState = LockInfo.CopyOf(myBehaviors.runState); foreach (string key in runState.Keys) { string status = runState[key].ToString(); writer.WriteLine("<status id=\"{0}\" idStatus=\"{1}\" />", key, status); } break; case "stopall": en = sleeping.GetEnumerator(); while (en.MoveNext()) { writer.WriteLine("<status id=\"{0}\" taskStatus=\"{1}\" />", en.Current.name, "terminating"); en.RemoveCurrent(); } en = active.GetEnumerator(); while (en.MoveNext()) { writer.WriteLine("<status id=\"{0}\" taskStatus=\"{1}\" />", en.Current.name, "terminating"); en.RemoveCurrent(); } break; case "block": myBehaviors.makeInvisible(query); myBehaviors.makeInvisible(behaviorName); RemoveBehaviorTask(behaviorName); WriteNewStatus(writer, behaviorName); break; case "unblock": myBehaviors.makeVisible(query); WriteNewStatus(writer, behaviorName); break; case "unblockall": myBehaviors.invisiblePatterns.Clear(); WriteNewStatus(writer, behaviorName); break; case "listblocks": foreach (string p in myBehaviors.invisiblePatterns.Keys) { writer.WriteLine("<blockBehaviorPattern pattern=\"{0}\" />", p); } break; case "checkblock": bool v1 = myBehaviors.visibleBehavior(behaviorName); bool v2 = myBehaviors.visibleBehavior(query); bool v3 = myBehaviors.definedBehavior(behaviorName); bool v4 = myBehaviors.definedBehavior(query); writer.WriteLine("<visible name=\"{0}\" value=\"{1}\"/>", behaviorName, v1); writer.WriteLine("<visible name=\"{0}\" value=\"{1}\"/>", query, v2); writer.WriteLine("<defined name=\"{0}\" value=\"{1}\"/>", behaviorName, v3); writer.WriteLine("<defined name=\"{0}\" value=\"{1}\"/>", query, v4); break; case "blockcron": bctx.blockCron = true; break; case "unblockcron": bctx.blockCron = false; break; default: writer.WriteLine("<error action=\"{0}\" query=\"{1}\" behaviorName=\"{2}\" />", action, query, behaviorName); break; } writer.WriteLine("<fin/>"); writer.Close(); }
public void AddTask(IEnumerator <RunStatus> task, BCTX bctx) { active.Append(new TaskItem(task, this, bctx)); }
public bool ActivateBehaviorTask(string name, BCTX bctx) { return(ActivateBehaviorTask(name, false, bctx)); }